「Kubernetes ワークロード管理」では、主にステートレスアプリケーションの管理について紹介しました。当時はステートフルアプリケーションについても触れていましたが、データの永続化の方法については説明していなかったため、詳細な紹介は行っていませんでした。この章では、ステートフル アプリケーションを管理する方法に焦点を当てます。 ステートフルアプリケーションとは何ですか?インスタンス間の関係が不均等で、外部データに依存するアプリケーションは、「ステートフル アプリケーション」と呼ばれます。 インスタンス間のいわゆる不平等な関係とは、分散アプリケーションの場合、各インスタンスと各アプリケーションの間に比較的大きな依存関係が存在することが多いことを意味します。たとえば、特定のアプリケーションは他のアプリケーションの前に起動する必要があります。そうしないと、他のアプリケーションを起動できなくなります。 外部データに依存する最も明白なアプリケーションは、データベース アプリケーションです。データベース アプリケーションの場合、データを永続化する必要があります。ステートレス アプリケーションの場合、データベースを再起動するとデータとアプリケーションの接続が失われます。これは明らかに当初の意図に反しており、生産することはできません。 したがって、Kubernetes でステートフル アプリケーションを効果的にサポートするために、Kubernetes は StatefulSet を使用してステートフル アプリケーションをオーケストレーションおよび管理します。 StatefulSet は ReplicaSet に似ていますが、Pod の起動順序を制御でき、各 Pod に一意の ID を設定できる点が異なります。以下の機能があります。
StatefulSet の設計は理解しやすいです。現実世界を次の2つの状況に抽象化します。(1) 位相的状態。これは、アプリケーション間に非対称の関係があることを意味します。アプリケーションは特定の順序で起動する必要があります。アプリケーションを再起動した場合でも、指定された順序で再起動する必要があり、再起動後のネットワーク識別子は元のものと同じである必要があります。これにより、元の訪問者が同じ方法で新しいポッドにアクセスできるようになります。 (2)保管状況これは、アプリケーションが保存されたデータにバインドされていることを意味します。いつ、どのような状況であっても、ストレージ内のデータが変更されない限り、アプリケーションによって読み取られるデータは同じになります。 したがって、StatefulSet のコア機能は、何らかの方法で Pod のステータスを記録し、Pod が再作成されたときに何らかの方法でそのステータスを復元することです。 StatefulSetの使い方「Kubernetes アプリケーション アクセス管理」では、Pod のグループへの外部アクセスを提供する方法である Service を紹介しました。通常、Service を使用して Pod にアクセスする方法は 2 つあります: (1) Cluster IP 経由。このクラスター IP は VIP に相当します。この IP にアクセスすると、リクエストはバックエンド Pod に転送されます。 (2)DNSを通じてこのように、まず Kubernetes クラスターに DNS サービスがあることを確認する必要があります。現時点では、my-service という名前のサービスによってプロキシされるバックエンド Pod にアクセスするには、「my-service.my-namespace.svc,cluster.local」にアクセスするだけで済みます。 2番目の方法には、2つの処理方法があります: (1) 通常サービス、つまりドメイン名を解決してクラスターIPを取得し、方法1に従ってアクセスします。 (2)ヘッドレスサービス、つまりドメイン名を解決してバックエンドのポッドのIPアドレスを取得し、直接アクセスできるようにする。 StatefulSetを使用する場合は、主にHeadless Serviceが使用されます。ヘッドレス サービスがどのように定義されているか覚えていますか? 次のように ClusterIP を None に設定するだけです。 APIバージョン: v1 ヘッドレス サービスを理解した後は、PV と PVC の使用方法も理解する必要があります。忘れてしまった場合は、「Kubernetes データ永続性管理」で確認できます。ここでは詳細には触れません。 次に、StatefulSet の使用を開始します。 まず、ステートフル アプリケーションのレプリカを 2 つ作成するため、次のように 2 つの PV を作成します。 APIバージョン: v1 次に、StatefulSet に必要な YAML ファイルを次のように記述します。 APIバージョン: v1 上記の YAML ファイルでは、volumeMounts が新しいプロパティ volumeClaimTemplates に関連付けられており、管理用の pvc オブジェクトと pv を自動的に宣言していること、また、serviceName: "nginx" は、制御ループの実行時に Pod の解決可能な ID を保存するためにヘッドレス サービス nginx が使用されることを示していることに注意してください。 作成が完了すると、2 つの Pod が起動していることがわかります。 ポッドを取得します| grepウェブ これら 2 つの Pod のコマンドから、その名前が Deployment のようなランダムに生成された文字列ではなく、0 や 1 などのシリアル番号であることがわかります。これは、StatefulSet が各 Pod の順序を確認し、再起動または更新のたびに各 Pod が以前のデータを混乱なく保持し続けるようにする必要があるためです。したがって、StatefulSet は [statefulset-name]-[index] ルールに従って名前が付けられ、インデックスは 0 から始まります。また、各 Pod は順番に作成されます。たとえば、web-1 は web-0 が実行状態になった後にのみ作成されます。 両方の Pod が実行状態の場合、それぞれのネットワーク ID を表示できます。次のように、kubectl exec を通じてそれらを表示できます。 $ kubectl exec web - 0 --sh -c 'ホスト名' 2 つのポッドのホスト名とポッド名が一致しており、対応する番号が割り当てられていることがわかります。次に、DNS を使用してヘッドレス サービスにアクセスします。 次のようにデバッグ Pod を起動しましょう。 APIバージョン: v1 次に、解析のために dnsutils コンテナを入力します。 $ kubectl exec -it dnsutils -- /bin/sh nslookup の結果を分析すると、web-0.nginx にアクセスすると web-0 Pod の IP アドレスが解決され、その逆も同様です。つまり、アプリケーションで web-0.nginx を構成すると、web-0 Pod のみが呼び出されます。 Zookeeper などのステートフル アプリケーションを構成する場合は、構成ファイルで zkServer を指定する必要があります。現時点では、zk-0.zookeeper、zk-1.zookeeper のように指定できます。 今 StatefuleSet を更新する場合、更新順序はどうなりますか? まず、新しいターミナルを開き、次のコマンドを入力して観察します。 $ kubectl get pods -w -lロール=ステートフル 次に、次のコマンドを使用してアプリケーションのイメージを更新します。 $ kubectl イメージ statefulset / webを設定しますnginx = nginx : 1.8 次に、Web アプリケーションの更新順序を次のように確認します。 $ kubectl get pods -w -lロール=ステートフル 全体のシーケンスから、更新は後ろから前に向かって実行されていること、つまり、最初に web-1 ポッドが更新され、次に web-0 ポッドが更新されていることがわかります。この厳格な対応ルールを通じて、StatefulSet は Pod のネットワーク識別の安定性を保証します。この方法により、Pod のトポロジ状態を Pod 名 + 番号の形式で固定できます。さらに、Kubernetes は各 Pod に対して固定の一意のアクセス ポイント (Pod の DNS レコード) を提供します。 したがって、StatefulSetを次のようにまとめます。(1)StatefulSetはPodを直接管理します。これは、StatefulSet 内の Pod インスタンスが ReplicaSet 内の Pod インスタンスとまったく同じではないためです。各 Pod の名前やホスト名など、微妙な違いがあります。さらに、StatefulSet がこれらのインスタンスを区別する方法は、Pod に番号を追加することです。 (2)Kubernetesはヘッドレスサービスを通じて、番号付きポッドのDNSサーバーに同じ番号のレコードを生成します。 StatefulSet が Pod 番号が変更されないことを保証できる限り、web-0.nginx.default.svc.cluster.local などのサービス内の DNS レコードは変更されず、このレコードによって解決される Pod IP アドレスは Pod が再作成されると自動的に更新されます。 (3)StatefulSetは各Podに対してPodと同じ番号のPVCを割り当てて作成することもできます。このようにして、Kubernetes は永続ボリューム メカニズムを通じて対応する PV をこの PVC にバインドし、各ポッドに独立したボリュームがあることを保証できます。この場合、Pod が削除されても、対応する PVC と PV は保持されます。したがって、Pod が再作成されると、Kubernetes はそれと同じ番号の PVC を見つけて、その PVC に対応するボリュームをマウントし、以前のボリュームの以前のデータを取得します。 要約するStatefulSet コントローラーの主な機能の 1 つは、Pod テンプレートを使用して Pod を作成するときに Pod に番号を付け、番号順に作業を完了することです。 StatefulSet 制御ループは、Pod の実際の状態が予想される状態と一致していないことを検出すると、Pod に対しても順番に操作を行います。 もちろん、StatefulSet には他の機能もあります。実際のプロジェクトでは、完全に処理できない限り、StatefulSet を介してステートフル サービスを直接デプロイすることはほとんどありません。特定のサービスについては、etcd-operator、prometheus-operator などのより高度な Operator を使用してデプロイする場合があります。これらのアプリケーションは、StatefulSet を使用して Pod をデプロイするだけでなく、ステートフル サービスを非常に適切に管理できます。これは、ステートフル アプリケーションにとって最も重要なことは、データの回復、フェイルオーバーなどであるためです。 |
<<: ガートナーは、クラウドエンドユーザー市場が2023年までに6000億ドルに達すると予測している。
アンディ・サダーマン翻訳|シールソフトウェアリンク: https://cloudnativenow....
現在、AppleのApp Storeにあるアプリの総数は200万を超え、 Google Playにあ...
ドメイン名ニュース:本日、国内の有名なスポーツコミュニティHupu.comは、新しいドメイン名hup...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています今年1月3...
「4Kで数秒で開ける高速VPSがおすすめ」このような要望をお持ちの方は多いようです!初心者にとって、...
「彼らは毎日、潜在的な犠牲者を探し、彼らを『肉』と呼んでいます。一度誰かを見つけると、グループで手配...
1か月間、サイトを中心に最適化を行った後、ランキングは急速に上昇し、トラフィックは5〜6倍に増加しま...
有料テーマが無料テーマよりも優れている点は何ですか?より美しい外観とより強力な機能ほとんどの無料テー...
5月20日、アリババ副社長兼アリババクラウドコンピューティングプラットフォーム責任者の賈陽清氏はメデ...
Maple-hostingはオランダの民間ホスティング会社で、主にオランダのデータセンターで独立した...
Hostxnowは2009年に運営を開始したホスティング会社です(登録番号:GB 210 1553 ...
Canonical タグは、Google、Yahoo、Microsoft などの検索エンジンが共同で...
3月31日、Ebrun Power Networkは、JD Service Marketが最近、違反...
[編集者注] この記事の著者である Nathan Barry は Web アプリケーション開発者であ...
百度の最近の動向は誰もが知っています。インターネットの将来において、百度は独創性にもっと注意を払うで...