Kubectl Foreach 複数のクラスターで Kubectl コマンドを実行します

Kubectl Foreach 複数のクラスターで Kubectl コマンドを実行します

先週、K8s マルチクラスター トラフィック スケジューリングのデモ部分を書いていたとき、複数のクラスターでコンポーネントを継続的にインストールしたり、アプリケーションをデプロイしたり、さまざまなコマンドを実行したりする必要がありました。当時、クラスターは Linux シェル スクリプトとツール kubectx を使用して次のように切り替えられていました。

または、次のようになります。

手術は面倒で、非常に痛いです。

今日、私は偶然、複数のクラスター (コンテキスト) で kubectl コマンドを実行できる kubectl プラグイン kubectl foreach​ を発見しました。たとえば、 kubectl foreach cluster-1 cluster-2 -- get po -n kube-system です。

プラグインはインストールも使用も簡単です。 krew 経由でインストールします:

 kubectl krew をインストール foreach

使い方も非常に簡単です:

 kubectl foreach -h
使用法
kubectl foreach [オプション] [パターン] ... -- [KUBECTL_ARGS...]

パターンを使用して、kubeconfigからのコンテキスト名を一致させることができます
() :すべてのコンテキストに一致
NAME :正確な名前と一致するコンテキスト
/ PATTERN / :コンテキストを正規表現と一致させる
^ NAME :一致した結果から正確な名前のコンテキストを削除します
^/ PATTERN / :結果から正規表現に一致するコンテキストを削除します

オプション:
- c = NUM​​ 並列実行の制限デフォルト 0 無制限
- I = VAL KUBECTL_ARGS出現するVALをコンテキスト名に置き換えます
- q 確認プロンプトを無効にし受け入れる( $KUBECTL_FOREACH_DISABLE_PROMPTS )
-h /-- help ヘルプを表示する

:
# abc という名前のコンテキスト上のノードを取得します
kubectl foreach abc -- ノードを取得する

# c1 を除く c0.. 9という名前のすべてのコンテキストノードを取得します(エスケープに注意してください)
kubectl foreach '/^c[0-9]/' ^ c1 -- ノードを取得する

# 「prod」はあっても「foo」は含まれないすべてのコンテキストノードを取得します
kubectl foreach / prod / ^/ foo / -- ノードを取得する

# 'kubectl tail'プラグインを使用して、 * test *という名前のコンテキスト内のポッドのログを追跡します。
kubectl foreach - I _ / test / --tail --cnotallow=_ -l app=foo

次に、k3d を使用して 3 つのクラスターをテストして作成します (k3d は複数のクラスターの同時作成をサポートしていないようですので、操作するには for スクリプトが必要です)。

クラスター- 1クラスター- 2クラスター- 3の CLUSTER_NAME について
する
k3d クラスター作成$ { CLUSTER_NAME } \
--image docker.io/rancher/k3s:v1.23.8-k3s2 \
--サーバメモリ 4g \
--k3s-arg "--disable=traefik@server:0" \
--no-lb \
--timeout 120秒 \
- 待って
終わり

クラスターのインストールが完了しました:

 k3d クラスター リスト
ネームサーバー エージェント ロードバランサー
クラスター- 1 1 / 1 0 / 0
クラスター- 2 1 / 1 0 / 0誤り
クラスター- 3 1 / 1 0 / 0誤り

k3d によってインストールされたクラスターのコンテキストには、 k3d-​ というプレフィックスが付くことに注意してください。 kubectl foreach を使用する場合は、次の点に注意してください。

 kubectx
k3d -クラスター- 1
k3d -クラスター- 2
k3d -クラスター- 3

たとえば、各クラスターの kube-sysmte の下のポッドを表示するには、次のようにします。

 kubectl foreach -q k3d -クラスター- 1 k3d -クラスター- 2 k3d -クラスター- 3 -- po -n kube-system を取得します

または、デプロイメントを作成してみてください。今回は、完全なコンテキスト名をリストする代わりに、正規表現 /cluster/ を使用します。

 kubectl foreach -q /クラスター/ --create deploy pipy --image flomesh/pipy -n default
コンテキスト内でコマンド実行します:
- k3d -クラスター- 1
- k3d -クラスター- 2
- k3d -クラスター- 3
k3d -クラスター- 1 |デプロイメント.apps / pipy が作成されました
k3d -クラスター- 3 |デプロイメント.apps / pipy が作成されました
k3d -クラスター- 2 |デプロイメント.apps / pipy が作成されました

次にポッドを確認します。

 kubectl foreach -q /クラスター/ -- ポッドを取得 -n デフォルト
コンテキスト内でコマンド実行します:
- k3d -クラスター- 1
- k3d -クラスター- 2
- k3d -クラスター- 3
k3d -クラスター- 1 |名前 準備完了 ステータス 再起動 年齢
k3d -クラスター- 1 | pipy - df659b55f - bnr27 1 / 1実行中0 25
k3d -クラスター- 3 |名前 準備完了 ステータス 再起動 年齢
k3d -クラスター- 3 | pipy - df659b55f - p9j49 1 / 1実行中0 25
k3d -クラスター- 2 |名前 準備完了 ステータス 再起動 年齢
k3d -クラスター- 2 | pipy - df659b55f - 9 bjgf 1 / 1実行中0 25

