k8sのコントローラータイプKubernetes には、ステートマシンに相当する多くの組み込みコントローラーがあり、Pod の特定の状態と動作を制御するために使用されます。
一般に、K8S には、ステートレス アプリケーション、ステートフル アプリケーション、ガード アプリケーション、バッチ アプリケーションの処理に対応する 5 つのコントローラーがあります。 ポッドとコントローラの関係コントローラ: クラスタ上のコンテナを管理および実行するオブジェクトは、ラベルセレクタを通じて関連付けられます。 Pod はコントローラーを使用して、スケーリングやアップグレードなどのアプリケーションの操作とメンテナンスを実装します。 デプロイメント(ステートレスアプリケーション)応用シナリオ: Webサービス Deployment は中国語で配備とスケジュールを意味します。Deployment を通じて、RS (ReplicaSet) を操作することができます。yml ファイルによる宣言として簡単に理解できます。Deployment ファイルでは、Pod の数、更新方法、使用するイメージ、リソース制限などを定義できます。ステートレスアプリケーションはデプロイメントを使用して作成されます Deployment オブジェクトを使用すると、次のことが簡単に実行できます。
デプロイメントの作成 [root@master shuai]# vim nginx-delpoy.yaml APIバージョン: アプリ/v1 種類: デプロイメント「定義はデプロイメントです」 メタデータ: 名前: nginx-deployment ラベル: アプリ: nginx 仕様: レプリカ: 3 「レプリカの数は 3 です」 セレクタ: 一致ラベル: アプリ: nginx テンプレート: メタデータ: ラベル: アプリ: nginx 仕様: コンテナ: - 名前: nginx イメージ: nginx:1.15.4 ポート: - コンテナポート: 80 「リソースを作成する」 [root@master shuai]# kubectl apply -f nginx-delpoy.yaml デプロイメント.apps/nginx-deployment が作成されました //レプリカセットはレプリカのバージョンと数を制御します。ロールバックはこれを通じて実現されます。'//すべてのリソースを表示' [root@master shuai]# kubectl すべて取得 名前 準備完了 ステータス 再起動 年齢 pod/nginx-deployment-d55b94fd-cndf2 1/1 実行中 0 3分31秒 pod/nginx-deployment-d55b94fd-ghlwk 1/1 実行中 0 3分31秒 pod/nginx-deployment-d55b94fd-tm4sw 1/1 実行中 0 3分31秒 pod/pod-example 1/1 実行中 0 10h 名前 タイプ クラスター IP 外部 IP ポート 年齢 service/kubernetes ClusterIP 10.0.0.1 <なし> 443/TCP 3d6h 名前 希望 現在の状況 利用可能 年齢 デプロイメント.apps/nginx-デプロイメント 3 3 3 3 3分31秒 名前 希望 現在の年齢 レプリカセット.apps/nginx-deployment-d55b94fd 3 3 3 3分31秒 コントローラ情報を表示する kubectl deit Deployment/nginx-deployment .....情報は省略..... 戦略: rollingUpdate: 「バージョン更新はローリング更新メカニズムです」 maxSurge: 25% 「更新コピーの最大数は25%、最大拡張は125%です」 「コピー数を維持するために、同時に何パーセントの増加分を破壊する必要がありますか」 maxUnavailable: 25% '削除されるコピーの最大数は 25%、最大削減率は 75% です' タイプ: ローリングアップデート ...情報は省略されています.... 「kubectl describe deploy nginx-deployment」を実行しても表示できます。 ....情報は省略.... RollingUpdateStrategy: 最大 25% 利用不可、最大 25% サージ 過去のバージョンを表示 [root@master shuai]# kubectl rollout history deploy/nginx-deployment デプロイメント拡張機能/nginx-デプロイメント 改訂変更理由 1 <なし> '//ここには 1 つだけあります。これは、ローリング アップデートがまだ行われていないことを証明しています' 国家と無国籍の特徴ステートレス サービスの特徴:
ステートフル サービスの特徴:
展開の更新nginx ポッドで元の nginx イメージではなく nginx:1.9.1 イメージを使用するようにしたい場合は、次のコマンドを実行します。[root@master ~]# kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 deploy.apps/nginx-deployment イメージが更新されました または、editコマンドを使用してデプロイメントを編集し、イメージをnginxからnginx:1.9.1に書き換えることもできます。 kubectl でデプロイメント/nginx-deployment を編集します。 更新の進行状況を表示する[root@master ~]# kubectl rollout status deployment/nginx-deployment デプロイメント「nginx-deployment」のロールアウトが完了するのを待機しています: 1 つの古いレプリカが終了を保留中です... デプロイメント「nginx-deployment」のロールアウトが完了するのを待機しています: 1 つの古いレプリカが終了を保留中です... デプロイメント「nginx-deployment」が正常にロールアウトされました Deployment が更新されると、新しい ReplicaSet が作成され、新しい ReplicaSet 内の Pod が指定されたレプリカ数まで徐々に拡張され、古い ReplicaSet は徐々に 0 まで削減されます。そのため、アップデート時に古いサービスが停止しないように常に確認することが可能であり、ローリングアップデートとなります。 デプロイメントのロールバック上記のように Deployment を更新した後、nginx:1.9.1 イメージがあまり安定していないことがわかったので、nginx:1.7.9 に戻すことにしました。このとき、Deployment ファイルを手動で変更する必要はなく、Deployment のロールバック機能を使用します。 ロールアウト履歴コマンドを使用して、デプロイメントのリビジョンを表示します。 [root@master ~]# kubectl ロールアウト履歴 デプロイメント/nginx-deployment デプロイメント.apps/nginx-デプロイメント 改訂変更理由 1 kubectl create --filename=deploy.yml --record=true 2 kubectl create --filename=deploy.yml --record=true デプロイメントの作成時に --recorded パラメータを使用してコマンドを記録したので、各リビジョンの変更を簡単に確認できます。 単一のリビジョンに関する詳細情報を表示するには: [root@master ~]# kubectl ロールアウト履歴のデプロイメント/nginx-deployment --revision=2 リビジョン #2 の deployment.apps/nginx-deployment ポッドテンプレート: ラベル: app=nginx ポッドテンプレートハッシュ=658d7f4b4b 注釈: kubernetes.io/change-cause: kubectl create --filename=deploy.yml --record=true コンテナ: nginx: イメージ: nginx:1.9.1 ポート: 80/TCP ホストポート: 0/TCP 環境: <なし> マウント: <なし> ボリューム: <なし> ロールアウト元に戻すコマンドを使用して、前のリビジョンにロールバックできます。 [root@master ~]# kubectl rollout undo デプロイメント/nginx-deployment デプロイメント.apps/nginx-deployment がロールバックされました [root@master ~]# kubectl デプロイメント/nginx-deployment を説明します 名前: nginx-deployment 名前空間: デフォルト 作成日時: 2021年12月24日(金) 22:24:10 +0800 ラベル: <なし> 注釈:deployment.kubernetes.io/revision: 3 kubernetes.io/change-cause: kubectl create --filename=deploy.yml --record=true セレクター: app=nginx レプリカ: 希望 3 個 | 更新 3 個 | 合計 3 個 | 使用可能 3 個 | 使用不可 0 個 戦略タイプ: ローリングアップデート 最小準備秒数: 0 RollingUpdateStrategy: 最大 25% が利用不可、最大 25% が急増 ポッドテンプレート: ラベル: app=nginx コンテナ: nginx: 画像: nginx ポート: 80/TCP ホストポート: 0/TCP 環境: <なし> マウント: <なし> ボリューム: <なし> –to-revision パラメータを使用して、履歴バージョンを指定することもできます。 [root@master ~]# kubectl rollout undo デプロイメント/nginx-deployment --to-revision=2 デプロイメント.apps/nginx-deployment がロールバックされました [root@master ~]# kubectl デプロイメント/nginx-deployment を説明します 名前: nginx-deployment 名前空間: デフォルト 作成日時: 2021年12月24日(金) 22:24:10 +0800 ラベル: <なし> 注釈:deployment.kubernetes.io/revision: 4 kubernetes.io/change-cause: kubectl create --filename=deploy.yml --record=true セレクター: app=nginx レプリカ: 希望 3 個 | 更新 3 個 | 合計 4 個 | 使用可能 3 個 | 使用不可 1 個 戦略タイプ: ローリングアップデート 最小準備秒数: 0 RollingUpdateStrategy: 最大 25% が利用不可、最大 25% が急増 ポッドテンプレート: ラベル: app=nginx コンテナ: nginx: イメージ: nginx:1.9.1 ポート: 80/TCP ホストポート: 0/TCP 環境: <なし> マウント: <なし> ボリューム: <なし> .spec.revisonHistoryLimit オプションを設定すると、デプロイメントで保持するリビジョン履歴の数を指定できます。デフォルトでは、すべてのリビジョンが保持されます。このオプションが 0 に設定されている場合、デプロイメントはロールバックできません。 リビジョンは、デプロイメント ロールアウトがトリガーされたときにのみ作成されます。知らせ!ロールアウトは、テンプレート内のラベルやコンテナ イメージの更新など、デプロイメントの Pod テンプレートが変更され、デプロイメントの新しいリビジョンが作成された場合にのみトリガーされます。 ロールアウト コマンドのその他の使用法:
ジョブ コントローラーは、ジョブ仕様に従ってポッドを作成し、正常に完了するまでポッドのステータスを継続的に監視する役割を担います。失敗した場合は、restartPolicy (OnFailure と Never のみがサポートされ、Always はサポートされていません) を使用して、新しい Pod を作成してタスクを再試行するかどうかが決定されます。 ジョブは、短期間の 1 回限りのタスク、つまり 1 回だけ実行されるタスクのバッチ処理を担当します。これにより、バッチ タスクの 1 つ以上のポッドが正常に完了することが保証されます。 Kubernetes は次のタイプのジョブをサポートしています。
.job の使用法 [root@master ~]# vi job.yml --- APIバージョン: batch/v1 種類: 仕事 メタデータ: 名前: myjob 仕様: テンプレート: 仕様: コンテナ: - 名前: myjob 画像: ビジーボックス コマンド: ["echo", "hello k8s job"] 再起動ポリシー: なし [root@master ~]# kubectl apply -f job.yml job.batch/myjob が作成されました [root@master ~]# kubectl ポッドを取得する 名前 準備完了 ステータス 再起動 年齢 myjob-gq27p 0/1 完了 0 37秒 #このポッドのタスクを表示する [root@master ~]# kubectl get job 名前 完了 期間 年齢 私の仕事 1/1 19秒 5分11秒 #このポッドのログを表示する [root@master ~]# kubectl logs myjob-gq27p こんにちはk8sジョブ CronJob コントローラーCronJob は、Linux/Unix システムの crontable (新しいウィンドウで開きます) と同様に、時間スケジュールに基づいてスケジュールされたタスクを実行するために使用できます。 CronJob は、データのバックアップ、電子メールの送信など、定期的に繰り返されるタスクを実行するのに非常に便利です。 CronJob は、システム負荷が比較的低いときにタスクを実行するようにスケジュールするなど、将来の時点を指定して単一のタスクを実行するためにも使用できます。 CronJob オブジェクトは、crontab (cron テーブル) ファイル内の行のようなものです。 これは Cron 形式で記述されており、指定されたスケジュール時間に定期的にジョブを実行します。 知らせ:
次の CronJob の例のリストは、現在の時刻と 1 分ごとに挨拶メッセージを出力します。 [root@master kubenetres]# vi cronjob.yml --- APIバージョン: batch/v1beta1 種類: CronJob メタデータ: 名前: こんにちは 仕様: スケジュール: "*/1 * * * *" ジョブテンプレート: 仕様: テンプレート: 仕様: コンテナ: - 名前: こんにちは 画像: ビジーボックス イメージプルポリシー: IfNotPresent 指示: - /bin/sh - -c - 日付; エコー こんにちは、nihao 再起動ポリシー: OnFailure ポッドビューを作成 [root@master ~]# kubectl apply -f cronjob.yml 警告: batch/v1beta1 CronJob は v1.21+ では非推奨で、v1.25+ では使用できません。batch/v1 CronJob を使用してください。 cronjob.batch/hello が作成されました # 1分ほど待って確認します [root@master ~]# kubectl get pods 名前 準備完了 ステータス 再起動 年齢 hello-27339330-kkfxv 0/1 完了 0 2秒 #ログを表示 [root@master ~]# kubectl logs hello-27339330-kkfxv 2021年12月24日金曜日 15:30:00 UTC こんにちは、ニハオ 要約するK8S の 5 つのコントローラーとその使用方法についてはこれで終わりです。K8S コントローラーの使用に関する詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: ウェブサイトのデザイン体験のための7つの異なるカラースキーム
MySQL 内部には至るところにキャッシュがあります。MySQL のソースコードを読むと、キャッシ...
テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...
最近、ウェブサイトを設計するときにこの問題に遭遇しています。メンバーセンターを設計し、コンテンツを ...
目次JavaScript 関数呼び出しの典型的な例JS関数の定義と呼び出し方法要約するJavaScr...
最近、私は毎日論文提案に取り組んでいます。自分のスキルを発揮して、再びWebをデザインしたくてうずう...
序文通常、ファイル内の特定の行を削除したい場合は、まずファイルを開き、削除する内容を見つけて、これら...
序文JSON は、言語に依存しないテキスト形式を使用する軽量のデータ交換形式で、XML に似ています...
はじめに:IT 業界の巨人である Microsoft 独自の仮想化技術は、VMware や Citr...
ステップ1. MySQLスロークエリを有効にする方法1: 設定ファイルを変更するWindows: W...
1. 基本的なテキスト要素を使用してコンテンツをマークアップするまず表示効果を見てみましょう:対応す...
1 分で最初の Web ページを作成します。簡単な Web ページを作ってみましょう。ぜひフォローし...
Linuxシステムでは、dockerを新しくインストールし、次のようなコマンドを入力します。dock...
目次1. ESXiをインストールする2. ESXiをセットアップする3. ESXiを起動するESXi...
1. /etc/init.dディレクトリに新しいrabbitmqを作成します。 [root@loca...
指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...