より洗練されたKubernetesクラスタイベント測定ソリューション

より洗練されたKubernetesクラスタイベント測定ソリューション

[[442821]]

みなさんこんにちは。私は張錦濤です。

グループ内の友人が、ローリング アップグレード プロセスの時間を測定する方法について、上の写真のような質問を私にしました。

この問題は、さまざまなシナリオに適用できる一般的な要件に抽象化できます。

  • たとえば、Kubernetes クラスターの管理者であれば、最適化ポイントを見つけるためにこのプロセスにかかる時間を測定したいとします。
  • たとえば、CI/CD を実行している場合は、このプロセスの時間消費を測定することで、CI/CD プロセスの時間消費を示す必要があります。

既存のソリューション

Kubernetes は、この問題を解決するための非常に便利な方法を提供しています。これは、私が返信で説明した、イベントによる測定です。

たとえば、K8S でデプロイメントを作成し、そのプロセス内のイベント情報を確認します。

  1. ➜ ~ kubectl作成ns moelove
  2. namespace/moelove を作成しました
  3. ➜ ~ kubectl -n moeloveデプロイメント redisを作成します--image=ghcr.io/moelove/redis:alpine  
  4. デプロイメント.apps/redis が作成されました
  5. ➜ ~ kubectl -n moelove をデプロイする
  6. 名前準備完了最新利用可能年齢
  7. レディス 1/1 1 16秒
  8. ➜ ~ kubectl -n moelove イベントを取得する
  9. 最終閲覧タイプ理由オブジェクトメッセージ
  10. 27 秒 通常スケジュール pod/redis-687967dbc5-gsz5n moelove/redis-687967dbc5-gsz5n をkind-control-plane正常に割り当てました
  11. 27 秒 正常 pod/redis-687967dbc5-gsz5n をプルしました コンテナ イメージ「ghcr.io/moelove/redis:alpine」は既にマシン上に存在します
  12. 27 秒 正常 pod/redis-687967dbc5-gsz5n を作成しました コンテナ redis を作成しました
  13. 27秒 正常 pod/redis-687967dbc5-gsz5n を起動しました コンテナ redis を起動しました
  14. 27 秒 正常 成功 replicaset/redis-687967dbc5 を作成しました ポッド redis-687967dbc5-gsz5n を作成しました
  15. 27 秒 通常の ScalingReplicaSet デプロイメント/redis レプリカセットredis-687967dbc51スケールアップしました

私たちが主に関心を持っているイベントのいくつかが記録されていることがわかります。しかし、常に kubectl で確認できるとは限らず、時間の無駄になります。

私のこれまでの実践の 1 つは、K8S でプログラムを作成して K8S クラスター内のイベントを継続的に監視および収集し、それを保存および視覚化用に開発したシステムに書き込むことでした。ただし、このアプローチには追加の開発が必要であり、普遍的ではありません。ここで、別のより良い解決策を紹介します。

よりエレガントな解決策

K8S のこれらのイベントは、当社の操作の 1 つに対応しています。たとえば、上記ではデプロイメントが作成され、スケジュール済み、プル済み、作成済みなどのいくつかのイベントが生成されます。これを抽象化すると、リンク トレースと非常に似ているのではないでしょうか。

ここではCNCF卒業プロジェクトJaeger[1]を使用します。これまでのK8Sエコシステムウィークリーレポートでも何度も紹介してきました。 Jaeger は、オープンソースのエンドツーエンドの分散トレース システムです。ただし、この記事の焦点はそれを紹介することではないため、ドキュメントを確認し、Jaeger をすぐに展開します。 CNCFのサンドボックスレベルのプロジェクトとしては、クラウドネイティブソフトウェアの可観測性フレームワークであるOpenTelemetry[2]があります。イェーガーと組み合わせて使うこともできます。ただし、この記事の焦点はこれら 2 つのプロジェクトを紹介することではないため、ここでは省略します。

