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 に移行する

推薦する

SEO実践:1ヶ月でキーワードランキング4位

多くの SEO 担当者は、Baidu で上位にランクインすることがますます難しくなってきており、かろ...

GinerNet - 512M メモリ/512M vswap/5G SSD/年間 17 ユーロ

GinerNet は、RIPE メンバー (こちらを参照) + AS59432 (こちらを参照) と...

ファイバーステートはどうですか?ソルトレイクシティデータセンター専用サーバーの詳細レビュー

Fiberstateは新しいビジネスです。主な業務は、ソルトレイクシティのコンピュータールームでのサ...

大手企業はすでに、クラウドコンピューティングをさらに強力にするためにブロックチェーンを導入している。

いわゆるクラウドは、主に企業や個人がコンピューター上のデータをクラウドにアップロードして保存および計...

中国企業はITの複雑性という課題に直面している。企業の46%が自社のIT環境が2年前よりも複雑になっていると考えている。

Citrix は本日、「中国の情報技術の複雑性の現状」と題する調査レポートの正式リリースを発表しまし...

クラウド コンピューティング業界で高収入につながる 11 のスキル

企業がインフラストラクチャをパブリック クラウドに移行するにつれて、クラウド コンピューティングのス...

華生日記の共有を教える:華生日記を宣伝する方法

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

Tencent Cloudがオンライン教育の進化を支援

[51CTO.com オリジナル記事] 6月7日と8日の「大学入試戦争」が全国を席巻した。候補者は全...

delimitervps-49ドル/12コア/48Gメモリ/2*1Tハードディスク/20Tトラフィック/5IP/Gポート

delimitervps は最近登場した超低コストのホスティング プロバイダーです。同社の特長は専用...

乾物シェアリング:短期間で百度の重みを高めるための必要条件

すべてのウェブマスターは、ウェブサイトの Baidu の重みをもっと気にするようになると思います。B...

IBMハイブリッドクラウドソフトウェアの次の大きなイノベーション:AI駆動型自動化プラットフォーム

人工知能時代における自動化の明るい未来と大きな商業的価値。 COVID-19 によってもたらされた課...

パブリッククラウドに安全に移行するための10のステップ

McKinsey & Company の最近の調査によると、クラウド コンピューティングの導...

Linode 月額 10 ドルの VPS レビュー

速報: linode - 月額 10 ドル / メモリ 1g / SSD 24g / トラフィック ...

Baidu SEO から Google SEO に切り替える方法

中国語の SEO はますます難しくなってきており、Google SEO に切り替えることは実現可能で...