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年のクラウドコンピューティングのトレンド

推薦する

Kubernetes 宣言型 API

Kubernetes 内のさまざまなリソース オブジェクト (以下、「K8s」と呼びます) のデータ...

今すぐToutiaoにゲーム広告を掲載するための操作ガイドを入手してください!

広告は選択のプロセスである広告は実際には選択のプロセスです。オプティマイザーは経験とデータ分析を活用...

ワインの電子商取引:雪の中に花が咲く?

9月初旬、Jiuxian.comとJiumei.comは、それぞれ2億元と1億元を超える新たな資金調...

クラウド自動化がサイバーセキュリティの未来にとって重要な理由

多くの組織は、特に自律的な許可とアクセス権と組み合わせることで、サイバーセキュリティの将来を計画する...

WeChatは大きなプレッシャーの下でマーケティング開発戦略を採用する必要がある

世の中には、他人が金儲けをしていることに嫉妬する人が常にたくさんいます。WeChatのような優れた製...

機密情報サイトでお金を稼ぐのは簡単ではない。革新的な収益モデルが鍵となる

機密情報ネットワークの運用環境は、最近かなり危険になっているようだ。過去数年間、58.com と G...

Google ペンギンの「不適切な」リンク構築のリスト

Google ペンギンの影響により、ウェブマスターは以前のアルゴリズム アップデートよりもさらに動揺...

bandwagonhost/bandwagonhost vps-フェニックスシティ高速VPS/24時間50%割引プロモーション

bandwagonhost/bandwagonhost vps、VPS 24 時間半額プロモーション...

メイン、セカンダリ、ボトムナビゲーションリンクを設定してスマートなスパイダーウェブを形成する方法について説明します。

今日のスパイダーは敏感です。注意を払わないと、ウェブサイトが破滅する可能性があります。著者にはウェブ...

2014 年にウェブサイトを最適化する方法はどこにあるのでしょうか?

SEO が始まったばかりの頃は、時間の問題でした。どんなウェブサイトでも、一定の時間を投資し (時間...

ITコミュニティサイトCSDNがシリーズA資金調達の完了を発表

新浪科技新聞10月23日午後、ITコミュニティサイトCSDNは本日、シリーズA資金調達を完了したと発...

XiaomiとMicrosoftが戦略的協力覚書を締結:クラウドコンピューティング、人工知能、ハードウェア製品における協力をさらに深める

XiaomiとMicrosoftが戦略的協力覚書を締結した。両者は長年築いてきた相互信頼と協力関係に...

YY: テンセントの脅威にさらされながらも「控えめに」成長

起業して7年、李雪玲はナスダック上場に一歩近づきました。北京時間10月15日夜、Huya CEOの李...

誰もがSEO担当者と呼べるわけではない

みなさんこんにちは。私は魏東東です。久しぶりに真面目に記事を書きました。今日は気分が落ち込んでいるの...

ウェブマスターネットワークニュース:テンセントのSogouオンラインバンキングへの投資は業界の繁栄につながった

1. Twitterのビジネス変革:長年の赤字から金儲けの機械へはじめに:ロイターは月曜日、「洞察:...