次に、この記事で使用したメインプロジェクトである、Weaveworks のオープンソース プロジェクトである kspan を紹介します。その主なアプローチは、K8S 内のイベントをトレース システムのスパンとして整理することです。

kspanをデプロイする

  1. ---  
  2. APIバージョン: v1
  3. 種類: サービスアカウント
  4. メタデータ:
  5. 名前: kspan
  6. ---  
  7. apiバージョン: rbac。認証.k8s.io/v1
  8. 種類: ClusterRoleBinding
  9. メタデータ:
  10. 作成タイムスタンプ: null  
  11. 名前: kspan-admin
  12. ロールリファレンス:
  13. apiGroup : rbac.authorization.k8s.io
  14. 種類: ClusterRole
  15. 名前: クラスター管理者
  16. 科目:
  17. - 種類: サービスアカウント
  18. 名前: kspan
  19. 名前空間:デフォルト 
  20. ---  
  21. APIバージョン: v1
  22. 種類: ポッド
  23. メタデータ:
  24. ラベル:
  25. 実行: kspan
  26. 名前: kspan
  27. 仕様:
  28. コンテナ:
  29. - イメージ: docker.io/weaveworks/kspan:v0.0
  30. 名前: kspan
  31. リソース: {}
  32. dnsポリシー: ClusterFirst
  33. 再起動ポリシー: 常に
  34. サービスアカウント名: kspan

ここで提供する YAML をデプロイメント テストに直接使用できますが、上記の構成ファイルは実稼働環境では使用しないでください。また、RBAC 権限を変更する必要があることに注意してください。

デフォルトでは、スパンを渡すために otlp-collector.default:55680 が使用されるため、この svc が存在することを確認する必要があります。上記のコンテンツがすべてデプロイされると、おそらく次のようになります。

  1. ➜ ~ kubectlすべて取得 
  2. 名前準備完了 ステータス 再起動 年齢
  3. pod/jaeger-76c84457fb-89s5v 1/1 実行中 0 64分
  4. pod/kspan 1/1 ランニング 0 35m
  5. pod/otel-agent-sqlk6 1/1 実行中 0 59 メートル
  6. pod/otel-collector-69985cc444-bjb92 1/1 実行中 0 56m
  7.  
  8. 名前タイプ クラスター IP 外部 IP ポート 年齢
  9. service/jaeger-collector ClusterIP 10.96.47.12 <なし> 14250/TCP 60m
  10. service/kubernetes ClusterIP 10.96.0.1 <なし> 443/TCP 39h
  11. service/otel-collector ClusterIP 10.96.231.43 <なし> 4317/TCP、14250/TCP、14268/TCP、9411/TCP、8888/TCP 59m
  12. service/otlp-collector ClusterIP 10.96.79.181 <なし> 55680/TCP 52m
  13.  
  14. 名前希望現在準備完了最新利用可能 ノード セレクタ 年齢
  15. daemonset.apps/otel-agent 1 1 1 1 1 <なし> 59m
  16.  
  17. 名前準備完了最新利用可能年齢
  18. デプロイメント.apps/jaeger 1/1 1 1 73分
  19. デプロイメント.apps/otel-collector 1/1 1 1 59分
  20.  
  21. 名前希望現在の年齢
  22. レプリカセット.apps/jaeger-6f77c67c44 0 0 0 73分
  23. レプリカセット.apps/jaeger-76c84457fb 1 1 1 64分
  24. レプリカセット.apps/otel-collector-69985cc444 1 1 1 59分

始める

ここではまずテスト用の名前空間を作成します。

  1. ➜ ~ kubectl作成ns moelove
  2. namespace/moelove を作成しました

