K8S の汚染と耐性を 5 分で理解する

K8S の汚染と耐性を 5 分で理解する

K8S では、ポッドがノード上の汚れを許容できる場合、そのポッドをそのノードにスケジュールできます。許容できない場合は、ノードをスケジュールできません。汚れと寛容さは恋する若いカップルのようなものです。双方とも喜んで応じます。少女は少年の欠点を知っていますが、一緒に暮らすためにそれを我慢することを選びます。女の子が男の子の欠点を許容できないなら、一緒に暮らすことはできない。

1. 理論

1.1.汚染と寛容の概念

  • テイント: ノード上で定義され、ポッドがそのノード上でテイント許容度を持たない限り、そのノードにポッドがスケジュールされることを拒否するために使用されます。 Taint でマークされたノードは障害のあるノードではありません。
  • 許容範囲: Pod 上で定義され、Pod が許容できるノード テイントを構成するために使用されます。 K8S スケジューラは、ポッドが許容できる汚染を持つノードにのみポッドをスケジュールできます。
  • スケジュール例図:

1.2.除外レベル

Pod オブジェクトのノード除外には 3 つのレベルがあります。

  • NoSchedule: この汚染許容度が設定されていない新しいポッドはこのノードにスケジュールできず、ノード上の既存のポッドは影響を受けません。
  • PreferNoSchedule: この汚染許容度が設定されていない新しいポッドは、可能な限りこのノードにスケジュールしないでください。適切なノードが見つからない場合でも、このノードにスケジュールされます。
  • NoExecute: この汚染許容度が設定されていない新しい Pod オブジェクトはこのノードにスケジュールできず、ノード上の既存の Pod は削除されます。

1.3.許容差演算子

Pod で許容範囲を定義する場合、Equal と Exists の 2 つの演算子がサポートされます。

  • 等しい: 許容値と汚染は、キー、値、効果において完全に一致する必要があります。
  • 存在する: 許容値と汚染はキーと効果の両方で完全に一致する必要があり、許容値の値フィールドには空の値を使用する必要があります。

1.4 使用方法

テイントはノードの nodeSpec で定義され、許容範囲はポッドの podSpec で定義されます。

汚染と許容範囲はどちらもキーと値のペアの形式ですが、除外レベル (効果) タグが追加されます。

構文の形式は「key=value:effect」です。

1.5.使用シナリオ

1. 排他ノード

  • 特定のポッドで使用するためにいくつかのノードを割り当てる場合は、ノードにテイントを追加してから、対応する許容値を特定のポッドに追加できます。
  • クラスター内の一部のマシンは、優れた CPU パフォーマンスと大容量のメモリを備えたマシンなど、特殊な場合があります。通常のポッドがこれらの特別なノードを占有することは望ましくありません。私たちは、汚染と寛容を通じてこの問題を解決できます。

2. ポッドの排除

上記は、Node による Pod の除外の 3 つのレベルを定義します。ノードに定義された除外レベルが NoExecute の場合、この汚染許容度が設定されていない Pod は削除されます。

K8S は、問題のあるノードを自動的に識別するためにテイントも使用します。たとえば、ノードのメモリが不足すると、ノード コントローラーは自動的にノードに汚染情報を追加し、除外レベルとして NoExecute を使用します。現時点では、このような汚染耐性を設定していない Pod は削除されます。

DaemonSet コントローラーは、重要な Pod をノードにデプロイできるように、このような汚染を無視します。

現在、以下のような多くの汚れが組み込まれています。

  • node.kubernetes.io/not-ready: ノードの準備ができていません
  • node.kubernetes.io/unreachable: ノードに到達できません
  • node.kubernetes.io/memory-pressure: ノードのメモリ領域がいっぱいです。
  • node.kubernetes.io/disk-pressure: ノードのディスク容量がいっぱいです。
  • node.kubernetes.io/network-unavailable: ノード ネットワークが利用できません。

2. 実際の戦闘

2.1.ノード汚染の管理

ノードに汚染を追加します。

 kubectl taint nodes node01 key=value:effect

ノードから汚染を削除します。ここでの効果は存在しない可能性があります。

 kubectl taint nodes node01 key[:effect]-

2.2.ポッド許容度の管理

前述のように、許容演算子には Equal と Exists の 2 種類があり、除外レベルも追加する必要があります。

平等なシナリオを使用する:

 tolerations: - key: "key" operator: "Equal" value: "value" effect: "NoExecute"

Exists を使用するシナリオ:

 tolerations: - key: "key" operator: "Exists" effect: "NoExecute"

ノード上の汚染の除外レベルが NoExecute の場合、ノード上で実行されている Pod は汚染に対する許容度がない場合は直ちに排除されます。ただし、システムはポッドの排出を遅らせるために toleranceSeconds フィールドを追加します。

tolerationSeconds フィールドの意味は次のとおりです。Pod の許容設定に NoExecute の除外レベルがあり、属性 tolerationSeconds の値が指定されている場合、Pod はノード上で一定期間 (秒単位) 実行を継続できます。

 tolerations: - key: "key" operator: "Equal" value: "value" effect: "NoExecute" tolerationSeconds: 3600

