古いバージョンのKubernetesには、セキュリティと安定性の問題があります。 新しいKubernetesバージョンがACK Edgeでサポートされている場合は、ACK Edgeクラスターをこのバージョンに更新することを推奨します。 これにより、クラスターの安全で安定した環境が保証され、新しいバージョンが提供する新機能の恩恵を受けることができます。 ACK Edgeは、インプレース更新を使用してACK Edgeクラスターを更新します。 このトピックでは、ACK Edgeクラスターを更新する手順と考慮事項について説明します。
ACK Edgeクラスターの更新が必要な理由
セキュリティと安定性のリスクの軽減: Kubernetesの新しいバージョンは通常リリースされ、最適化とパッチのセキュリティと安定性の脆弱性が追加されます。 古いKubernetesクラスターを使用すると、ビジネスにセキュリティと安定性のリスクが生じる可能性があります。
テクニカルサポートとカスタマーサービスの改善: ACK Edgeは、古いKubernetesバージョンのセキュリティパッチや修復をリリースしなくなりました。 また、ACK Edgeは、古いKubernetesバージョンのテクニカルサポートの品質を保証するものではありません。 新しいバージョンのKubernetesを使用すると、テクニカルサポートとカスタマーサービスが向上します。
新機能: オープンソースKubernetesのイテレーションにより、新機能と改善が導入されました。 ACK Edgeクラスターは、これらの機能もサポートしており、開発とメンテナンスのエクスペリエンスを最適化します。
考慮事項
Kubernetesのバージョン
ACK Edgeは、1.18から1.22までのバージョン間のクラスター更新をサポートします。 ただし、現在のKubernetesバージョンから次のバージョンにのみ更新できます。
たとえば、ACK EdgeクラスターのKubernetesバージョンを1.18から1.22に更新するには、まずクラスターを1.20に更新し、次にクラスターを1.22に更新する必要があります。
ACKエッジクラスタでは、エッジノードプールと制御プレーンは、最大で2つのマイナーバージョンだけ異なります。 たとえば、コントロールプレーンがKubernetes 1.22を実行する場合、エッジノードプールは少なくともKubernetes 1.20を実行する必要があります。 そうしないと、クラスターが期待どおりに機能しない場合があります。
ACK EdgeクラスターのKubernetesバージョンを表示するには、ACKコンソールにログインし、[クラスター] ページでクラスターの [バージョン] 列を確認します。
ACK EdgeクラスターでサポートされているKubernetesバージョンと各バージョンの機能の詳細については、「サポートされているKubernetesバージョンのリリースノート」をご参照ください。
機能とカスタム設定
ACK Edgeクラスターが次の表に示す機能を使用している場合は、考慮事項と推奨される解決策をお読みください。
機能 | 考慮事項 | 推奨ソリューション |
ノードの自動スケーリング |
|
|
リソース予約 | ACK EdgeクラスターのKubernetesバージョンを1.18に更新すると、ACK Edgeはリソース予約を自動的に設定します。 リソース予約がクラスターに設定されておらず、ノードのリソース使用率が高い場合、ACKは、クラスターの更新後にノードに追い出されたポッドをスケジュールできない可能性があります。 | ノードに十分なリソースを確保します。 CPU使用率は50% を超えず、メモリ使用率は70% を超えないことを推奨します。 詳細については、「リソース予約ポリシー」をご参照ください。 |
LoadBalancer設定 | ACK Edgeクラスターでは、外部アクセスを処理するためにServer Load Balancer (SLB) インスタンスが必要です。 ただし、SLBインスタンスに | SLBインスタンスがトラフィックをアプリケーションポッドに転送できない場合は、SLBインスタンスにexternalTrafficPolicy: Localが指定されているかどうかを確認します。 詳細については、「 LoadBalancerサービスによって公開されているSLBインスタンスのIPアドレスにクラスターがアクセスできない場合の対処方法 |
APIサーバー | ACK EdgeがACK Edgeクラスターを更新すると、ACK Edgeはクラスター内のアプリケーションとの通信を中断することなく、制御プレーンの更新を試みます。 ただし、APIサーバとの通信が一時的に中断される場合があります。 割り込みは、APIサーバーに強く依存するアプリケーションに影響します。 たとえば、アプリケーションがリソースを一覧表示して監視する必要がある場合、APIサーバーの再起動時に監視操作が中断されます。 この問題を解決するには、中断が発生したときに監視操作を自動的に再試行するようにアプリケーションを設定する必要があります。 | アプリケーションがAPIサーバーへのアクセスを必要としない場合、アプリケーションはクラスターの更新の影響を受けません。 アプリケーションへのアクセスがAPIサーバーに必要な場合は、アプリケーションの再試行メカニズムを構成する必要があります。 |
スタートアッププローブ | クラスター内のポッドに起動プローブが設定されている場合、kubeletが再起動された後、ポッドは一時的にNotReady状態のままになります。 | 複数のレプリケートされたポッドをデプロイし、ポッドをノード間に分散することを推奨します。 これにより、ノードの1つが再起動したときに、アプリケーションに十分なポッドが確保されます。 |
kubectl | ACK Edgeクラスターが更新されたら、オンプレミスマシンでkubectlを更新することを推奨します。 そうしないと、kubectlバージョンがAPIサーバーバージョンと互換性がない可能性があります。 その結果、 | kubectlをインストールまたは更新します。 詳細については、「kubectlのインストール」をご参照ください。 |
クラスターでカスタム設定を使用する場合は、次の表の説明をお読みください。
機能 | 説明 |
ネットワーク | クラスターをアップグレードするには、Yumを使用して必要なソフトウェアパッケージをダウンロードする必要があります。 クラスターでカスタムネットワーク設定またはカスタムOSイメージを使用している場合は、Yumが期待どおりに実行できるようにする必要があります。 |
OSイメージ | カスタムOSイメージは、ACKによって厳密に検証されません。 ACKは、クラスターがカスタムOSイメージを使用している場合にクラスターをアップグレードできることを保証するものではありません。 |
その他 | CLIを使用して変更されたスワップパーティションやkubelet設定など、クラスターが他のカスタム設定を使用している場合、クラスターのアップグレードに失敗したり、アップグレード中にカスタム設定が失われる可能性があります。 |
手順、メソッド、および期間の更新
更新手順
更新方法
コントロールプレーンとオンクラウドノードプール: ACK Edgeクラスターでは、コントロールプレーンとオンクラウドノードプールの更新をトリガーできます。 システムはバックグラウンドで更新タスクを実行します。 次のモードがサポートされています。
(推奨) コントロールプレーンとオンクラウドノードプールの両方を更新する: システムはコントロールプレーンとオンクラウドノードプールを同時に更新します。 バックグラウンドで、システムは最初に制御プレーンを更新し、次にクラウドノードプールを (バッチで) 更新します。
制御プレーンのみ更新: システムは制御プレーンのみを更新する。 コントロールプレーンが更新されたら、クラウド上のノードプールを更新する必要があります。 詳細については、「ノードプールの更新」をご参照ください。
エッジノードプール: 各エッジノードプールのすべてのノードで更新コマンドを1つずつ実行する必要があります。
更新期間
ACK Edgeクラスターの制御プレーンを更新するには、約5分かかります。
オンクラウドノードプール内のノードは、バッチで更新されます。 各バッチ更新には約5分かかります。
エッジノードプールの場合、ノードプール内のすべてのノードで更新コマンドを実行する必要があります。 したがって、エッジノードプール更新の期間は、ノードプール内のノードの数に基づいて変化する。
更新手順
ステップ1: 制御プレーンとすべてのクラウド上ノードプールを更新する
(推奨) 制御プレーンとクラウドノードプールを同時に更新する
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、アップグレードするクラスターを見つけ、[操作] 列の を選択します。
[クラスターのアップグレード] ページの [更新項目] セクションで、使用可能なKubernetesバージョンを選択し、[更新モード] を [制御プレーンとすべてのノードプール] に設定します。 [バッチ更新ポリシー] セクションで、[バッチごとに更新するノードの最大数] を指定し、事前チェック をクリックします。
事前チェックが完了したら、[詳細の表示] をクリックしてレポートを表示します。
[結果] が [正常] と表示された場合、引き続きクラスターを更新できます。
[結果] に [異常] が表示された場合、[トラブルシューティング] タブをクリックし、提案に従って問題を修正します。 詳細については、「クラスターチェック項目とクラスターの問題を修正する方法に関する提案」をご参照ください。
クラスターが事前チェックに合格したら、[更新の開始] をクリックします。
更新中は、ノードを追加または削除しないでください。 ノードを追加または削除するには、まず更新をキャンセルする必要があります。 [クラスターのアップグレード] ページの [イベントローテーション] セクションで更新の進行状況を確認し、ビジネス要件に基づいて次の操作を実行できます。
更新を一時停止して再開する: 一時停止 をクリックして更新を一時停止します。 更新を再開するには、続行 をクリックします。
更新を一時停止すると、クラスターは中間状態のままになります。 更新が一時停止され、最も早い機会に更新を完了するときは、クラスターで操作を実行しないでください。 クラスターが7日間Paused状態のままになると、更新は終了します。 ACKは、更新に関連するイベントとログを自動的に削除します。
更新をキャンセル: キャンセル をクリックします。 表示されたメッセージボックスで [OK] をクリックします。 更新をキャンセルした後、ACKは現在のバッチ内のノードを更新し続け、更新をロールバックすることはできません。 残りのバッチは更新されません。
説明更新中にエラーが発生した場合、ACKは更新を一時停止します。 失敗の原因は、ページの下部に表示されます。 提案に従ってエラーをトラブルシューティングできます。
エラーが発生しない限り、更新中にkube-upgrade名前空間のリソースを変更しないでください。
更新が完了したら、[クラスター] ページに移動し、クラスターのKubernetesバージョンを確認して、コントロールプレーンコンポーネントが更新されていることを確認できます。 クラスターの詳細ページに移動し、左側のナビゲーションウィンドウで [ノード] > [ノード] を選択して、Kubernetesバージョンのノードを表示することもできます。
制御プレーンのみを更新する
コントロールプレーンが更新されたら、すべてのオンクラウドノードプールを更新する必要があります。 詳細については、「ノードプールの更新」をご参照ください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、アップグレードするクラスターを見つけ、[操作] 列の を選択します。
[クラスターのアップグレード] ページの [更新項目] セクションで、Kubernetesバージョンを選択し、[アップグレードモード] を [コントロールプレーンのみ] に設定し、事前チェック をクリックします。
事前チェックが完了したら、[詳細の表示] をクリックしてレポートを表示します。
[結果] が [正常] と表示された場合、引き続きクラスターを更新できます。
[結果] に [異常] が表示された場合、[トラブルシューティング] タブをクリックし、提案に従って問題を修正します。 詳細については、「クラスターチェック項目とクラスターの問題を修正する方法に関する提案」をご参照ください。
クラスターが事前チェックに合格したら、[更新の開始] をクリックします。
更新の進行状況は、[クラスターのアップグレード] ページの下部で確認できます。 更新が完了したら、[クラスター] ページに移動し、クラスターのKubernetesバージョンを確認して、コントロールプレーンコンポーネントが更新されていることを確認できます。
手順2: エッジノードプールの更新
制御プレーンが更新されていることを確認します。
エッジノードプールは、ノードプール内のすべてのノードが更新された場合にのみ更新されたと見なされます。
エッジノードプール内のすべてのノードで、次のコマンドを1つずつ実行します。
export REGION="" INTERCONNECT_MODE="" TARGET_CLUSTER_VERSION=""; export ARCH=$(uname -m | awk '{print ($1 == "x86_64") ? "amd64" : (($1 == "aarch64") ? "arm64" : "amd64")}') INTERNAL=$( [ "$INTERCONNECT_MODE" = "private" ] && echo "-internal" || echo "" ); wget http://aliacs-k8s-${REGION}.oss-${REGION}${INTERNAL}.aliyuncs.com/public/pkg/run/attach/${TARGET_CLUSTER_VERSION}/${ARCH}/edgeadm -O edgeadm; chmod u+x edgeadm;./edgeadm upgrade --interconnect-mode=${INTERCONNECT_MODE} --region=${REGION}
下表に、各パラメーターを説明します。
パラメーター | 説明 | 例 |
TARGET_CLUSTER_VERSION | 新しいKubernetesバージョン。 説明 値を更新されたコントロールプレーンのKubernetesバージョンに設定します。 | 1.22.15-aliyunedge.1 ACK EdgeクラスターでサポートされているKubernetesバージョンの詳細については、「サポートされているKubernetesバージョンのリリースノート」をご参照ください。 |
地域 | クラスターのリージョン ID。 | cn-hangzhou ACK Edgeクラスターでサポートされているリージョンの詳細については、「サポートされているリージョン」をご参照ください。 |
INTERCONNECT_MODE | ノードへの接続のネットワークタイプ。
| basic |
次の出力は、ノードが更新されたことを示します。
クラスターの更新に関するFAQ about cluster updates
クラスターを更新しない場合、ACK Edgeはクラスターの更新を強制しますか?
いいえ。 ACK Edgeクラスターは手動でのみ更新できます。 ACK Edgeクラスターを更新しない場合、クラスターは元のKubernetesバージョンを引き続き使用します。 新機能と改良された技術サポートを使用するには、クラスターを最新バージョンに更新することを推奨します。
エッジノードの更新に失敗した場合はどうすればよいですか?
を参照ACK edgeクラスターをアップグレードするときにエッジノードのアップグレードに失敗した場合はどうすればよいですか。
関連ドキュメント
クラスターが更新前に事前チェックに失敗した場合は、「クラスターチェック項目とクラスターの問題を修正する方法に関する提案」をご参照ください。