ログを表示します:

 kubectl foreach -q /クラスター/ -- ログ -l app=pipy -n デフォルト --tail 3
コンテキスト内でコマンド実行します:
- k3d -クラスター- 1
- k3d -クラスター- 2
- k3d -クラスター- 3
k3d -クラスター- 2 | 2022-11-30 10 : 40 : 56.520 [ INF ] [ listener ] 0.0.0.0TCPポート8080リッスンます
k3d -クラスター- 2 | 2022-11-30 10 : 40 : 56.520 [ INF ] [ listener ] 0.0 .0 .0TCPポート8081リッスンしています
k3d -クラスター- 2 | 2022-11-30 10 : 40 : 56.520 [ INF ] [ listener ] 0.0 .0 .0TCPポート8082リッスンしています
k3d -クラスター- 1 | 2022-11-30 10 : 40 : 56.551 [ INF ] [ listener ] 0.0.0.0TCPポート8080リッスンます
k3d -クラスター- 1 | 2022-11-30 10 : 40 : 56.551 [ INF ] [ listener ] 0.0.0.0TCPポート8081リッスンます
k3d -クラスター- 1 | 2022-11-30 10 : 40 : 56.551 [ INF ] [ listener ] 0.0.0.0TCPポート8082リッスンます
k3d -クラスター- 3 | 2022-11-30 10 : 40 : 55.813 [ INF ] [ listener ] 0.0 .0 .0TCPポート8080リッスンしています
k3d -クラスター- 3 | 2022-11-30 10 : 40 : 55.813 [ INF ] [ listener ] 0.0 .0 .0TCPポート8081リッスンしています
k3d -クラスター- 3 | 2022-11-30 10 : 40 : 55.813 [ INF ] [ listener ] 0.0 .0 .0TCPポート8082リッスンしています

複数のクラスターを操作する場合、特にコンテキスト名を一致させるために正規表現を使用する場合は注意が必要です。また、-q パラメータを使用すると、操作対象のクラスターリマインダーをスキップし、コマンドを直接実行できます。​

<<:  ヤフー、広告技術事業の優先パブリッククラウドプロバイダーとしてアマゾン ウェブ サービスを選択

>>:  2023年のクラウドコンピューティングのトレンド

推薦する

Baidu は広告会社としてのアイデンティティを捨て去るのだろうか?

5月18日、百度は香港での二次上場後初の財務報告となる四半期報告書を発表した。財務報告データによると...

成都での「クラウド+AI」のインテリジェント衝突、ゲストの感想を聞いてみましょう。

デジタル化の波の中で、企業はどのように機会を捉え、真にニーズを満たす変革とアップグレードの方法を見つ...

SEOの理解では、他人に奉仕することは自分自身に奉仕することほど良くない。

昨日の土曜日は何もすることがなかったので、オンライン上の友人2人に連絡して小さな集まりを企画しました...

2014 年に最適化のために他に何をすべきでしょうか?

今年後半から多くのウェブサイトが降格またはK化されていることが明らかになっており、そのほとんどは企業...

2019年のAndroid ASOプロモーション方法をすべて紹介!

2019年、Androidユーザー数は増加し続け、ASO最適化を試してみたいAndroid開発者が増...

Kubernetes の創設者が語る! K8s が反撃を受けています!

著者 |趙雲制作 | 51CTO テクノロジースタック (WeChat ID: blog) Kube...

ウェブサイトを最適化する前に考慮すべき質問

検索エンジン最適化(SEO)は10年前から中国にひっそりと導入されてきました。検索エンジンは小規模か...

従来の広告ビジネスは縮小しており、4大ポータルサイトがモバイルクライアントの獲得を競っている。

4大ポータルサイトが最近発表した最新の財務報告によると、収益は増加しているものの、従来の広告事業はさ...

三門峡ウェブサイト構築の内容は何ですか?どのウェブサイト構築会社が優れていますか?

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

百度の公式声明は、百度がまだ公式権限を持っているかどうか疑問視し続けている。

6月28日の事件と「ブラックフライデー」事件は、ウェブマスター界隈で大きな話題となった。この2日間、...

ビジュアルクラウドアーキテクチャの5つの柱

組織のクラウド インフラストラクチャから最大限の価値を引き出すことは困難な作業です。しかし、重要な考...

広告に最適なマーケティングチャネル選択戦略!

「もし私があなたに1000万あげたら、あなたはそれをどう使いますか?」この質問は大規模な予算を持つ企...

春節マーケティングを活性化させる6つの方法!

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス春節が近づいてきました!...

分散ストレージはストレージ市場を支配するでしょうか?

[[427506]]近年、クラウド、ビッグデータ、AI、ブロックチェーンなどの技術の発展に伴い、IT...

ページ最適化でSEO最適化ライフを変えましょう

優れたオンページ最適化と強力な注目度構築の価値を過小評価しないでください。SEO 最適化担当者として...