汚染と寛容 | Kubernetes

テイントと容認の概要

UnsplashのKaterina Pavlyuchkovaによる写真

概要

テイント

テイントは、ノードが特定のポッドを撃退できるようにする Kubernetesノードプロパティです。

$ kubectl taint nodes node1 key1=value1:NoSchedule

Tolerations は Pod に適用されます。Tolerations を使用すると、スケジューラーは、テイントが一致する Pod をスケジュールできます。

PodSpec で Pod の容認を指定できます。Tolerations を Pod に追加するには、2 つの方法があります。

●演算子を使用して許容範囲を指定します。Equal演算子がEqual
(keyでありvalue、指定する必要があります) の場合:

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"

tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"

「 controlplane 」という名前のマスター ノードと「 node01」という名前のワーカー ノードがあるとします。

$ kubectl get nodes
-----------------------------------------------------
NAME           STATUS   ROLES           AGE   VERSION
controlplane   Ready    control-plane   19d   v1.25.1
node01         Ready    <none>          19d   v1.25.1

$ kubectl describe node node01 | grep -i taints
-------------------------------------------------
Taints:             <none>
$ kubectl describe node controlplane | grep -i taints
-------------------------------------------------
Taints:             <none>

ただし、ノードの小さなサブセットが特殊なハードウェア ( GPUなど) を持っている場合、特殊なハードウェアを必要としない Pod をそれらのノードから切り離しておくことが望ましい場合があります。専用ハードウェアが必要です。

上記の目標を達成するために、テイントをノード (特殊なハードウェアを持つノード) に追加できます。結果として、特別なハードウェアを必要としないポッドは、それらのノードを回避できます。

ノードを汚染する

ノードを汚染する前に、k8s クラスターにポッドをデプロイします。そのため、テイントを追加した後のノード (ポッドが実行されている場所) の反応を観察できます。

$ kubectl run nginx --image=nginx
$ kubectl get pods nginx -o wide
----------------------------------------
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          26m

$ kubectl taint nodes node1 key1=value1:NoSchedule
$ kubectl taint nodes node1 key1=value1:PreferNoSchedule
$ kubectl taint nodes node1 key1=value1:NoExecute

効果: NoSchedule

$ kubectl taint nodes node01 GPU=yes:NoSchedule

現在実行中の Pod を検査しnode01ます。

$ kubectl get pods -o wide
----------------------------------------------------------------
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE     
nginx   1/1     Running   0          5m25s   10.244.1.2   node01

$ kubectl run webserver --image=nginx
$ kubectl get pods -o wide | awk '{print $1, $7 }'
--------------------------------------------------
nginx       node01
webserver   controlplane

さて、これをもっと面白くしましょう。これまでにデプロイしたすべてのポッドを削除します。

$ kubectl delete pod nginx
$ kubectl delete pod webserver

許容範囲を指定:

Pod マニフェスト ファイルで容認を指定しましょう。そのため、ポッドは次のことを許容できますnode01 。

# webserver.yaml
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: webserver
  name: webserver
spec:
  containers:
  - image: nginx
    name: webserver
  tolerations:
  - key: "GPU"
    operator: "Equal"
    value: "yes"
    effect: "NoSchedule"

$ kubectl create -f webserver.yaml
$ kubectl get pods -o wide
-------------------------------------------------------------------
NAME        READY   STATUS    RESTARTS   AGE   IP            NODE     
webserver   1/1     Running   0          18s   192.168.1.6   node01   

効果: PreferNoSchedule

PreferNoScheduleの「優先」または「ソフト」バージョンですNoSchedule。システムは、テイントを許容しないポッドをノードに配置しないようにします。

効果: NoExecute

通常、影響のあるテイントがNoExecute ノードに追加された場合、テイントを容認しない Pod はすぐに削除され、テイントを容認する Pod は削除されません。ただし、toleration with effect では、taint が追加された後に Pod がノードにバインドされたままになる時間をNoExecute 指定するオプションのフィールドを指定できます。tolerationSeconds 例えば、

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

汚染を取り除く

テイントを削除するには、テイントを追加するために使用するのと同じコマンドを使用できますが、コマンドの後にダッシュ( — )を追加する必要があります。

$ kubectl taint nodes node1 key1=value1:NoSchedule-
$ kubectl taint nodes node01 GPU=yes:NoSchedule-

これが役に立った場合は、下の拍手ボタンを数回クリックして、著者へのサポートを示してください

FAUN に参加して、毎週同じようなストーリーを受信箱に入れましょう

提案された投稿

待ちの季節にできること(テクノロジー業界での最初の仕事に就くのを待っているとき)

待ちの季節にできること(テクノロジー業界での最初の仕事に就くのを待っているとき)

新しいキャリアへの転職は、一人でやろうとすると非常に困難になる可能性があります。あなたと同じ学習レベルにあり、同様の目標、粘り強さ、意欲を共有する責任パートナーを見つけることが重要です。

ネットワークテレビツイッター

ネットワークテレビツイッター

古いものは再び新しくなり、以前はキラキラ輝いていたものがくすんで見えます。私は、JNCO ジーンズが 1990 年代後半の他のファッションとともにダウンタウンのクールな子供たちの間で復活したことについて話しているのではありません。

関連記事

安全な労働環境の構築

安全な労働環境の構築

「私が危険にさらされたとき、彼は私を守ってくれます。彼は私をテントの中に隠すでしょう。

カウボーイの嘘

巨大企業はいかにしてアメリカ国民にひどい嘘を売ったのか

カウボーイの嘘

西のなだらかな丘陵地帯では、太陽の最初の光が平原の曇った草を照らす、まばゆいばかりの金色の朝です。真っ黒で巨大な穏やかなアンガス牛の群れが日の出を背景にシルエットを描き、誰もがよく知っている場所へ人里離れた道を進んでいます。朝食バー。

メディアを再考する: マクチェズニーの 5 つの真実とコミュニケーションの未来

今日の非常につながりの深い世界では、メディア システムは世論の形成、ひいては民主的な意思決定において極めて重要な役割を果たしています。学者のロバート・マクチェズニーは、コミュニケーションの政治経済についての深い分析の中で、従来の通念に疑問を呈し、メディアに関する彼の言うところの「5つの真実」を提示します。

無限の命

大人になると、世界はそういうもので、あなたの人生はただ世界の中で生きていくだけで、決して命を危険にさらすことはなく、決められた道をたどって最後には死ぬだけで、失敗しないように努めるのだと言われがちです。壁を打ちすぎてはいけません。しかし、それは非常に限られた人生です。