Container Service for Kubernetes (ACK) は、クラスター更新チェック、クラスター移行チェック、コンポーネントチェック、およびノードプールチェックをサポートしています。 このトピックでは、クラスターチェック項目について説明し、クラスターの問題を修正する方法について提案します。
目次
クラスターチェック項目
クラスター更新チェック
Kubernetesは複雑です。 新しいKubernetesバージョンでは、ランタイムを変更したり、特定のKubernetes APIを廃止したり、新しい機能を導入したりすることができます。 これらの更新により、クラスターを更新するときに高いリスクが存在します。 クラスターをスムーズに更新できるように、ACKはクラスター更新チェック機能を提供します。 事前チェックは、クラスターが更新される前に自動的にトリガーされます。 クラスターが事前チェックに合格した場合にのみ、クラスターが更新されます。
クラスター更新チェックは、次のチェックで構成されます。
クラスターリソースチェック: Server Load Balancer (SLB) インスタンス、Elastic Compute Service (ECS) インスタンス、仮想プライベートクラウド (VPC) など、ACKクラスターに関連するクラウドリソースをチェックします。
クラスターコンポーネントチェック: ACKクラスター、コンポーネント、およびアプリケーションの設定を確認します。 たとえば、システムは、コンポーネントバージョンが要件を満たしているかどうか、またはアプリケーションが非推奨のAPIを使用しているかどうかをチェックします。
クラスタ構成チェック: ACKクラスタ内のノードに関連する構成をチェックします。 クラスター構成チェックを実行するには、各ノードにポッドを作成して情報を収集する必要があります。
クラスター更新チェック項目は、クラスターのタイプ、ランタイム、バージョンによって異なります。 次の表のチェック項目は参照用です。 コンソールの実際のチェック項目が優先されます。
タイプ | チェックアイテム | 説明 |
クラスターリソース | APIServer SLB | SLBインスタンスが存在するかどうかを確認します。 |
SLBインスタンスのステータスが正常かどうかを確認します。 | ||
リスナーのポートやプロトコルなど、SLBリスナーの設定が有効かどうかを確認します。 | ||
SLBバックエンドサーバーグループの設定が有効かどうかを確認します。 | ||
SLBアクセス制御の設定が有効かどうかを確認します。 アクセス制御が設定されていない場合、このチェック項目は正常と表示されます。 | ||
VPC | VPCが存在するかどうかを確認します。 | |
VPCのステータスが正常かどうかを確認します。 | ||
vSwitch | vSwitchが存在するかどうかを確認します。 | |
vSwitchのステータスが正常かどうかを確認します。 | ||
vSwitchが2つ以上のアイドルIPアドレスを提供できるかどうかを確認します。 | ||
ECS | ECSインスタンスが存在するかどうかを確認します。 | |
ECSインスタンスのステータスが正常かどうかを確認します。 | ||
ECSインスタンスのセキュリティグループが正常かどうかを確認します。 | ||
ECSインスタンスの有効期限が切れているかどうかを確認します。 | ||
ECSインスタンスのインスタンスタイプが要件を満たしているかどうかを確認します。 | ||
Cloud Assistantクライアントのステータスが正常かどうかを確認します。 | ||
クラスターコンポーネント | Kube Proxyマスター | コンポーネントが存在するかどうかを確認します。 |
Kubeプロキシワーカー | コンポーネントが存在するかどうかを確認します。 | |
APIサービス | 利用できないAPIサービスが存在するかどうかを確認します。 | |
クラスターインスタンス | クラスター内のマスターインスタンスの数が3つであるか5つであるかを確認します。 | |
クラスターコンポーネント | Terwayのバージョンが要件を満たしているかどうかを確認します。 | |
CoreDNSのバージョンが要件を満たしているかどうかを確認します。 | ||
クラウドコントローラマネージャのバージョンが要件を満たしているかどうかを確認します。 | ||
NGINX Ingressコントローラーのバージョンが要件を満たしているかどうかを確認します。 | ||
ACK仮想ノードのバージョンが要件を満たしているかどうかを確認します。 | ||
メトリックサーバーのバージョンが要件を満たしているかどうかを確認します。 | ||
ノード | ノードのIPアドレスが存在するかどうかを確認します。 | |
ノードがスケジュール可能かどうかを確認します。 | ||
ノードの準備ができているかどうかを確認します。 | ||
ノードのオペレーティングシステムを更新できるかどうかを確認します。 | ||
ノードで使用可能なポッドの数が2より大きいかどうかをチェックします。 | ||
非推奨API | クラスターが非推奨APIを使用しているかどうかを確認します。 | |
クラスター設定 | iptables設定 | iptables設定が有効かどうかを確認します。 |
オペレーティングシステム | オペレーティングシステムを更新できるかどうかを確認します。 | |
yum | Yumが正常かどうかを確認します。 | |
ディスク | ノードのファイルシステムが正常かどうかを確認します。 | |
ノードの空きディスク容量が合計ディスク容量の5% を超えているかどうかを確認します。 | ||
スワップ | ノードのスワップが有効かどうかを確認します。 | |
NTP | ノードのNTPが正常かどうかを確認します。 | |
システム化 | ノードのSystemdバージョンがsystemd-219-67以降であるかどうかをチェックします。 | |
Kubelet | kubelet設定が要件を満たしているかどうかを確認します。 | |
コンテナランタイム | DockerランタイムまたはContainerdランタイムが正常かどうかを確認します。 | |
カーネル構成 | ノードのカーネル構成が正常かどうかを確認します。 | |
マニフェストの設定 | マニフェストファイルが要件を満たしているかどうかを確認します。 |
クラスター移行チェック
事前チェックは、クラスターが移行される前に自動的にトリガーされます。 クラスターが事前チェックに合格した場合にのみ、クラスターが移行されます。 クラスター移行チェックは、次のシナリオに適しています。
ACK専用クラスターからACK Proクラスターに移行します。
ACK BasicクラスターからACK Proクラスターに移行します。
クラスター移行チェックは、次のチェックで構成されます。
クラスターリソースチェック: SLBインスタンス、ECSインスタンス、VPCなど、ACKクラスターに関連するクラウドリソースをチェックします。
クラスターコンポーネントチェック: ACKクラスター内のコンポーネントの設定をチェックします。 たとえば、システムは利用できないAPIサービスが存在するかどうかをチェックします。
クラスタ構成チェック: ACKクラスタ内のノードに関連する構成をチェックします。 クラスター構成チェックを実行するには、各ノードにポッドを作成して情報を収集する必要があります。
コンポーネントの使用: ACK専用クラスターからACK Proクラスターに移行すると、一部のコンポーネントはACKによって管理されます。 したがって、移行前にこれらのコンポーネントが正常かどうかを確認します。
クラスター移行チェック項目は、クラスターのタイプ、ランタイム、バージョンによって異なります。 次の表のチェック項目は参照用です。 コンソールの実際のチェック項目が優先されます。
タイプ | チェックアイテム | 説明 |
クラスターリソース | APIServer SLB | SLBインスタンスが存在するかどうかを確認します。 |
SLBインスタンスのステータスが正常かどうかを確認します。 | ||
リスナーのポートやプロトコルなど、SLBリスナーの設定が有効かどうかを確認します。 | ||
SLBバックエンドサーバーグループの設定が有効かどうかを確認します。 | ||
SLBアクセス制御の設定が正常かどうかを確認します。 アクセス制御が設定されていない場合、このチェック項目は正常と表示されます。 | ||
VPC | VPCが存在するかどうかを確認します。 | |
VPCのステータスが正常かどうかを確認します。 | ||
vSwitch | vSwitchが存在するかどうかを確認します。 | |
vSwitchのステータスが正常かどうかを確認します。 | ||
vSwitchが2つ以上のアイドルIPアドレスを提供できるかどうかを確認します。 | ||
ECS | ECSインスタンスが存在するかどうかを確認します。 | |
ECSインスタンスのステータスが正常かどうかを確認します。 | ||
ECSインスタンスのセキュリティグループが正常かどうかを確認します。 | ||
Cloud Assistantクライアントのステータスが正常かどうかを確認します。 | ||
クラスターコンポーネント | Kube Proxyマスター | コンポーネントが存在するかどうかを確認します。 |
Kubeプロキシワーカー | コンポーネントが存在するかどうかを確認します。 | |
APIサービス | 利用できないAPIサービスが存在するかどうかを確認します。 | |
クラスターインスタンス | クラスター内のマスターインスタンスの数が3つであるか5つであるかを確認します。 | |
ノード | ノードのIPアドレスが存在するかどうかを確認します。 | |
ノードがスケジュール可能かどうかを確認します。 | ||
ノードの準備ができているかどうかを確認します。 | ||
ノードのオペレーティングシステムを更新できるかどうかを確認します。 | ||
ノードで使用可能なポッドの数が2より大きいかどうかをチェックします。 | ||
クラスター設定 | オペレーティングシステム | オペレーティングシステムを更新できるかどうかを確認します。 |
yum | Yumが正常かどうかを確認します。 | |
コンポーネントの使用 | Cloud Controller Manager | クラウドコントローラマネージャが正常かどうかを確認します。 |
コンポーネントチェック
コンポーネントのチェックは、コンポーネントの更新シナリオに適しています。 事前チェックは、コンポーネントが更新される前に自動的にトリガーされます。 コンポーネントは、クラスターが事前チェックに合格した場合にのみ更新されます。
コンポーネントのチェック項目は、クラスターのタイプ、ランタイム、バージョンによって異なります。 次の表のチェック項目は参照用です。 コンソールの実際のチェック項目が優先されます。
タイプ | チェックアイテム | 説明 |
cloud-controller-manager | Addon_CCM | 更新によってSLBが変更されるかどうかを確認します。 |
Component_Block_Version | クラウドコントローラマネージャを更新できるかどうかを確認します。 | |
csi-plugin | DaemonSet_アノテーション | DaemonSetのアノテーションが要件を満たしているかどうかを確認します。 |
Csi_Driver_Attributes | CSIドライバ属性が要件を満たすかどうかをチェックします。 | |
Node_Status_Ready | ノードの準備ができているかどうかを確認します。 | |
csi-provisioner | Stateful_Set_Exist | リソースがStatefulSetであるかどうかをチェックします。 |
Deployment_Annotation | 展開のアノテーションが要件を満たしているかどうかを確認します。 | |
Storage_Class_Attributes | StorageClass属性が要件を満たしているかどうかをチェックします。 | |
Csi_Provisioner_Node_Count | レディノードの数が2以上かどうかをチェックします。 | |
terway-eniip | システム化 | ノードのSystemdバージョンがsystemd-219-67以降であるかどうかをチェックします。 |
nginx-ingress-controller | Deployment_Healthy | NGINX Ingress Deploymentが正常かどうかをチェックします。 |
Deployment_Not_Under_HPA | デプロイ用に水平ポッド自動スケーラー (HPA) が設定されているかどうかを確認します。 | |
Deployment_Not_Modified | デプロイメントが変更されたかどうかをチェックします。 | |
Nginx_Ingress_Pod_Error_Log | NGINXエラーログが生成されているかどうかを確認します。 | |
LoadBalancer_Service_Healthy | NGINXサービスが正常かどうかをチェックします。 | |
Nginx_Ingress_Configuration | Ingressに互換性のない構成が存在するかどうかを確認します。 | |
aliyun-acr-credential-helper | RamRole_Exist | コンポーネントにAliyunCSManagedAcrRoleロールが割り当てられているかどうかを確認します。 |
ack-cost-exporter | RamRole_Exist | コンポーネントにAliyunCSManagedCostRoleロールが割り当てられているかどうかを確認します。 |
ノードプールチェック
ノードプールのチェックは、ノードプールの更新シナリオに適しています。 事前チェックは、ノードプールが更新される前に自動的にトリガーされます。 ノードプールが事前チェックに合格した場合にのみ、ノードプールが更新されます。
ノードプールチェックは、次のチェックで構成されます。
クラスターリソースチェック: SLBインスタンスやVPCなど、ACKクラスターに関連するクラウドリソースをチェックします。
クラスターコンポーネントのチェック: ACKクラスター、ノード、およびアプリケーションの設定をチェックします。
クラスタ構成チェック: ACKクラスタ内のノードに関連する構成をチェックします。 クラスター構成チェックを実行するには、各ノードにポッドを作成して情報を収集する必要があります。
ノードプールのチェック項目は、クラスターのタイプ、ランタイム、バージョンによって異なります。 次の表のチェック項目は参照用です。 コンソールの実際のチェック項目が優先されます。
タイプ | チェックアイテム | 説明 |
クラスターリソース | APIServer SLB | SLBインスタンスが存在するかどうかを確認します。 |
SLBインスタンスのステータスが正常かどうかを確認します。 | ||
リスナーのポートやプロトコルなど、SLBリスナーの設定が有効かどうかを確認します。 | ||
SLBバックエンドサーバーグループの設定が有効かどうかを確認します。 | ||
SLBアクセス制御の設定が有効かどうかを確認します。 アクセス制御が設定されていない場合、このチェック項目は正常と表示されます。 | ||
VPC | VPCが存在するかどうかを確認します。 | |
VPCのステータスが正常かどうかを確認します。 | ||
vSwitch | vSwitchが存在するかどうかを確認します。 | |
vSwitchのステータスが正常かどうかを確認します。 | ||
vSwitchが2つ以上のアイドルIPアドレスを提供できるかどうかを確認します。 | ||
クラスターコンポーネント | APIサービス | 利用できないAPIサービスが存在するかどうかを確認します。 |
クラスターインスタンス | クラスター内のマスターインスタンスの数が3つであるか5つであるかを確認します。 | |
ノード | ノードの準備ができているかどうかを確認します。 | |
ノードで使用可能なポッドの数が2より大きいかどうかをチェックします。 | ||
HostPath | hostPathを使用するポッドがノードに存在するかどうかをチェックします。 | |
クラスター設定 | iptables設定 | iptables設定が有効かどうかを確認します。 |
オペレーティングシステム | オペレーティングシステムを更新できるかどうかを確認します。 | |
yum | Yumが正常かどうかを確認します。 | |
ディスク | ノードのファイルシステムが正常かどうかを確認します。 | |
ノードの空きディスク領域 | ノードの空きディスク容量が合計ディスク容量の5% を超えているかどうかを確認します。 | |
スワップ | ノードのスワップが有効かどうかを確認します。 | |
NTP | ノードのNTPが正常かどうかを確認します。 | |
システム化 | ノードのSystemdバージョンがsystemd-219-67以降であるかどうかをチェックします。 | |
Kubelet | kubelet設定が要件を満たしているかどうかを確認します。 | |
コンテナランタイム | DockerランタイムまたはContainerdランタイムが正常かどうかを確認します。 | |
カーネル構成 | ノードのカーネル構成が正常かどうかを確認します。 | |
マニフェストの設定 | マニフェストファイルが要件を満たしているかどうかを確認します。 |
クラスターの問題を修正する方法に関する提案
問題 | 提案 |
ロールAliyun_ARMS_CMonitor_Roleがありません | Prometheusのマネージドサービスに対するクラスター権限を付与します。 Application Real-Time Monitoring Service (ARMS) およびTracing Analysisに対する権限を手動で付与する方法の詳細については、「KubernetesクラスターのKubernetesモニタリングの有効化」をご参照ください。 |
古いSystemdバージョン | |
古いコンポーネントバージョン | コンポーネントを更新します。 詳細については、「コンポーネントの管理」をご参照ください。 |
Yumタイムアウト | 次のコマンドを実行して、Yumがタイムアウトするかどうかを確認します。 デフォルトのタイムアウト時間は10秒です。
|
利用できないAPIサービス |
|
hostPathを使用したポッド | システムがシステムディスクを交換してノードを更新するときに、ノード上のポッドがhostPathを使用してコンテナーディレクトリをホストにマウントすると、データが失われる可能性があります。 ポッドによってマウントされているディレクトリを確認する必要があります。 hostPathが使用されていない場合、またはデータ損失のリスクがない場合は、更新を続行できます。 チェック結果は参考用です。 |
非推奨APIの使用 | 廃止されたAPIを使用するリソースを特定し、それに応じてアクションを実行します。 詳細については、「非推奨API」をご参照ください。 |
非推奨API
クラスターがKubernetes 1.20以降を実行する場合、事前チェックは、クラスターで非推奨のAPIが使用されているかどうかを確認します。 チェックレポートでは、クラスターで使用されている非推奨のAPIを表示できます。
たとえば、クラスターをKubernetes 1.20からKubernetes 1.22に更新する前に、前日に生成された監査ログをスキャンして、クラスターで非推奨のAPIが使用されているかどうかを確認します。
事前チェックの結果は参照用です。 クラスターがKubernetes 1.20を実行し、非推奨のAPIを使用している場合でも、更新を続行できます。
Kubernetes 1.22で廃止されたAPIを引き続き使用すると、潜在的なセキュリティリスクが存在する可能性があります。
次の表に、廃止予定のAPIの種類を示します。 非推奨APIを使用するクラスターを更新する前に、次の表の [タイプ] 列を参照し、クラスターで使用される非推奨APIのタイプに対応する操作を実行することを推奨します。
タイプ | 提案 | 例 |
core | キーKubernetesコンポーネント: ACKはキーKubernetesコンポーネントを自動的に更新します。 コンポーネントを更新する必要はありません。 コンポーネントに関する情報は、事前チェックページに表示されません。 | apiserver、scheduler、およびkube-controller-manager |
ack | ACKコンポーネント: ACKコンポーネントは手動更新が必要です。 ACKコンソールの [アドオン] ページの指示に基づいて、ACKコンポーネントを更新できます。 説明
| metrics-server、nginx-ingress-controller、およびcoredns |
オープンソース | オープンソースコンポーネント: 一部のオープンソースコンポーネントはACKコンソールに一覧表示されます。 コンポーネントを更新するかどうかを決定できます。 これらのコンポーネントは手動でのみ更新できます。 他のオープンソースコンポーネントは、未知のタイプに分類され得る。 説明 事前チェック結果の非推奨APIは参照用です。 クラスターが非推奨のAPIを使用している場合でも、更新を続行できます。 ビジネス要件に基づいてコンポーネントを更新します。 | rancher and elasticsearch-オペレーター |
不明 | 不明なソース: 上記のタイプに属さない非推奨APIは、不明なリソースと見なされ、ACKコンソールに一覧表示されます。 コンポーネントを更新するかどうかを決定できます。 これらのコンポーネントは手動でのみ更新できます。 説明 事前チェック結果の非推奨APIは参照用です。 クラスターが非推奨のAPIを使用している場合でも、更新を続行できます。 ビジネス要件に基づいてコンポーネントを更新します。 | kubectl、agent、Go-http-client、およびokhttp |
次の操作を実行して、廃止されたAPIに関する情報を表示します。
[クラスターのアップグレード] ページで、[事前チェック] をクリックし、[詳細の表示] をクリックします。
[レポート] ページで、[クラスターコンポーネント] タブをクリックし、[トラブルシューティング] タブをクリックします。
Deprecated Kubernetes APIの横にあるボタンをクリックします。
表示されるダイアログボックスで、[非推奨Kubernetes API] をクリックし、下のリンクをクリックします。
[廃止されたKubernetes API] ページで、廃止されたAPIに関する情報を表示できます。