Container Service for Kubernetes (ACK) クラスターのアップグレード、移行、またはコンポーネントのアップグレードを妨げる事前チェックの失敗を解決する方法を説明します。
チェックの種類
ACK は、3 種類の事前チェックを実行します:
| チェックの種類 | 実行タイミング | 適用対象 |
|---|---|---|
| クラスターアップグレードチェック | クラスターのアップグレード前 | すべてのクラスタータイプ |
| クラスター移行チェック | クラスターの移行前 | ACK Serverless Basic Edition から ACK Serverless Pro へ |
| コンポーネントチェック | コンポーネントのアップグレード前 | 個別のコンポーネント |
クラスターアップグレードチェック
ACK は、クラスターをアップグレードする前に、非推奨 API、コンポーネントのバージョン制約、ランタイムの変更をチェックします。アップグレードは、すべてのチェックに合格した後にのみ続行されます。
チェックは、次の 2 つのカテゴリを対象としています:
-
クラスターリソース:Server Load Balancer (SLB) インスタンスや Virtual Private Cloud (VPC) ネットワークなどのクラウドリソース。
-
クラスターコンポーネント:コンポーネント設定、アプリケーション設定、非推奨 API の使用状況。
チェック項目は、クラスターのタイプ、バージョン、ランタイムによって異なります。詳細については、ACK コンソールのチェックページをご確認ください。
クラスターリソース
| チェック項目 | 検証内容 |
|---|---|
| [APIServer SLB] | SLB インスタンスが存在すること |
| SLB インスタンスのステータスが正常であること | |
| SLB リスナーの設定 (ポートおよびプロトコル) が有効であること | |
| SLB バックエンドサーバーグループの設定が有効であること | |
| SLB アクセス制御の設定が正しいこと (設定されていない場合は合格) | |
| [VPC] | VPC インスタンスが存在すること |
| VPC インスタンスのステータスが正常であること | |
| [vSwitch] | vSwitch が存在すること |
| vSwitch のステータスが正常であること | |
| vSwitch に少なくとも 2 つの利用可能な IP アドレスがあること |
クラスターコンポーネント
| チェック項目 | 検証内容 |
|---|---|
| [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 は、ACK Serverless Basic Edition から ACK Serverless Pro に移行する前にクラスターをチェックします。移行は、すべてのチェックに合格した後にのみ続行されます。
チェックは、次の 2 つのカテゴリを対象としています:
-
クラスターリソース:クラスターで使用される SLB インスタンスおよび VPC ネットワーク。
-
クラスターコンポーネント:利用不可の APIService が存在するかどうかを含む、コンポーネント設定。
チェック項目は、クラスターのタイプ、バージョン、ランタイムによって異なります。詳細については、ACK コンソールのチェックページをご確認ください。
クラスターリソース
| チェック項目 | 検証内容 |
|---|---|
| [APIServer SLB] | SLB インスタンスが存在すること |
| SLB インスタンスのステータスが正常であること | |
| SLB リスナーの設定 (ポートおよびプロトコル) が有効であること | |
| SLB バックエンドサーバーグループの設定が有効であること | |
| SLB アクセス制御の設定が正しいこと (設定されていない場合は合格) | |
| [VPC] | VPC タイプのインスタンスが存在すること |
| VPC タイプのインスタンスのステータスが正常であること | |
| [vSwitch] | vSwitch が存在すること |
| vSwitch のステータスが正常であること | |
| vSwitch に少なくとも 2 つの利用可能な IP アドレスがあること |
クラスターコンポーネント
| チェック項目 | 検証内容 |
|---|---|
| [Kube Proxy Master] | コンポーネントが存在すること |
| [Kube Proxy Worker] | コンポーネントが存在すること |
| [APIService] | 利用不可の APIService が存在しないこと |
コンポーネントチェック
ACK は、各コンポーネントをアップグレードする前にチェックします。アップグレードは、すべてのチェックに合格した後にのみ続行されます。
チェック項目は、コンポーネントのタイプ、バージョン、ランタイムによって異なります。詳細については、ACK コンソールのチェックページをご確認ください。
| コンポーネント | チェック項目 | 検証内容 |
|---|---|---|
| cloud-controller-manager | Addon_CCM | コンポーネントをアップグレードしても SLB に変更がないこと |
| Component_Block_Version | CCM のバージョンをアップグレードできること | |
| csi-plugin | DaemonSet_Annotation | DaemonSet のアノテーションが期待どおりであること |
| Csi_Driver_Attributes | Container Storage Interface (CSI) ドライバーのプロパティが要件を満たしていること | |
| 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 Ingress の Pod にエラーログがないこと | |
| LoadBalancer_Service_Healthy | LoadBalancer タイプのサービスが正常であること | |
| 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 が不要になった場合は、削除します。
kubectl -n kube-system delete apiservices ${your-abnormal-apiservice-name}
非推奨 API
Kubernetes 1.20 以降を実行しているクラスターの場合、アップグレード前のチェックで前日の監査ログをスキャンし、非推奨 API の使用を検出します。
非推奨 API の検出方法
Kubernetes 1.20 から 1.22 にアップグレードする際、システムは 1.20 クラスターの監査ログをスキャンして、非推奨 API を検出します:
-
非推奨 API が見つかった場合、結果は通知のみとなり、アップグレードはブロックされません。
-
1.22 にアップグレードした後も非推奨 API を使用し続けると、セキュリティ上のリスクが生じる可能性があります。
非推奨 API の通知は、アップグレードをブロックしません。アップグレード後、非推奨 API リソースは新しいものに置き換えられます。その後、非推奨 API を使用してリソースを作成しないでください。
非推奨 API のカテゴリ
非推奨 API は、リクエストソース (ユーザーエージェント) によって分類されます。
| カテゴリ | 説明 | 例 | 必要なアクション |
|---|---|---|---|
| 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 | 必要に応じてアップグレードします |
ACK コンポーネントのアップグレードによる非推奨 API 警告の解消
ACK コンソールで [操作] > [アドオン] に移動してコンポーネントをアップグレードします。これらのコンポーネントに関する非推奨APIの警告は、アップグレードの翌日に解消されます。ACKコンソール
チェック結果に coredns が含まれている場合、CoreDNS は Kubernetes 1.24 以降で非推奨 API を使用している可能性があります。詳細については、「CoreDNS が非推奨 API を使用している理由」をご参照ください。