古いクラスターバージョンに関連するセキュリティおよび安定性のリスクを回避し、最新の Kubernetes 機能とテクニカルサポートを利用するために、クラスターバージョンをタイムリーにアップグレードしてください。Container Service for Kubernetes (ACK) は、アップグレード前のチェック、設定可能なアップグレードポリシーとペース調整、およびアップグレード進捗のモニタリングを提供し、スムーズなクラスターアップグレードを保証します。
アップグレードの理由
ACK では、Kubernetes の最新 3 つのマイナーバージョンを使用してクラスターを作成できます。たとえば、ACK が Kubernetes 1.31、1.32、1.33 をサポートしている場合、バージョン 1.30 を使用するクラスターは作成できなくなります。また、期限切れのパッチバージョンを使用するクラスターも作成できません。詳細については、「バージョンガイド」をご参照ください。
古いバージョンを実行しているクラスターには、セキュリティと安定性のリスクがあります。クラスターバージョンが期限切れになると、新しい Kubernetes バージョンの機能やバグ修正の恩恵を受けられなくなります。また、タイムリーで効果的なテクニカルサポートを受けられなくなり、パッチが適用されていないセキュリティ脆弱性のリスクにさらされます。
クラスターをアップグレードする際、ACK は事前チェックを実行します。ただし、これらのチェックでは、互換性のないすべての機能設定や API を検出できるわけではありません。責任共有モデルに基づき、ヘルプドキュメントの確認や、コンソールおよび内部メッセージの監視を通じて、バージョンリリースに関する情報を常に把握する責任はお客様にあります。クラスターをアップグレードする前に、新しいバージョンのリリースノートを確認してください。
アップグレードの影響
ACK は、クラスターのアップグレード中にアプリケーション Pod の継続性と安定性を確保するために、段階的およびバッチ式のアップグレードポリシーを提供します。
事前チェック:コントロールプレーンまたはノードプールをアップグレードする前に、ACK は事前チェックを実行し、非推奨 API、互換性のないコンポーネントバージョン、ノードやディスクのステータスに関する問題など、潜在的な互換性リスクを特定します。ACK は、これらの問題を解決するための提案も提供します。事前チェックは、クラスターのサービスに影響を与えません。
コントロールプレーン:
ACK マネージドクラスター:API Server は ACK によって管理されており、アップグレード中にローリング方式で再起動されます。このプロセスは通常、実行中のアプリケーションに影響を与えません。アプリケーションが API Server に強く依存している場合、一時的な切断により接続をリトライする必要がある場合があります。
ACK 専用クラスター:アップグレード中、ACK は各マスターノードを順次インプレースアップグレードします。このプロセスは通常、実行中のアプリケーションに影響を与えません。アプリケーションが API Server に強く依存している場合、一時的な切断により接続をリトライする必要がある場合があります。
ノードプール:サービスの継続性を確保するため、ノードはバッチでアップグレードされます。バッチごとの最大ノード数やバッチ間の間隔などを指定して、バッチアップグレードポリシーをカスタマイズし、サービスへの影響を制御できます。
インプレースアップグレード中、ディスクは交換されず、ノードも再初期化されません。アプリケーション Pod は実行を継続し、サービスは中断されません。
システムディスク置換アップグレードでは、ノードのドレイン、システムディスクの交換、ノードの再初期化が行われます。以下の影響にご注意ください:
システムディスク置換アップグレード中、ACK はノードをドレインします。ノード上の Pod は、Pod Disruption Budget (PDB) に従って、他の利用可能なノードに退避されます。高可用性を確保するため、マルチレプリカのデプロイメント戦略を使用し、ワークロードを複数のノードに分散させ、重要なサービスには PDB を設定して、同時に中断される可能性のある Pod の数を制御してください。これにより、ノードのメンテナンス操作中のサービスの継続性が維持されます。
システムディスク置換アップグレード中、ACK はノードプールの現在の設定に基づいてノードを再初期化します。この設定には、ノードのログイン方法、OS イメージ、コンテナランタイムバージョンなどが含まれます。ノードプールを編集して、ノードプールの設定を更新してください。他の方法でノードに加えられた変更は、アップグレード中に上書きされます。
ノード上の Pod がシステムディスクを指す HostPath を参照している場合、システムディスク置換アップグレード後に HostPath ディレクトリ内のデータは失われます。
アップグレードプロセス
ACK クラスターのアップグレードには、コントロールプレーンとノードプールのアップグレードが含まれます。開始前に事前チェックを実行し、影響を最小限に抑えるためにオフピーク時間にアップグレードをスケジュールしてください。コントロールプレーンのアップグレードが完了したら、クラスターの動作状態を注意深く確認します。その後、コントロールプレーンのバージョンに合わせてノードプールをアップグレードします。
1. 事前準備
ACK リリースノートに基づいて、アップグレードのターゲットバージョンを決定します。ACK は一度に 1 つのマイナーバージョンのみのアップグレードをサポートしています。バージョンをスキップしたり、以前のバージョンにロールバックしたりすることはできません。
ターゲットバージョンのバージョンガイドを注意深くお読みください。アップグレード後の互換性の問題を避けるため、アップグレードの考慮事項、主な変更点、非推奨の機能を必ず理解してください。
クラスターのメンテナンスウィンドウを計画します。事前に事前チェックを実行して潜在的なリスクを特定し、オフピーク時間にアップグレードを実行してください。
2. コントロールプレーンのアップグレード
事前チェックの実行:アップグレード前に事前チェックを実行します。すべてのチェック項目に合格するか、特定されたすべての問題が修正された後にのみ、アップグレードを進めてください。
事前チェックでは、非推奨 API (バージョン 1.20 以降)、コンポーネントの互換性、機能設定の互換性、クラスターのステータス、コントロールプレーンコンポーネントのステータスなどの項目を検査します。
アップグレードの実行:事前チェックに合格した後、アップグレードを実行します。
ACK マネージドクラスターおよびACK Serverless クラスター:ACK がアップグレードを管理します。これには kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy などのコントロールプレーンコンポーネントのアップグレードが含まれます。
ACK 専用クラスター:サービスの継続性を最大化し、データ移行や設定調整のリスクを低減するために、インプレースアップグレードが使用されます。
アップグレード後のチェック:クラスターバージョンが更新され、コアコンポーネント、アプリケーション、Pod の作成、ノードの追加がすべて期待どおりに機能していることを確認します。
3. ノードプールのアップグレード
ノードプールのアップグレードには、kubelet とコンテナランタイムのアップグレードが含まれます。
事前チェックの実行:アップグレード前に事前チェックを実行します。すべてのチェック項目に合格するか、特定されたすべての問題が修正された後にのみ、アップグレードを進めてください。
事前チェックでは、ノードのステータス、システムリソース、ディスクのステータス、ネットワーク環境などの項目を検査します。
アップグレードポリシーの設定とアップグレードの実行:アップグレード方法 (インプレースまたはディスク置換) を選択し、バッチアップグレードポリシーを設定します。これには、バッチごとの最大ノード数の指定や、スナップショットを自動的に作成するかどうかの設定が含まれます。
アップグレード後のチェック:kubelet とコンテナランタイムのバージョンが更新され、Pod のスケジューリングとアプリケーションが期待どおりに機能していることを確認します。
4. その他の手順
OS イメージの変更:ノードプールの OS イメージをアップグレードしたり、OS タイプを切り替えたりする (例:Alibaba Cloud Linux 2 から Alibaba Cloud Linux 3 へ) 場合は、「オペレーティングシステムの変更」をご参照ください。
クラスターコンポーネント:ACK はコントロールプレーンと kube-proxy などのコアコンポーネントのみをアップグレードします。他のクラスターコンポーネントは、オフピーク時間に [アドオン] ページから手動でアップグレードする必要があります。バージョンの互換性要件については、「コンポーネントの概要とリリースノート」をご参照ください。
アップグレードの考慮事項
アップグレード方法
インプレースアップグレードとシステムディスク置換
コントロールプレーンのアップグレードについては、ACK マネージドクラスターおよびACK Serverless クラスターでは ACK がプロセスを管理します。ACK 専用クラスターは、インプレースアップグレードを使用してアップグレードされます。
ノードプールのアップグレードには、ACK はインプレースアップグレードとシステムディスク置換アップグレードの 2 つの方法を提供します。
インプレースアップグレード:システムディスクの交換やノードの再初期化を行わずに、既存のノード上で直接アップグレードが実行されます。元のノードデータは影響を受けません。IP アドレスやディスクマウントなど、ECS インスタンス関連の設定は変更されません。ただし、containerd や kubelet など、ACK が管理するコンポーネントの設定は、コンポーネントのバージョン間の違いに基づいて調整される場合があります。
containerd または kubelet の設定をカスタマイズするには、「ノードプールの kubelet 設定をカスタマイズする」および「ノードプールの containerd 設定をカスタマイズする」をご参照ください。
システムディスク置換アップグレード:この方法では、システムディスクを交換し、ノードを再初期化します。IP アドレスとデータディスクのマウントは変更されませんが、システムディスク上のすべてのデータは削除されます。続行する前に、ディスクスナップショットを有効にし、システムディスクをバックアップしてください。
ノードにアタッチされているデータディスクは影響を受けません。
特殊なケース
以下のシナリオでは、システムディスク置換アップグレードが必要です:
コンテナランタイムの移行:バージョン 1.24 以降、Kubernetes は組み込みランタイムとして Docker をサポートしなくなりました。ディスク置換方法を使用して containerd に移行する必要があります。
詳細については、「ノードのコンテナランタイムを Docker から containerd に移行する」をご参照ください。
オペレーティングシステムの変更:バージョン 1.30 の時点で、CentOS と Alibaba Cloud Linux 2 はサポートされていません。ディスク置換を使用して、サポートされているオペレーティングシステムに切り替えてください。
詳細については、「オペレーティングシステムの変更」をご参照ください。
Windows ノードプール:Windows ノードプールのアップグレードには、ディスク置換方法が必要です。
代替案:新しいノードプールによるローリングアップグレード
既存のノードをアップグレードする代わりに、ターゲット設定で新しいノードプールを作成することでローリングアップグレードを実行できます。古いノードプールをスケジュール不可に設定するか、ワークロードのスケジューリングを更新することで、アプリケーションを段階的に移行します。移行が検証されたら、古いノードプールを削除します。
両方のノードプールが共存している間は両方に課金されます。コストを管理するために、移行後速やかに古いプールを削除してください。
よくある質問
クラスターを手動でアップグレードするにはどうすればよいですか?
クラスターをアップグレードするためのベストプラクティスは何ですか?
クラスターのスペックアップにはどのくらいの時間がかかりますか?
1つのバージョンを永続的に使用し、クラスターをアップグレードしないことは可能ですか?
ACK はアップグレード時にマイナーバージョンをスキップすることをサポートしていますか?
クラスターのバージョンが非常に古いです。どうすれば迅速にアップグレードできますか?
クラスターをバージョン 1.22 から 1.24 にアップグレードする際に、Docker から containerd に切り替えるにはどうすればよいですか?
ACK はクラスターのアップグレード中にどのように安定性を確保しますか?
クラスターをアップグレードする前に知っておくべきことは何ですか?
バージョンが期限切れのクラスターは、引き続き正常に使用できますか?
クラスターアップグレード後のバージョンロールバックはサポートされていますか?
クラスターをスペックアップしてコンテナサービス ACK Pro マネージドクラスターに移行する場合、どちらの操作を先に実行する必要がありますか?
事前チェックで非推奨 API が報告された場合はどうすればよいですか?
事前チェックで「component version too low」という警告を解決するにはどうすればよいですか?
「the aliyun service is not running on the instance」というエラーでアップグレードが失敗した場合の解決方法を教えてください。
ノードで「PLEG not healthy」エラーが発生した場合の解決方法を教えてください。
クラスターのアップグレード時に
invalid object doesn't have additional propertiesエラーが発生した場合はどうすればよいですか?