KubernetesのTaintにビビらない #Kubernetesリレー
2021-10-15
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はキレイ好きだから汚れた場所にはいきたくない」という性格を覚えておくと、関連するドキュメントが一気に読みやすくなります。
是非覚えておいてください。