回答:
DeploymentとReplicationControllerは、ステートレスな使用を目的としており、かなり軽量です。StatefulSetは、状態を永続化する必要がある場合に使用されます。したがって、後者はvolumeClaimTemplates
永続ボリュームに対して/を使用して、コンポーネントの再起動後も状態を維持できるようにします。
アプリケーションがステートフルである場合、またはKubernetesの上にステートフルストレージをデプロイする場合は、StatefulSetを使用してください。
アプリケーションがステートレスである場合、または開始時にバックエンドシステムから状態を構築できる場合は、Deploymentsを使用します。
ステートフルアプリケーションの実行の詳細については、2016年kubernetesのステートフルアプリケーションに関するブログエントリをご覧ください。
deployment
ノードごとに1つ(デーモンセット)、レプリカ、またはステートフルな順序を設定する単純な仕様にすることができることに同意します。
デプロイ- すべてのポッドレプリカで共有されるPersistentVolumeClaimを指定します。つまり、共有ボリュームです。
複数のレプリカポッドがある場合、バッキングストレージには明らかにReadWriteManyまたは ReadOnlyMany accessModeが必要です。
StatefulSet- volumeClaimTemplatesを指定して、各レプリカポッドに 関連付けられた一意のPersistentVolumeClaimを取得します。つまり、共有ボリュームはありません。
ここで、バッキングストレージはReadWriteOnce accessMode を持つことができます。
StatefulSetは、Hadoopクラスター、MySQLクラスターなど、クラスター内で物事を実行するのに役立ちます。各ノードには独自のストレージがあります。
TL; DR
デプロイは、ステートレスアプリケーションをデプロイするためのリソースです。PVCを使用する場合、すべてのレプリカは同じボリュームを使用し、どのボリュームにも独自の状態はありません。
ステートフルセットはステートフルアプリケーションに使用され、ポッドの各レプリカは独自の状態を持ち、独自のボリュームを使用します。
DaemonSetは、ポッドがクラスターのすべてのノードで実行されるようにするコントローラーです。ノードがクラスターに追加/クラスターから削除されると、DaemonSetはポッドを自動的に追加/削除します。
Deployments、StatefulSets&Daemonsetsの詳細な違い、およびこれらのリソースK8を使用してサンプルアプリケーションをデプロイする方法について説明しました:Deployments vs StatefulSets vs DaemonSets。
各ノードに永続的な状態が必要なステートフル分散アプリケーションで「StatefulSet」を使用します。StatefulSetは、構成(レプリカ= N)を介して、ステートフルアプリケーション/コンポーネントの任意の数のノードを構成する機能を提供します。
ステートフル分散アプリケーションには、マスターマスターとマスタースレーブの2種類があります。マスターマスター構成のすべてのノードとマスタースレーブ構成のスレーブノードは、StatefulSetを使用できます。
例:
マスター-スレーブ-> Hadoopクラスターのデータノード(スレーブ)
マスター-マスター-> Cassandraクラスターのデータベースノード(マスター-マスター)
StatefulSetの各ポッド(レプリカ/ノード)には、一意で安定したネットワークIDがあります。たとえば、名前が「cassandra」でレプリカノードの数がNのCassandra StatefulSetでは、各Cassandraポッド(ノード)に次のようになります。
参照:https : //kubernetes.io/docs/concepts/workloads/controllers/statefulset/
一方、「デプロイメント」は、ノードが特別なIDを必要としないステートレスアプリケーション/サービスに適しています。ロードバランサーは、選択した任意のノードに到達できます。すべてのノードは同じです。Deploymentは、構成(レプリカ= N)を通じて任意の数の任意のノードを作成するのに役立ちます。
StatefulSetとデプロイメントの違い
StatefulSetは特別なデプロイメントと同等です。StatefulSetの各ポッドには、クラスター内の他のメンバーを検出するために使用できる安定した一意のネットワーク識別子があります。StatefulSetの名前がKafkaの場合、最初のポッドはKafka-0と呼ばれ、2番目のポッドはKafka-1と呼ばれます。StatefulSetによって制御されるポッドコピーの開始および停止シーケンスが制御されます。n番目のポッドが操作されると、最初のN-1ポッドはすでに実行中で、良好な状態です。StatefulSetのポッドは、PVまたはPVCによって実装される安定した永続ストレージボリュームを使用します。ポッドを削除しても、StatefulSetに関連付けられているストレージボリュームはデフォルトでは削除されません(データセキュリティのため)。StatefulSetはPVボリュームにバインドされるようにバインドされています。ポッドの状態データを格納するために使用されます。また、ヘッドレスサービスに属することが宣言された、ヘッドレスサービスと組み合わせて使用されます。