デプロイメントを作成する

  1. ➜ ~ kubectl -n moeloveデプロイメント redisを作成します--image=ghcr.io/moelove/redis:alpine  
  2. デプロイメント.apps/redis が作成されました
  3. ➜ ~ kubectl -n moelove ポッドを取得する
  4. 名前準備完了 ステータス 再起動 年齢
  5. redis-687967dbc5-xj2zs 1/1 実行中 0 10秒

Jaeger でチェックしてください:

詳細を見るにはクリックしてください

ご覧のとおり、デプロイの作成に関連するすべてのイベントがグループ化されており、消費時間などの詳細情報がタイムラインに表示されます。

要約する

この記事では、Jaeger によるトレースを使用して K8S 内のイベントを収集し、K8S クラスター内のすべてのイベントの時間のかかるポイントをよりよく理解し、最適化の方向と測定結果をより簡単に見つける方法を紹介します。

この記事はWeChatの公式アカウント「MoeLove」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合はMoeLove公式アカウントまでご連絡ください。

<<:  2022年のクラウドコンピューティング

>>:  Kubernetesのイベントを徹底的に理解する

推薦する

ニュース: OVH のシンガポールとオーストラリアの VPS が再入荷

シンガポールとオーストラリアにあるOVHの2つのデータセンターのVPSが、長い間在庫切れだったが、再...

スノーシーチンチラが語るタレントネットワークシリーズ(I):タレントネットワークの展望と発展

2012 年、ますます多くのウェブマスターがタレント ウェブサイトの仲間入りをして収益を上げ始めまし...

solidseovps: 米国の VPS、年間 10 ドルから、1G メモリ/1 コア/10g NVMe/500g トラフィック/10Gbps 帯域幅

solidseovps は 2006 年に設立されたアメリカの老舗企業で、現在 VPS と専用サーバ...

SosoがSogouに合併された後に残ったいくつかの疑問

今年の中国の検索エンジン業界は「一連の異例の現象」と言える。まず、360の自称第三世代検索エンジンが...

A5 Yuehuai: ランキングは良いのにトラフィックがないウェブサイトを避けるためのヒント

多くのウェブマスターは、一定期間ウェブサイトの最適化に熱心に取り組んだ後、ウェブサイトのスナップショ...

ワンストップサービスを備えたソフトウェアとアプリケーションのショッピングモールを構築する方法

2011 年には、主要なモバイル アプリケーション ストアが急速に登場し、いくつかのグループに分かれ...

クラウドコンピューティングの運用と保守をうまく行う方法

[[230368]]インダストリー4.0の台頭により、クラウド コンピューティングは実験段階から具体...

中国がインターネットに接続されて20年:ウェブサイトの総数は350万7千に達し、海外からの攻撃数が大幅に増加

新浪科技報、3月21日朝のニュース、中国インターネット協会と国家インターネット緊急センターが今朝北京...

impactvps: KVM/$24/年/512M メモリ/150g ハードドライブ/10Gbps ポート/シアトル

今日、大容量のハードドライブと安価で信頼性の高い KVM VPS を求める人に偶然会いました。正直に...

Nofollowを説明する

Kを歌って帰ってきたら、「Hao Yumi」が私のブログにメッセージを残していて、フレンドリーリンク...

杭州愛北が企業ウェブサイト最適化の基本的な考え方と戦略について語る

2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますインターネ...

Baiduの外部リンクツールを参考にして外部リンクを作ることについての私の個人的な意見

インターネット上にはすでに百度の外部リンク検索ツールに関する議論の投稿が多数あり、同社はそれらの古い...

gcore - ロシアの VPS/無制限のトラフィック/3.25 ユーロ/512M RAM/20g SSD

gcorelabs のモスクワ 2 データ センターは新しく開設され、KVM 仮想化、純粋な SSD...

Digital-VM: 50% オフ、月額 3 ドルから、最大 10Gbps の帯域幅、512M メモリ/1 コア/30g SSD/5T トラフィック

digital-vm は年末のスーパープロモーションを開始しました。すべての VPS が 50% オ...