Container Service for Kubernetes (ACK) では、クラスタのアップグレード、クラスタの移行、およびコンポーネントのアップグレードを実行する前に、自動で事前チェックが実行されます。すべてのチェックに合格した場合にのみ、操作が続行されます。本トピックでは、各チェック項目の検証内容および失敗時の対処方法について説明します。
確認タイプ
ACK では、以下の 3 種類の事前チェックが実行されます。
| 確認タイプ | 実行タイミング | 対象 |
|---|---|---|
| クラスタアップグレード確認 | クラスタアップグレード前 | すべてのクラスタタイプ |
| クラスタ移行確認 | クラスタ移行前 | ACK Serverless Basic Edition から ACK Serverless Pro への移行 |
| コンポーネント確認 | コンポーネントアップグレード前 | 個別のコンポーネント |
クラスタアップグレード確認
クラスタアップグレードを開始する前に、ACK は事前アップグレード確認を実行し、非推奨 API、コンポーネントのバージョン制約、ランタイムの変更などによって引き起こされる問題を検出します。すべてのチェックに合格した場合にのみ、アップグレードが続行されます。
この確認は、以下の 2 つのカテゴリに分類されます。
クラスタリソース:ACK Serverless クラスタで使用されるクラウドリソース(例:Server Load Balancer (SLB) インスタンス、Virtual Private Cloud (VPC) ネットワーク)。
クラスタコンポーネント:コンポーネントの構成、アプリケーション設定、および非推奨 API の使用状況。
確認項目は、クラスタのタイプ、バージョン、ランタイムに応じて異なります。以下に示す表は参考用です。確定的な情報源は、ACK コンソール内の確認ページです。
クラスタリソース
| 確認項目 | 検証内容 |
|---|---|
| APIServer SLB | SLB インスタンスが存在すること |
| SLB インスタンスのステータスが「正常」であること | |
| SLB リスナーの構成(ポートおよびプロトコル)が有効であること | |
| SLB バックエンドサーバーグループの構成が有効であること | |
| SLB のアクセスの制御構成が正しいこと(アクセスの制御が未設定の場合も合格とみなされます) | |
| VPC | VPC タイプのインスタンスが存在すること |
| VPC タイプのインスタンスのステータスが「正常」であること | |
| vSwitch | vSwitch が存在すること |
| vSwitch のステータスが「正常」であること | |
| vSwitch に利用可能な IP アドレスが 2 つ以上あること |
クラスタコンポーネント
| 確認項目 | 検証内容 |
|---|---|
| Kube Proxy Master | コンポーネントが存在すること |
| Kube Proxy Worker | コンポーネントが存在すること |
| APIService | 利用不可な APIService が存在しないこと |
| コンポーネントバージョン | Terway、CoreDNS、cloud-controller-manager (CCM)、Nginx Ingress Controller、Metric Server の各バージョンが、アップグレード要件を満たしていること |
| 非推奨 API | クラスタで非推奨 API を使用していないこと |
クラスタ構成
| 確認項目 | 検証内容 |
|---|---|
| iptables | iptables 構成が有効であること |
| オペレーティングシステム | OS がアップグレードをサポートしていること |
| yum | yum パッケージマネージャが正常に動作していること |
| kubelet | kubelet 構成が期待通りであること |
| コンテナランタイム | Docker または containerd のランタイムステータスが「正常」であること |
| マニフェスト | マニフェストファイルが期待通りであること |
クラスタ移行確認
ACK Serverless Basic Edition クラスタを ACK Serverless Pro に移行する前に、事前移行確認が実行されます。すべてのチェックに合格した場合にのみ、移行が続行されます。
この確認は、以下の 2 つのカテゴリに分類されます。
クラスタリソース:ACK Serverless クラスタで使用される SLB インスタンスおよび VPC ネットワーク。
クラスタコンポーネント:コンポーネントの構成(例:利用不可な APIService の有無)。
確認項目は、クラスタのタイプ、バージョン、ランタイムに応じて異なります。以下に示す表は参考用です。確定的な情報源は、ACK コンソール内の確認ページです。
クラスタリソース
| 確認項目 | 検証内容 |
|---|---|
| APIServer SLB | SLB インスタンスが存在すること |
| SLB インスタンスのステータスが「正常」であること | |
| SLB リスナーの構成(ポートおよびプロトコル)が有効であること | |
| SLB バックエンドサーバーグループの構成が有効であること | |
| SLB のアクセスの制御構成が正しいこと(アクセスの制御が未設定の場合も合格とみなされます) | |
| VPC | VPC タイプのインスタンスが存在すること |
| VPC タイプのインスタンスのステータスが「正常」であること | |
| vSwitch | vSwitch が存在すること |
| vSwitch のステータスが「正常」であること | |
| vSwitch に利用可能な IP アドレスが 2 つ以上あること |
クラスタコンポーネント
| 確認項目 | 検証内容 |
|---|---|
| Kube Proxy Master | コンポーネントが存在すること |
| Kube Proxy Worker | コンポーネントが存在すること |
| APIService | 利用不可な APIService が存在しないこと |
コンポーネント確認
個別のコンポーネントをアップグレードする前に、事前アップグレード確認が実行されます。すべてのチェックに合格した場合にのみ、アップグレードが続行されます。
確認項目は、コンポーネントのタイプ、バージョン、ランタイムに応じて異なります。以下に示す表は参考用です。確定的な情報源は、ACK コンソール内の確認ページです。
| コンポーネント | 確認項目 | 検証内容 |
|---|---|---|
| cloud-controller-manager | Addon_CCM | コンポーネントのアップグレードにより SLB の変更が発生しないこと |
| Component_Block_Version | CCM のバージョンをアップグレードできること | |
| csi-plugin | DaemonSet_Annotation | DaemonSet のアノテーションが期待通りであること |
| Csi_Driver_Attributes | Container Storage Interface (CSI) Driver のプロパティが要件を満たしていること | |
| csi-provisioner | Stateful_Set_Exist | リソースが StatefulSet であること |
| Deployment_Annotation | Deployment のアノテーションが期待通りであること | |
| Storage_Class_Attributes | StorageClass のプロパティが要件を満たしていること | |
| nginx-ingress-controller | Deployment_Healthy | Nginx Ingress Deployment が健全であること |
| Deployment_Not_Under_HPA | Deployment に対して Horizontal Pod Autoscaler (HPA) が設定されていないこと | |
| Deployment_Not_Modified | Deployment が変更されていないこと | |
| Nginx_Ingress_Pod_Error_Log | Nginx にエラーログがないこと | |
| LoadBalancer_Service_Healthy | Nginx サービスは正常です | |
| Nginx_Ingress_Configuration | Ingress に互換性のない構成がないこと | |
| aliyun-acr-credential-helper | RamRole_Exist | コンポーネントに AliyunCSManagedAcrRole RAM ロールが付与されていること |
| ack-cost-exporter | RamRole_Exist | コンポーネントに AliyunCSManagedCostRole RAM ロールが付与されていること |
失敗した確認の修正
以下の表には、一般的な確認失敗事例とその解決方法が記載されています。
| 失敗した確認 | 解決方法 |
|---|---|
| コンポーネントのバージョンが低すぎる | コンポーネントをアップグレードします。「コンポーネントの管理」をご参照ください。 |
| APIService が利用不可 | 以下の手順に従ってください。 |
| クラスタに非推奨 API が含まれている | 「非推奨 API」をご参照ください。 |
利用不可な APIService の解決手順:
利用不可な APIService を特定します。
kubectl -n kube-system get apiservices | grep -i false該当の APIService がまだ必要かどうかを確認します。
重要誤って APIService を削除すると、クラスタに例外が発生する可能性があります。作業を実行する前に、APIService の目的を必ず確認してください。
該当の APIService が不要である場合は、削除します。
kubectl -n kube-system delete apiservices ${your-abnormal-apiservice-name}
非推奨 API
Kubernetes 1.20 以降のクラスタでは、事前アップグレード確認時に、前日分の監査ログをスキャンして非推奨 API の使用状況を検出します。確認結果には、ご利用のクラスタで使用されている非推奨 API が一覧表示されます。
非推奨 API の検出仕組み
Kubernetes 1.20 から 1.22 へアップグレードする際、システムは 1.20 クラスタの監査ログをスキャンし、非推奨 API を検出します。
非推奨 API が検出された場合、確認結果は通知のみとなり、アップグレードはブロックされません。
1.22 へのアップグレード後に非推奨 API を継続して使用すると、セキュリティリスクが発生する可能性があります。
非推奨 API の通知はアップグレードをブロックしません。クラスタがアップグレードされた後、非推奨 API のリソースは新しいリソースに置き換えられます。アップグレード後は、非推奨 API を使用してリソースを作成しないでください。
非推奨 API のカテゴリ
非推奨 API は、リクエスト元(User Agent)に基づいてカテゴリ分けされます。カテゴリを活用して、発生源を特定し、適切な対応を行ってください。
| カテゴリ | 説明 | 例 | 必要な操作 |
|---|---|---|---|
| core | Core Kubernetes コンポーネント。ACK では、クラスタアップグレード時に自動的にアップグレードされます。 | apiserver、scheduler、kube-controller-manager | なし — 確認ページには表示されません |
| ack | ACK が管理するコンポーネント。ACK が表示し、アップグレードを案内します。 | metrics-server、nginx-ingress-controller、coredns | [操作] > [アドオン] を介して、ACK コンソール |
| opensource | オープンソースコミュニティのコンポーネント。ACK では一部のみを表示します。認識できないコンポーネントは unknown に分類されます。 | rancher、elasticsearch-operator | 必要に応じてアップグレードします。 |
| unknown | ソースが認識できないコンポーネント。 | kubectl、agent、Go-http-client、okhttp | 必要に応じてアップグレードします。 |
非推奨 API の警告を解消するための ACK コンポーネントのアップグレード
ACK コンソールの 操作 > アドオン から ACK コンポーネントをアップグレードできます。これらのコンポーネントの非推奨 API 警告は、アップグレード完了後の翌日に解消されます。ACKコンソール
確認結果に coredns が含まれる場合、CoreDNS コンポーネントは Kubernetes 1.24 以降のクラスタで非推奨 API を使用することがあります。詳細については、「なぜ CoreDNS が非推奨 API を使用しているのですか?」をご参照ください。