本文へスキップ
BecomeCoder

Kubernetesコース · 第3章 ワークロード ― 複製と無停止デプロイ · レッスン17

他のワークロード ― DaemonSet・StatefulSet

ローカル実施

導入

Deployment は「どのノードでもいい、同じ Pod を指定数」というアプリ向けでした。しかし用途によっては別のワークロードが向きます。「全ノードに1個ずつ」の DaemonSet と、「安定した名前と保存領域が要る」StatefulSet を紹介します。

説明

DaemonSet(デーモンセット) は、クラスタの全ノードに、その Pod をきっかり1個ずつ配置します。ノードが増えれば自動で1個増やし、減れば減らします。ノードごとに常駐させたい裏方――ログ収集エージェント、監視エージェント、ネットワーク補助――に使います。

graph TB
    DS[DaemonSet]
    subgraph n1["ノード1"]
        A1[エージェントPod]
    end
    subgraph n2["ノード2"]
        A2[エージェントPod]
    end
    subgraph n3["ノード3"]
        A3[エージェントPod]
    end
    DS --> A1
    DS --> A2
    DS --> A3

StatefulSet(ステートフルセット) は、状態(データ)を持つアプリ向けです。ステートフル(stateful) とは「状態を保持する」という意味で、データベースのように「前回の続き」を覚えている必要があるものを指します(対して、状態を持たない使い捨て可能なものは ステートレス)。StatefulSet の Pod は、db-0db-1db-2 のように序数付きの安定した名前を持ち、それぞれ専用の永続ストレージを保ったまま作り直されます。

3つのワークロードの使い分けはこうです。

主な用途Podの性格
Deployment状態を持たない普通のアプリどれも同じ・使い捨て可Webサーバー・API
DaemonSet全ノードに常駐させる裏方各ノードに1個ログ・監視エージェント
StatefulSet状態を持つアプリ名前と保存領域が安定データベース

迷ったら Deployment、というのが基本です。DaemonSet と StatefulSet は「全ノードに1個ずつ要る」「安定した名前と永続データが要る」というはっきりした理由があるときに選びます。