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

推薦する

Namecheap: プロフェッショナル WordPress ホスティングが年間 14.88 ドル

Namecheap は、WordPress ブログ サービスのみを提供するプロフェッショナルな Wo...

新しいサイトがインデックスされていない場合はrobots.txtファイルを無視しないでください

今日、偶然、ウェブマスターの友人の講演を目にしました。彼は、自分の新しいウェブサイトがなぜ含まれてい...

2020年、エンタープライズレベルのSaaSは流行によって「一時停止」されましたか?

死亡者数と感染者数は依然として増加しています。この突然の新型コロナウイルス感染症の流行により、常に重...

UC声明:百度が独占を利用して神馬検索を攻撃した疑い

新浪科技は4月30日夜、UC優士が今晩、百度によるUCブラウザと神馬検索の「誤操作」の可能性について...

ローカルポータルの収益化への道

素晴らしい計画を持っているものの、利益を上げるのが遅い地域ポータルサイトは数多くあります。1~2年運...

ソフト記事プロモーション:「ジェット・リー」と「スティーブン・チョウ」から、IPマーケティングの正しい遊び方を解説!

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

百度の823アルゴリズムアップグレードの第一歩を分析

8月23日の百度によるアルゴリズムアップグレードに関する公式説明は、おおよそ次の通りだった。「今回の...

#格安 VPS# cloudcone - 月額 2.5 ドル、KVM/メモリ 1g/ハードディスク 50g/トラフィック 2T

Cloudcone は、KVM 仮想化、ロサンゼルス MC データ センター、1Gbps 帯域幅を備...

ウェブサイトのバックリンク品質の重要性を共有する: SEO担当者の経験

みなさんこんにちは。私は Xiao Chen です。今日は、SEO 担当者の皆さんと外部リンクに関す...

spinservers: サンノゼ VPS - 40% オフ、月額 5.6 ドル、2G メモリ/2 コア/20g SSD/2T トラフィック/1Gbps 帯域幅

spinservers は、中国の中秋節期間中に、サンノゼ データ センターの VPS プロモーショ...

純利益の「接近戦」クラウドコンピューティングが次の戦場か?

[[265739]]過去1年間、アリババとテンセントはともに経済環境の不確実性と、沈みゆく市場におけ...

電子署名市場は引き続き活況を呈しており、リーダーであるShangshangqianの署名量は2018年に24億に達した。

電子署名業界は2019年に再び盛り上がりを見せました。資本の注目を浴びる人気分野となっただけでなく、...

投稿をキックして、arkecx の 11.11 特別クラウド サーバー割引コードを 6 つ入手しましょう!

みなさんこんにちは。今月は毎年恒例のダブルイレブンとブラックフライデーが両方あります。みなさんは満足...

クラウド コンピューティングがグローバルなデジタル変革を推進する方法

クラウド コンピューティングは企業にとって独特の課題を提示しますが、全体として、クラウド コンピュー...