クラスターを新しい Kubernetes バージョンにアップグレードすることに不安を感じていますか?アップグレードを促す理由はいくつかあります。おそらく、次のいずれかを実行したいでしょう。
理由が何であれ、アップグレード中のダウンタイム (および不安) を最小限に抑えるために、アップグレード プロセスを見直す価値はあります。 どのコンポーネントをアップグレードする必要がありますか?Kubernetes クラスターは、一連のノードとコントロール プレーンで構成されます。ワーカーノードは、コンテナ化されたアプリケーションを実行するポッドをホストします。コントロール プレーンは、クラスター内のワーカー ノードとポッドを管理します。 Kubernetes クラスターのコンポーネント (kubernetes.io より) Kubernetes クラスターをアップグレードするには、次の順序でこれら 2 つのコンポーネントをアップグレードします。
セルフホスト型クラスターとマネージド型クラスターの両方において、コントロール プレーンのアップグレードは非常に簡単です。この投稿では、ワーカー ノードのアップグレードのダウンタイムを最小限に抑えることに焦点を当てます。 ワーカーノードのアップグレードワーカーノード上の Kubernetes バージョンをアップグレードするには、次の 2 つの戦略があります。
インプレース アップグレードの場合、ノードは 1 つずつドレインされ、ブロックされるため、ノードに新しいポッドがスケジュールされることはありません。次に、ノードを削除し、更新された Kubernetes バージョンで再作成します。新しいノードが起動して実行されると、次のノードが更新されます。この戦略は、次の視覚化アニメーションのようになります。 Kubernetes クラスター内のノードのインプレース アップグレードを示すアニメーション インプレース アップグレードの利点は、追加のコンピューティング リソース (単一の追加ノード) が最小限で済むことです。この戦略の欠点は、ノードが 1 つずつドレインされ、アップグレードされるため、かなり長い時間がかかる可能性があることです。さらに、ノードのドレイン中にポッドがシャッフルされるため、ポッドを複数回移動する必要がある場合があります。 地理的アップグレードの場合は、新しい Kubernetes バージョンで新しいノード プールを作成します。すべての新しいノードが実行されると、古いノード プールをブロックし、古いノードを 1 つずつドレインしてから、古いノード プールを削除できます。この戦略は以下のアニメーションで視覚化されています。 Kubernetes クラスター内のノードのアウトオブプレース アップグレードを示すアニメーション オフサイト アップグレードでは、アップグレード期間を短縮する代わりに、コンピューティング リソースを一時的に 2 倍にする必要があります。アップグレード期間の短縮は、新しくアップグレードされたノードの起動時間の並列化とポッドの移動の最小化によるものです。この戦略では、ポッドは古いノードから新しくアップグレードされたノードに移動されます。 コンピューティング リソースの使用率が一時的に増加しても問題ない場合は、オフサイト アップグレード戦略を使用して処理を高速化することをお勧めします。 K8sリソースを構成するどのワーカー ノードのアップグレード戦略を選択した場合でも、元のノードからアップグレードされたノードにポッドをシャッフルすることになります。リソースが正しく構成されていない場合、ダウンタイムが発生する可能性があります。潜在的な落とし穴をいくつか見てみましょう。 独立ポッドPod は、Kubernetes でデプロイ可能な最小のオブジェクトです。これは、クラスター内で実行されているアプリケーションの単一インスタンスを表します。ポッドは一時的なものです。ポッドがノードから削除された場合、ポッドはそれ自体を置き換えません。 Pod は自己修復機能がないため、単一の Pod を直接作成することはお勧めしません。代わりに、Deployment などのコントローラーを使用して、Pod を作成および管理します。 ダウンタイムを最小限に抑えるには、すべてのポッドが ReplicaSet、Deployment、StatefulSet または同様のものによって管理されていることを確認してください。アップグレード後には、個々のポッドを手動で再スケジュールする必要がある場合があります。 展開クラスター内のポッドのほとんどは、デプロイメントによって制御される可能性があります。デプロイメントは、一意の ID を持たない同一のポッドのグループを表します。デプロイメントでは、アプリケーションの複数のコピーを管理し、いずれかのインスタンスに障害が発生した場合に代替品をデプロイすることで、可用性が向上します。 ダウンタイムをなくすには、アプリケーションに PodDisruptionBudget (PDB) があることを確認してください。 PDB は、同時にシャットダウンできる複製されたアプリケーションのポッドの数を制限することで、より高い可用性を実現します。 たとえば、次の PDB では、停止中 (アップグレードなど) にフロントエンド ラベルを持つポッドの 80% が利用可能である必要があると規定されています。これにより、負荷を処理するレプリカの数が、レプリカの合計数の特定の割合を下回ることがなくなります。 apiバージョン: ポリシー/ v1 ノードをアップグレードできるようにするには、複数のレプリカ (少なくともアップグレード中は一時的に) があることを確認する必要があることに注意してください。 デーモンセットDaemonSet は、すべての (または一部の) ノードがポッドのコピーを実行することを保証します。デーモン セットは通常、ノード監視またはログ収集に使用され、通常はトラフィックを処理しません。これらのユースケースでは、ワーカー ノードのアップグレード中にデータに小さなギャップが生じても通常は許容されます。 ステートフルセットStatefulSet は、データベースやメッセージ キューなどのステートフル アプリケーションを管理するために使用される Kubernetes コントローラーの一種です。 StatefulSets のアップグレードには、Deployment のアップグレードよりも多くの考慮が必要です。 ダウンタイムをなくすには、次の設定がされていることを確認してください。
StatefulSet 潜在的イベント-1StatefulSet をアップグレードする際の PodDisruptionBudget (PDB) の重要性を説明するために、分散メッセージング システム STAN を使用するサンプル クラスターを考えてみましょう。 STAN は Raft のクォーラムコンセンサスに依存しており、決定にはサーバーの過半数 (> 50%) の同意が必要です。このクラスターの STAN StatefulSet には 5 つのレプリカがあります。レプリカの 2 つに障害が発生しても、STAN は引き続き動作します。ただし、2 つ以上のレプリカに障害が発生すると、STAN はクォーラムを失い、動作を停止します。 サンプル クラスターの STAN StatefulSet には PDB がありません。この構成では、アップグレード中に次の理由でクォーラムが失われる可能性があります。 PDB がないため、制御計画では任意の数の STAN ポッドが中断される可能性があることを示しています。
アップグレード中にクォーラムを失う Raft アプリケーションのアニメーション。 StatefulSet に PDB がありません この場合、minAvailable: 51% で構成された PDB は、少なくとも 51% の Pod がドレイン ノードから直ちに排除されるようにすることで、クォーラム損失を防ぐことができます。 StatefulSet 潜在的イベント 2StatefulSet をアップグレードする際の準備状況プローブの重要性を説明するために、同じサンプル クラスターを考えてみましょう。 サンプル クラスターの STAN StatefulSet は、PDB (minAvailable: 51%) とライブネス プローブで構成されていますが、準備プローブがありません。この構成では、アップグレード中に次の理由でクォーラムが失われる可能性があります。
この障害モードは、以下のアニメーションで視覚化されています。 5 つの正方形は 5 つの STAN ポッドを表します。赤い四角は、ポッドがまだアクティブではないことを示します。黄色の四角は、ポッドがまだ準備ができていないことを示します。 アップグレード中にクォーラムを失う Raft アプリケーションのアニメーション。 StatefulSet に準備プローブがありません。 この場合、準備プローブは、新しく作成された STAN ポッドの準備が整うまで、それ以上の STAN ポッドが中断されるのを防ぎます。準備プローブは、/streaming/serverz 監視エンドポイントに HTTP GET リクエストを送信するように構成できます。このエンドポイントは、STAN サーバーの準備が整うまでリクエストに応答しません。 要約するKubernetes クラスターのアップグレードは神経を使う作業です。ただし、アップグレード プロセスの基本を理解し、さまざまな Kubernetes リソースを簡単に検討することで、次回のアップグレード時のダウンタイムを最小限に抑えることができるはずです。 |
<<: コンテナ技術: クラウドコンピューティングの主要技術
>>: 「リフト アンド シフト」クラウド移行戦略はあなたのビジネスに適していますか?
Taobao チームはますます大きくなっており、それは競争がますます激しくなっていることを意味します...
仮想 SAN が登場する前は、ファイバー チャネル SAN と iSCSI しかありませんでした。現...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っています以前、私は...
現在、世界170か国以上が国家デジタル戦略を発表しています。あらゆる業界におけるデジタル変革の必要性...
新しいインターネットメディアであるWeiboは、本質的には情報ストリーミングメディアであり、その短い...
Highspeedweb の新年プロモーションは、オリジナル製品と比べてかなり良いです。Highsp...
LunaMetircsのRobbin氏は、ウェブサイト分析の売上帰属には、(最初のインタラクショ...
皆さんは、Shark Data Center 直下の低価格 VPS ブランドである changeip...
私は Guijiaoqi です。ここで簡単に皆さんにお話ししたいと思います。私の現在の研究結果から判...
「インターネットホームデコレーション元年」という言葉を聞いたことがありますか? 「インターネットホー...
改良された Baidu Webmaster プラットフォームがリリースされました。インターフェースの...
2019 年 4 月 23 日、中国市場で合法かつコンプライアンスに準拠して運営される唯一のグローバ...
【Ebrun Power Networkニュース】4月17日、情報筋はEbrun Power Net...
Baidu 入札アカウントを最適化している人は、品質がいかに重要であるかを知っているはずです。キーワ...
bitacce の最後のプロモーションは 6 か月前でした。今回は、ダラス データ センターにある ...