本記事はFIXERが提供する「cloud.config Tech Blog」に掲載された「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
名古屋事業所所属。
得意分野はC#、ASP.NET、terraformなど。
最近はdocker、K8s関連を勉強中。