ry's Tech blog

Cloud Native技術などについて書いていきます。

Kubenews #27

2021-08-06

youtu.be

各タイトルを押していただくことで、実際の記事に飛びます。

Prometheus HA with Thanos Sidecar Or Receiver?

  • Thanosは、次の2つの方法でPrometheusとの統合をサポートしています。
  • Thanos Stackは以下のコンポーネントを持ちます。
    • Querier
    • Store
    • Compactor
    • Ruler
  • Thanos Sidecar

    • 複数のプロメテウスサーバーポッドでサイドカーとして実行されます。
    • このコンポーネントは、(Prometheus TSDBからの)オブジェクトストレージへのデータ配信を担当します。
    • Sidecarは、Prometheusのremote read APIの上にThanosのStore APIを実装し、ThanosQuerierという名前の集中コンポーネントからPrometheusサーバーの時系列データをクエリできるようにします。
    • さらに、サイドカーは、TSDBブロックを2時間間隔でオブジェクトストレージにアップロードするように構成することもできます。 この場合、バケットに保存されているデータは、Thanos Storeコンポーネントを使用してクエリできます。これは、同じStore APIを実装しており、ThanosQuerierが検出する必要があります。
  • Thanos Receiver

    • Prometheus Remote Write APIが使用され、PrometheusインスタンスがReceiverにリモートで継続的に書き込むように構成されます。
    • レシーバーは、オブジェクトストレージバケットにデータを入力するように構成されており、独自の保持期間もあります。
    • Querierは、Storeを介してReceiverとストレージバケットのデータをクエリするように構成されています。
  • サイドカーとレシーバーの比較

    • 高可用性
      • サイドカー
        • インスタンスは個別にターゲットをスクレイプし、サイドカーはブロックをオブジェクトストレージにアップロードします。
        • Prometheusは2時間ごとにTSDBブロックを書き込みます。
      • レシーバー
        • 複数のPrometheusインスタンスがデプロイされて同じターゲットをスクレイピングし、Receiver StatefulSetにリモートで書き込むように構成されています。
    • プロメテウスとの統合
      • サイドカー
        • Prometheusインスタンスポッドにサイドカーコンテナを追加するだけで、他のすべてのThanosコンポーネントが一緒に機能します。
        • Querier構成でエンドポイントを追加するだけで、サービスとしてThanosQuerierに公開されます。
      • レシーバー
        • これには、追加のReceiver StatefulSetをデプロイするとともに、TSDBをReceiverにリモート書き込みするために、Prometheusインスタンスの構成を変更する必要があります。
    • ストレージ
      • サイドカー
        • SidecarはPrometheusのローカルストレージから読み取るため、TSDBに追加のローカルストレージ(PV)は必要ありません。
      • レシーバー
        • StatefulSetであるReceiverは、PVでプロビジョニングする必要があります。
        • ここで必要なローカルストレージの量は、--receive.replication-factor、--tsdb.retentionというフラグに依存しています。
        • このセットアップには、Sidecarと比較してより多くのローカルストレージが必要です。
    • データ収集
      • サイドカー
        • TSDBブロックはPrometheusインスタンスのローカルストレージから読み取られ、クエリのためにQuerierに提供されるか、オブジェクトストレージに断続的にエクスポートされます。
      • レシーバー
        • Receiverはプッシュベースのモデルで動作します。
        • TSDBはPrometheusインスタンス自体によってReceiverに継続的にリモートで書き込まれるため、Prometheusをステートレスに近づけることができます。
        • その後、データはレシーバーからオブジェクトストレージにさらにアップロードされます。

What Is Workload Security? On-Premises, Cloud, Kubernetes, and More

Announcing Vitess Arewefastyet

  • Vitess arewefastyet
    • 継続的なベンチマークツール
    • 実行は、CLIからの手動トリガー、cronスケジュール、またはイベント(新しいプル要求、新しいリリースなど)に基づいて、さまざまなソースからトリガーできます。
    • webページから視覚的にベンチマークの結果を見ることが可能

Scheduled-Scaling with Kubernetes HPA External Metrics

  • HPA + Datadogの連携について

Verify Container Image Signatures in Kubernetes using Notary or Cosign or both

  • connaisseur

    • コンテナイメージの署名検証とtrust pinningをKubernetesクラスタに統合するためのアドミッションコントローラ
    • Connaisseurは展開前のイメージ署名の確認することを目指しています。
    • Mutating アドミッションコントローラーとして実装され、Kubernetesクラスターに送信されたリソースの作成または更新リクエストをインターセプトし、すべてのコンテナーイメージを識別たうえで、事前構成された公開鍵に対してそれらの署名を検証します。 その結果に基づいて、それらの要求を受け入れるか拒否します。
  • demo

レポジトリをクローンしてきます。

% git clone https://github.com/sse-secure-systems/connaisseur.git
Cloning into 'connaisseur'...
remote: Enumerating objects: 3682, done.
remote: Counting objects: 100% (764/764), done.
remote: Compressing objects: 100% (285/285), done.
remote: Total 3682 (delta 613), reused 478 (delta 478), pack-reused 2918
Receiving objects: 100% (3682/3682), 10.01 MiB | 3.98 MiB/s, done.
Resolving deltas: 100% (2198/2198), done.

% cd connaisseur

Connaisseurをデプロイします。

% helm install connaisseur helm --atomic --create-namespace --namespace connaisseur
NAME: connaisseur
LAST DEPLOYED: Wed Aug  4 11:45:35 2021
NAMESPACE: connaisseur
STATUS: deployed
REVISION: 1
TEST SUITE: None

% kubectl get pods -n connaisseur
NAME                                      READY   STATUS    RESTARTS   AGE
connaisseur-deployment-7d6bd95d48-bmjxw   1/1     Running   0          93s
connaisseur-deployment-7d6bd95d48-ghbkf   1/1     Running   0          94s
connaisseur-deployment-7d6bd95d48-m9zjh   1/1     Running   0          93s

Official Docker imagesを使ってPodを作成します。

% kubectl run hello-world --image=docker.io/hello-world                                                 
pod/hello-world created

作成されたこと確認できました。

では、署名されていないimageはどうでしょう。

% kubectl run demo --image=docker.io/securesystemsengineering/testimage:unsigned
Error from server: admission webhook "connaisseur-svc.connaisseur.svc" denied the request: Unable to find signed digest for image docker.io/securesystemsengineering/testimage:unsigned.

しっかり弾かれることがわかりました。

Bad Pods

  • こんなものがあったので紹介です。