クラスターを新しい 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 リソースを簡単に検討することで、次回のアップグレード時のダウンタイムを最小限に抑えることができるはずです。 |
<<: コンテナ技術: クラウドコンピューティングの主要技術
>>: 「リフト アンド シフト」クラウド移行戦略はあなたのビジネスに適していますか?
最近、「ネットワークセキュリティと情報化」誌とIT運用保守ネットワークは、「『DC Yinghao』...
要約:今回の提携の背景には、Xiaomiがこれまでの手法を模倣しただけでなく、Baidu Tieba...
SEO 担当者の皆さん、独創性を尊重してください。このタイトルを使用する理由は、実は同僚に著者の労働...
セキュリティ上の理由から、銀行機関は従来、業務を運営するために自社のデータセンターに IT 機器を導...
[51CTO.comよりオリジナル記事]湘潭と言えば何を思い浮かべますか?偉人の故郷、赤い太陽が昇る...
前回の記事「分散サービストラッキング(Logstashの統合)」を通じて、ELKプラットフォームが提...
今年、徐々に成熟し、導入に向けて順調に進んでいるように見えるクラウドコンピューティングも、実は内部的...
moonvmはどうですか? moonvm 台湾アポルはどうですか? moonvm は、台湾の hin...
2018年最もホットなプロジェクト:テレマーケティングロボットがあなたの参加を待っていますウェブサイ...
多くの県級市が不動産市場に対する規制を緩和し始めたため、不動産販売は明確な回復を見せており、これは不...
7月11日、ビーチにて。波は楽器の音に合わせて踊り、普洛は帽子をかぶって飛び跳ねながら、「永遠の若さ...
Turnkeyinternet は、知らない人もいるかもしれませんが、ベテランなら知っているはずです...
ルーマニアは著作権が比較的緩い国です。一部の人には何か考えがあるかもしれません...ここで、ルーマニ...
マーケティングプロモーションは、海外でのゲームのプロモーション企画、公開、運営に欠かせない要素です。...
[[420468]]この記事では以下の内容を説明します[Kafka 運用保守] レプリカの拡張と縮小...