古い Kubernetes バージョンを使用していると、クラスターが既知のセキュリティ脆弱性にさらされ、受けられる技術サポートが制限される可能性があります。ACK Edge では、インプレースアップグレードを使用して、クラスターを再作成することなく新しい Kubernetes バージョンに移行します。本ドキュメントでは、バージョンの制約、3 つのフェーズからなるアップグレード手順、および 1.24 へのアップグレード時のランタイム移行要件について説明します。
アップグレードの必要性
セキュリティ脆弱性:新しいバージョンでは、既知の脆弱性に対するパッチが適用されます。ACK Edge では、古いバージョンにセキュリティ修正をバックポートしません。
サポートの制限:ACK Edge では、古いバージョンに対するサポート品質を保証しません。アップグレードすることで、完全な技術サポートが受けられるようになります。
新機能:各リリースには、開発や運用のエクスペリエンスを向上させる改善が含まれています。
注意事項
ACK Edge では、Kubernetes バージョン 1.18 から 1.24 までのアップグレードをサポートしています。1.26 以降へのアップグレードもサポートされています。
アップグレードは順次実行されます。次のマイナーバージョンにのみ移行できます。1.18 から 1.22 にアップグレードするには、まず 1.20 にアップグレードし、その後 1.22 にアップグレードする必要があります。
ロールバックはサポートされていません。一度アップグレードすると、クラスターを以前の Kubernetes バージョンに戻すことはできません。
Kubernetes 1.26 から 1.30 にアップグレードするには、チケットを送信してホワイトリストへの追加を依頼する必要があります。
エッジノードプールとコントロールプレーンのバージョンは、最大で 2 マイナーバージョンまで異なっていてもかまいません。たとえば、コントロールプレーンが Kubernetes 1.22 を実行している場合、エッジノードプールは少なくとも Kubernetes 1.20 を実行する必要があります。
仕組み
ACK Edge クラスターのアップグレードは、連続する 3 つのフェーズで実行されます。
フェーズ | 範囲 | 推定所要時間 |
コントロールプレーン | kube-apiserver、kube-controller-manager、kube-scheduler | 約 5 分 |
クラウドノードプール | ノードプールごとの kubelet、コンテナランタイム | バッチあたり約 5 分 |
エッジノードプール | すべてのノード、1 つずつ更新 | ノード数により異なる |
コントロールプレーンはローリングアップデートを使用します。クラウドノードプールは 1 つのプールずつ更新され、ノードはバッチで更新されます。最初のバッチには 1 つのノードが含まれ、その後の各バッチではサイズが 2 倍になります。エッジノードプールでは、各ノードで個別にアップグレードコマンドを実行する必要があります。
前提条件
開始する前に、以下を確認してください。
クラスター管理権限を持つACK コンソールへのアクセス
ACK Edge Kubernetes のリリースノートまたはターゲットバージョンのリリースノートの確認
ACK コンソールの[クラスター] ページの[バージョン] 列で、クラスターの現在の Kubernetes バージョンを確認します。
手順1:コントロールプレーンの更新
ACK コンソールにログオンします。左側のナビゲーションペインで、[クラスター]をクリックします。
[クラスター] ページで、アップグレードするクラスターの名前をクリックします。 左側のペインで、[操作] > [クラスターのアップグレード] を選択します。
[クラスターのアップグレード] ページで、[宛先バージョン] を設定し、[事前チェック] をクリックします。事前チェックが完了したら、[事前チェック結果] セクションで結果を確認します:
問題なし:クラスターは事前チェックに合格しています。次の手順に進みます。
問題が見つかりました:クラスターは正常に動作し続け、ステータスは変更されません。先に進む前に、コンソールに表示される提案に基づいて問題を修正してください。詳細については、「クラスターチェック項目とクラスター問題の修正方法に関する提案」をご参照ください。
Kubernetes 1.20 以降を実行しているクラスターの場合、事前チェックでは非推奨 API の使用状況もスキャンされます。非推奨 API の検出結果はアップグレードをブロックしません。この結果は、あくまで参考情報です。詳細については、「非推奨 API」をご参照ください。
[更新の開始] をクリックし、画面の指示に従います。 [クラスターのアップグレード] ページの右上隅にある更新履歴パネルで進捗状況を確認します。 更新が完了したら、[クラスター] ページに移動し、Kubernetes バージョンが変更されたことを確認します。 これ以降に追加された新しいノードは、自動的に新しいバージョンを使用します。
手順2:クラウドノードプールの更新
コントロールプレーンの更新が完了したら、オフピーク時間中にクラウドノードプールを更新します。各ノードプールの更新では、すべてのノードの kubelet とコンテナランタイムが置き換えられます。
ノードプールは 1 つずつ更新され、一度に更新されるのは 1 つのプールのみです。各プール内では、ノードはバッチで更新されます。最初のバッチには 1 つのノードが含まれ、後続のバッチのサイズは 2 倍になります。バッチサイズの上限は、一時停止した更新を再開した後でも適用されます。最大バッチサイズは、[ノードプールのアップグレード] ページで設定します。ほとんどのクラスターでは、最大バッチサイズを 10 にすると、うまく機能します。
詳細な手順と更新に関する注意事項については、「クラウドノードプールの更新」をご参照ください。
手順3:エッジノードプールの更新
この手順を開始する前に、コントロールプレーンの更新を完了してください。エッジノードプールは、プール内のすべてのノードが更新された場合にのみ、完全に更新されたと見なされます。
エッジノードプール内のすべてのノードで、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}コマンドを実行する前に、プレースホルダーを置き換えてください。
パラメーター | 説明 | 例 |
| 更新されたコントロールプレーンの Kubernetes バージョン |
|
| クラスターのリージョン ID |
|
| ノード接続のネットワークタイプ: |
|
アップグレードが成功すると、次の出力が表示されます。
INFO[2024-03-20T20:02:35+08:00] component edge-hub:v0.10.1 backup successfully
INFO[2024-03-20T20:02:35+08:00] component edge-hub:v0.10.1 uninstall successfully
INFO[2024-03-20T20:02:40+08:00] component edge-hub:v0.10.3 install successfully
INFO[2024-03-20T20:02:50+08:00] component edge-hub:v0.10.3 is ready
INFO[2024-03-20T20:02:50+08:00] This node has been upgraded successfully
[root@iZbp17m64crsyhim52dg76Z ~]#Docker のランタイム移行 (1.24 へのアップグレード)
Kubernetes 1.24 では、Docker ランタイムのサポートが廃止されました。クラスター内のいずれかのノードで Docker を使用している場合は、1.24 へのアップグレードの一環として containerd に移行してください。
(推奨) ローリング移行:containerd ランタイムを使用する新しいノードプールを作成し、その容量を拡張します。古いノードプールをスケジュール不可に設定するか、ワークロードのスケジューリングラベルを更新することで、ワークロードを段階的に移行します。その後、古いノードプールをオフラインにします。ノードプールの作成の詳細については、「エッジノードプールの管理」をご参照ください。ノードをスケジュール不可に設定する方法の詳細については、「ノードのドレインとスケジューリングステータス」をご参照ください。
インプレースアップデート:更新前にノードをドレインし、その後アップグレードコマンドを実行します。更新中、ノード上のすべてのコンテナが再起動されます。
ノードをドレインします。
エッジノードプール内のすべてのノードで、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 バージョン
1.24.6-aliyunedge.1— 「サポートされている Kubernetes バージョンのリリースノート」をご参照くださいREGIONクラスターのリージョン ID
cn-hangzhou— 「サポートされているリージョン」をご参照くださいINTERCONNECT_MODEノード接続のネットワークタイプ:
basic(パブリックネットワーク) またはprivate(Express Connect 回線)basicアップグレードが成功すると、次の出力が表示されます。
INFO[2024-03-20T20:02:35+08:00] component edge-hub:v0.10.1 backup successfully INFO[2024-03-20T20:02:35+08:00] component edge-hub:v0.10.1 uninstall successfully INFO[2024-03-20T20:02:40+08:00] component edge-hub:v0.10.3 install successfully INFO[2024-03-20T20:02:50+08:00] component edge-hub:v0.10.3 is ready INFO[2024-03-20T20:02:50+08:00] This node has been upgraded successfully [root@iZbp17m64crsyhim52dg76Z ~]#
アップグレードの検証
3 つのフェーズがすべて完了したら、アップグレードが成功したことを確認します。
[クラスター] ページで、[バージョン] 列に表示されている Kubernetes バージョンがターゲットバージョンと一致することを確認します。
ノードプールが実行中であり、ノードが正常な状態であることを確認します。
クラスター内のワークロードが期待どおりに動作していることを確認します。
よくある質問
ACK Edge はクラスターのアップグレードを強制しますか?
いいえ。ACK Edge クラスターは手動でのみアップグレードされます。アップグレードしないことを選択した場合、クラスターは現在の Kubernetes バージョンのままになります。セキュリティパッチと完全な技術サポートへのアクセスを維持するために、速やかにアップグレードすることを推奨します。
エッジノードのアップグレードに失敗した場合はどうすればよいですか?
アップグレードコマンドが This node has been upgraded successfully を返さない場合は、「ACK Edge クラスターのアップグレード時にエッジノードのアップグレードに失敗した場合」をご参照ください。
次のステップ
クラスターが事前チェックに失敗した場合は、「クラスターチェック項目とクラスター問題の修正方法に関する提案」をご参照ください。
エッジノードプールを作成または管理するには、「エッジノードプールの管理」をご参照ください。