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

推薦する

コミュニティユーザーのニーズの変化は、マイクロコミュニティの写真共有活動から見ることができます。

最近、自主メディアパーソンのハオ・シャオリャン氏は、康盛マイクロコミュニティ(Discuz!チームが...

ウェブサイトをアップグレードして改訂する予定です。大量のデッドリンクを回避するために SEO テクノロジーをどのように使用すればよいでしょうか?

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

店舗を開設する前に、商人はタオバオの特徴について理解を深めるべきである

インターネットの時代において、電子商取引は人々の心の中でますます重要になり、多くの人がタオバオを筆頭...

無線ネットワーク向け将来の通信インフラの革新

テクノロジーが進歩するにつれ、より高速で信頼性の高いワイヤレス ネットワークの必要性が個人や企業にと...

周紅義氏によるユーザーエクスペリエンスの説明を簡単に理解する

かつて、周洪義という偉大な人物が、ユーザー エクスペリエンスに関する独自の見解を次のように表現しまし...

Baiduの最適化のヒントは品質が鍵となる

ウェブサイト業界は現在かなり人気があるため、大手ウェブサイトの最適化と組み入れの要件はますます厳しく...

中国聯通と中国電信の4Gの全体的な遅れは、本当に標準の問題なのでしょうか?

すべてのデータは、中国の4G産業が飛躍的発展の段階に入ったことを示している。最近、工業情報化部は2月...

外部リンクは本当に役に立つのでしょうか?外部リンクの役割は何でしょうか?

最近、私がSEOの基礎知識について語っていることに気づいた人もいるかもしれません。実は、SEOは基礎...

ウェブサイトのランキングに影響を与える可能性のある4つの要素

間違いその1: リンクを購入する。他のウェブサイトからリンクしてもらうためにお金を払うよう説得しよう...

6月の百度のアルゴリズム更新からわかるユーザーエクスペリエンスの重要性

百度が6月に新しいアルゴリズムを更新して以来、多数のコレクションサイト、一部のジャンクサイトグループ...

最近の百度画像表示問題に関する私の個人的な意見

12月24日、Baidu Webmaster Platformは最新情報を発表しました。Baiduの...

ステータスをアップグレードするには、「Straight to the Clouds Seed Program」トレーニングキャンプに参加するだけです。

IT 業界は常に高給で知られています。昨年、IT業界の給与は金融業界を上回り、社会給与ランキングで1...

Ping An Host - 国慶節プロモーション/C3 データセンター/CN2 ライン VPS 年間支払いが 35% オフ

Ping An Host は 1 年間運営されています。ロサンゼルスの Zenlayer コンピュー...

百度の歴代Kステーションについての私の推測

みなさんこんにちは。私はHongtu Internetです。端午節の休暇以来、当社のウェブサイトのい...

コンテンツを核としたウェブサイトだけが長期的に発展できる

著者は、サイト グループ、スパム サイト、ブラック ハット サイトに取り組んできました。現在、著者は...