2.3 具体的な操作

2.3.1、予備知識

  • ノードラベルを確認します。ラベルはキー値データ形式です。
 kubectl get nodes --show-labels
  • ノードラベルを追加します。たとえば、キーを special-app 、値を specialwebapp に設定します。
 kubectl label node k8s-worker-2 special-app=specialwebapp

  • ノード汚染ステータスを確認する

ノードの汚染ステータスを確認します。 Taints 列が none になっていることがわかり、ラベルのステータスも確認できます。

 kubectl describe node k8s-worker-2

2.3.2.実例プロセス

ステップ

  1. k8s-worker-2 などの K8S ノードの場合、ノードにはラベルが付きます。 Pod はラベルに従って k8s-worker-2 にスケジュールされ、スケジュールは成功します。
  2. k8s-worker-2 に taint を追加すると、Pod のスケジューリングが失敗します。
  3. Pod に対してこのステインの許容値を設定すると、スケジュールが成功します。
  4. ノードの汚染を削除し、許容値を削除すると、デプロイメントは成功します。

操作プロセス

  • 染色の定着
kubectl taint nodes k8s-worker-2 question-node=broken-disk:NoSchedule

  • Pod をデプロイすると、許容度のない Pod は常に Pending 状態にあることがわかります。 Pod の説明を確認すると、理由も示されます: スケジュールが失敗した、ノードが汚染されている、Pod に許容度がない。

  • Podの許容範囲を設定し、正常にデプロイする

  • 汚染を削除し、許容範囲を削除して、正常にデプロイします
kubectl taint nodes k8s-worker-2 question-node-

完全な yaml ファイル:

 apiVersion: v1 kind: Pod metadata: name: webapp namespace: demo labels: app: webapp spec: nodeSelector: # 选择调度到具有这个label的节点"special-app": "specialwebapp" # kubernetes.io/hostname: k8s-worker-2 tolerations: - key: "question-node" operator: "Equal" value: "broken-disk" effect: "NoSchedule" containers: - name: webapp image: nginx ports: - containerPort: 80

要約する

K8S では、ポッドがノード上の汚れを許容できる場合、そのノードにポッドをスケジュールできます。許容できない場合は、ノードをスケジュールできません。

<<:  Kubernetes の Pause コンテナとは何ですか?

>>:  5 つのステップで Spring Boot サービスを Kubernetes に移行する

推薦する

weservit-KVM/SSD/G ポート/高 IO/高性能オランダ VPS

weservit は、2008 年にオランダで設立された正式な IDC 加盟店です。すべての機器を自...

消費者がすぐに注文できるようにするためのマーケティング戦略をいくつか共有する

従来の考え方では、ユーザーがサイトの製品ページに長く滞在すればするほど、コンバージョン率が高くなると...

Pacificrack: スーパーフラッシュセール、年間 7.2 ドルから利用できる VPS、ロサンゼルス VPS、1Gbps の帯域幅

Pacificrack ではプロモーション用に特別に低価格の VPS を 3 つ追加しており、直接 ...

LetBox - $25/年/KVM/512MB RAM/200GB HDD/3TB トラフィック

LetBox.com は、G ポートと高トラフィックを備えた超低価格の KVM ベースの仮想ストレー...

マイクロソフト、完璧なクラウドジャーニーを構築するための新しい Azure 移行ツールをリリース

企業がクラウドに移行するために必要なツールを提供するため、マイクロソフトは最近、Microsoft ...

Google のウェブサイト最適化ソリューション

昨夜9時頃、グループ内の友人からQQメッセージを受け取り、Googleの最適化について何か調査したこ...

Mr.cc: 個人ウェブマスターは多才でなければならない

前面に書かれている内容:私たちはインターネットの大海の中の一滴です。私たちは独立したウェブサイトのウ...

Quora のランディング ページ最適化では、少ないほど効果的

有名な質疑応答ソーシャル ネットワーキング サイト Quora に次のような質問があります。 Quo...

ブランドマーケティングの観点から美団のエコ戦略を詳細に分析

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

ホストユンはどうですか?日本東京ソフトバンク回線VPSの簡単なレビュー

Hostyun は、日本の VPS を販売するために東京にサーバーを配備しました。このサーバーはデフ...

ブランドマーケティング:ブランド成功への第一歩!

ショーペンハウアーは、人間の本質における最も特別な弱点の一つは、他人が自分をどう見ているかを気にする...

ホストオンはどうですか?ロサンゼルスでの AMD Ryzen 9 7950X シリーズ VDS のレビュー

ホストオンは、ソルトレイクシティデータセンターにAMD Ryzen 9 7950XシリーズVPSとV...

VMware 仮想化環境でのソフトウェア定義ストレージの使用

同社の現在の環境では、VMware 仮想化環境がアプリケーション システムの約 80% をホストして...

リンク取引に対する百度(バイドゥ)の姿勢はどのようなものですか?

百度は、リンクの売買を取り締まると改めて発表した。11月5日、百度ウェブマスタープラットフォームは、...