より洗練された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のイベントを徹底的に理解する

推薦する

AzzaVPS-384Mメモリ/20gハードディスク/20M無制限

AzzVPS はニュージーランドの VPS 事業者で、設立されてまだ日が浅いですが、勢いがあります。...

正直言って値段が安すぎる。Virmachのフラッシュセールが再び始まり、さまざまな構成がランダムに提供され、最低価格は年間3ドルだ。

Virmach は今年、ブラックフライデーとサイバーマンデーにいくつかの安価な VPS を発売しまし...

マルチクラウド ネットワーキング ソフトウェアがクラウド プラットフォーム上のネットワークとアプリケーションを接続する際の課題を解決する方法

調査会社IDCのデータセンターおよびマルチクラウドネットワーキング担当副社長ブライアン・ケースモア氏...

検索エンジンスパイダーの原理の詳細な分析

私はウェブマスターと頻繁にやり取りしており、定期的に A5 Chat Webmaster Recor...

cloudcone: 超大容量ハードディスク VPS 再入荷、ロサンゼルス KVM、最大 500G ハードディスク、PayPal/Alipay

cloudcone は、電子メール マーケティング用の大容量ハード ドライブ VPS (ストレージ ...

集中型から分散型へ: クラウド アプリケーション管理の未来

クラウドベースの開発が拡大し、パフォーマンスと信頼性に対する需要が高まるにつれて、クラウドにアプリケ...

個人データのバックアップの一般的なソリューション

パソコン内のデータ、特に記事、写真、ビデオなどの個人的に作成されたデータは、通常、非常に貴重です。ハ...

アナリストはLinkedInの将来について楽観的であり、同社の株価はIPO以来の最高値を記録した。

テンセントテクノロジーニュース(明宣)北京時間2月28日、外国メディアの報道によると、投資銀行のエバ...

ウェブサイト分析: XX 秒で簡単に登録できますか?それで次は何ですか?

さまざまなウェブサイトの登録ページで、「登録まであとxx秒」というプロンプトをよく見かけます。スパム...

bandwagonhost/bandwagonhost vps-128m メモリ VPS シンプルレビュー

先ほど、bandwagonhost - 年間支払い 3.99 ドル / 超低価格 VPS / 小型メ...

「私は特殊部隊の兵士2: 国家の刃」のマーケティングハイライトを共有します

最近、江蘇衛星テレビのドラマ「私は特殊部隊の兵士2:国家の刃」が大人気で、筆者も最近このドラマを追い...

Webmaster Networkの第11回Dreamweaverウェブサイト構築トレーニングコースの申し込み受付を開始しました

トレーニング内容: dedecms DreamWeaver ウェブサイト構築チュートリアル。体系的な...

ブランドマーケティングの1世紀の歴史

ブランディングは新しい分野です。厳密に数えれば数十年の歴史しかありませんが、遡ってみると100年以上...

口コミマーケティングについての私の意見を話します

いわゆる口コミマーケティングとは、人々の間で口コミを通じて企業の製品やサービスを宣伝し、それによって...