KubernetesのTaintにビビらない #Kubernetesリレー

Kubernetes をやり始めたころ、登場する言葉の多さに絶望したことを覚えています。
特にこの「Taint」はびっくりしました、「汚す」ってどういうこと?
ちょっと解説してみます。

ノードを汚すという行為

kubectl taint

のようなコマンドを使うと、ノードにTaintをつける、つまりノードを汚すことになります。
なんだかネガティブな感じですよね。

ここで大事なことは、「Podはキレイ好き!」ということです。
Taintが設定されたノードでは、普通のPodは「こんな汚い場所で立ち上がりたくない!」となります。

Taintを活用するコマンドで

kubectl drain

というのがありますが、これを使うとTaintの作用等によりPodをノードから安全に追い出すことができ、ノードのメンテナンスが可能な状態になります。

汚れを許容する Toleration

通常のPodは完璧主義というか、あらゆるTaintを拒否します(たぶん)。
でも、いつもすべてを清潔に保てるとは限りませんよね、例えば家の窓の掃除は結構妥協してたり・・・

こういう、一部のTaintは気にしない、といった振る舞いをPodにさせるために Toleration という概念があります。

例えばWindowsコンテナのPodはWindowsのノードでしか起動できないので、ノードにWindows限定にするTaintをつけておき、WindowsのPodでTolerationを設定すれば良いことがありそうですね。
(急にニッチな話題に・・・)

まとめ

詳しいコマンドは解説しませんでしたが、「Taint」という概念については「Podはキレイ好きだから汚れた場所にはいきたくない」という性格を覚えておくと、関連するドキュメントが一気に読みやすくなります。
是非覚えておいてください。

FIXER Inc. 松枝 宏樹
  • FIXER Inc. 松枝 宏樹
  • 愛知県在住、リモートワーク気味なエンジニア。
    得意分野はC#、ASP.NET、terraform、AKSなど。