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

推薦する

ウェイボー、ジャンクファン一掃計画開始

スパムファンがWeibo上で正常な秩序を乱し、ユーザーに嫌がらせをする現象に対応して、Weiboは最...

クラウドコンピューティングの開発では何に注意すべきでしょうか?

クラウド コンピューティングの歴史は、インターネットの原型である「銀河間コンピュータ ネットワーク」...

【事例】スタートアップ企業のためのSEO対策のヒント! 30日以内にブランドキーワード検索最適化を完了します。

モバイルインターネットの時代、誰もがアプリケーション市場のプロモーションについて語っていますが、収益...

Scality: コンテナ化とクラウドネイティブアプリケーションが2021年のデータストレージ環境を定義する

12月7日、海外メディアは、Scalityの調査によると、コンテナ化とクラウドネイティブアプリケーシ...

より優れた指標、より優れたクラウドファースト戦略

クラウドファースト戦略のリスクとメリットは、大規模で複雑な IT 環境を持つ CIO にとって難しい...

arebz: 香港 VPS/ロサンゼルス VPS、40M 専用、最大 258IP

Standard Interconnect (arebz) の Ji Liu さんからメッセージ: ...

2020年アリババクラウドダブル11グループ購入プロモーション:年間85元のアリババクラウドサーバー

2019年に最初の祭りが開かれて以来、ダブルイレブンカーニバルは11年間開催されています。これは人気...

パンデミック中に爆発的な成長を遂げた20産業の現状と展望を分析

この疫病は、中国の経済変革と産業発展の方向と見通しに、いくつかの変化、さらには重大な変化をもたらすだ...

dogyun: 庚子年を迎え、VPSは香港CN2、ドイツCN2、日本ソフトバンクを含め30%オフ、IP切り替えはわずか10元

Dogyun はネズミ年を歓迎し、プロモーションを実施しています: 1. Dynamic Cloud...

racknerdのウェブサイトが刷新された後に宣伝された新しいVPSを簡単にレビューすると、CPUが改善されました!

racknerd のウェブサイトがリニューアルされた後、プロモーション用に 3 つの安価な VPS ...

グーグルの中国での検索事業は再び困難に直面し、モバイル広告市場に目を向ける

昨日、Google のグローバル副社長兼中国社長である Liu Yun 氏が Google Crea...

ネットクリーニングキャンペーンが企業ウェブサイトの最適化に及ぼす影響の分析

5月は過酷な月だ。天気はますます暑くなり、Baiduのウェブ検索品質に関するホワイトペーパーの発表を...

Cloudera と Hortonworks が合併を発表: Hadoop にとって大きな打撃!

最近、ビッグデータ分野の2つの巨大企業であるClouderaとHortonworksが対等合併を発表...