[解決済み] なぜStatefulSetsなのか?ステートレスPodは永続ボリュームを使えないのですか?
質問
私は、以下のことを理解しようとしています。 ステートフル セット . その使用方法は、Persistent Volume を持つ "stateless" Pods の使用方法とどのように違うのでしょうか? つまり、quot;normal" Pod が永続ストレージを要求できると仮定すると、この新しい構造(順序付けられた開始/停止など)を必要とする、どのような明白なことを私は見逃していますか?
どのように解決するのですか?
はい、通常のポッドは永続ボリュームを使用できます。しかし、論理的に 1 つのグループを形成する複数の Pod がある場合があります。この例としては、データベース レプリカ、ZooKeeper ホスト、Kafka ノードなどが挙げられます。これらすべての場合において、サーバーの束があり、それらは一緒に動作し、互いに会話します。特別なのは、グループ内の各個人がIDを持っていることです。例えばデータベースクラスタの場合、1台がマスター、2台がフォロワーで、各フォロワーはマスターと通信して、同期したものとしていないものを知らせます。従者は、"db-x-0"がマスターで、マスターは"db-x-2"が従者で、ある時点までのすべてのデータを持っているがそれ以降のデータがまだ必要だということを知っているわけだ。
このような状況では、通常のポッドから簡単には得られないいくつかのものが必要です。
- 予測可能な名前: クラスターを形成したり、リーダーを選出したりするために、ポッドに互いを見つける場所を教えて起動したいのですが、それを行うには事前に名前を知っておく必要があります。通常のポッド名はランダムなので、事前に知ることはできません。
- 安定したアドレス/DNS名: ステップ(1)で利用可能だったどんな名前も同じままであってほしい。通常のポッドが別のホストで再起動した場合(再デプロイした、起動していたホストが死んだ、など)、新しい名前と新しいIPアドレスを取得することになります。
- 永続的な リンク グループ内の個人とその永続的なボリュームとの間のリンクです。 データベースマスターが動作していたホストが死んだ場合、新しいホストに移動されますが 同じ に接続する必要があります。その個人の適切なデータを含むボリュームは1つだけだからです。たとえば、3 台のデータベース ホストのグループを再展開する場合、同じ個人 (DNS 名と IP アドレスによる) が同じ永続ボリュームを取得するようにし、マスターはマスターのまま同じデータを持ち、レプリカ 1 はそのデータを取得します。
ステートフルセットは、これらの問題を解決します。 https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/ ):
- 安定した、ユニークなネットワーク識別子です。
- 安定した、永続的なストレージ。
- 順序よく、優雅なデプロイとスケーリング。
- 順番に、優雅に削除と終了を行います。
(3)と(4)についてあまり話しませんでしたが、最初にデプロイしたものをマスターにするように指示し、次のものは最初のものを見つけてマスターとして扱うなど、クラスタでも役に立ちそうです。
何人かが指摘したように、確かに いくつかの を使用することができますが、より多くの作業が必要です。例えば、3つのデータベースインスタンスが必要な場合、3つのデプロイメントと3つのサービスを手動で作成することができます。手動で 3つのデプロイメント サービスをデプロイメント内の 1 つのポッドを指すようにすることはできないからです。それから、スケールアップするために、別のデプロイメントと別のサービスを手動で作成する必要があります。これは動作しますし、PetSet/PersistentSetが登場する前は、ある程度一般的な方法でした。これは、上記の利点のいくつかが欠けていることに注意してください (たとえば、永続的なボリューム マッピングとランプ、固定された開始順序など)。
関連
-
[解決済み] kubernetesポッド内のすべてのコンテナをきれいにリストアップする方法とは?
-
[解決済み] k8sのConfigMapやSecretを既存のものを削除せずに更新する方法
-
[解決済み] Pod内のコンテナからPod自身のIPアドレスを知るには?
-
[解決済み] バージョン "extensions/v1beta1" の種類 "Deployment" に一致するものはありません。
-
[解決済み] Helmチャートで環境変数を取得する方法
-
[解決済み] Kubernetesです。PersistentVolumeClaim (pvc)を削除できない。
-
[解決済み] Kubernetes ControllerとKubernetes Operatorの違いは何ですか?
-
[解決済み] kubernetes 実行中の全Podを一覧表示する name
-
[解決済み] デプロイメント更新時に「Replica Sets」をクリーンアップしますか?
-
[解決済み] Helm install unknown flag --name
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ヘッドレスサービスとは何か、何をするのか、何を達成するのか、そしてその正当な使用例とは何か?
-
[解決済み] Kubernetesのポッドを年齢でソートする
-
[解決済み] kubernetesポッド内のすべてのコンテナをきれいにリストアップする方法とは?
-
[解決済み] k8sのConfigMapやSecretを既存のものを削除せずに更新する方法
-
[解決済み] helm list : 名前空間 "kube-system" のconfigmapをリストアップできない。
-
[解決済み] ネームスペースの全リソースをリストアップする
-
[解決済み] Kubernetesの「エンドポイント」とは何か?
-
[解決済み] ヘルムチャートの場合、どのようなバージョンがありますか?[クローズド]
-
[解決済み] デプロイメント更新時に「Replica Sets」をクリーンアップしますか?
-
[解決済み] Helm install unknown flag --name