すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:リスクの高い操作に関する使用法のメモと指示

最終更新日:Nov 14, 2024

Container Service for Kubernetes (ACK) は、Kubernetesの技術アーキテクチャや主要コンポーネントを管理する必要なく、Kubernetesを実行するために使用できるマネージドサービスです。 これにより、サービスのダウンタイムや中断の原因となる制御プレーンコンポーネントの構成ミスを心配する必要がなくなります。 ACKを使用するときに発生する可能性のあるリスクを完全に理解するには、このトピックを読むことをお勧めします。

目次

項目

関連ドキュメント

使用上の注意

ハイリスク操作

使用上の注意

データプレーンコンポーネント

データプレーンコンポーネントは、Elastic Compute Service (ECS) インスタンスで実行されるシステムコンポーネントです。 データプレーンコンポーネントには、CoreDNS、Ingress、kube-proxy、Terway、およびkubeletが含まれます。 つまり、ユーザーとACKは、データプレーンコンポーネントの安定性を確保する責任を共有します。

ACKは、データプレーンコンポーネントに次の機能を提供します。

  • カスタムコンポーネントの構成、定期的なコンポーネントの最適化、バグの修正、共通の脆弱性と露出 (CVE) パッチ、および関連するドキュメントを含む管理およびメンテナンス機能。

  • モニタリング機能とアラート機能を提供し、主要コンポーネントのログファイルを生成することで、コンポーネントを観察することができます。

  • コンポーネントがデプロイされているクラスターのサイズに基づいたコンポーネント設定のベストプラクティスと提案。

  • 定期的なコンポーネントの検査とアラート。 検査項目は、コンポーネントバージョン、コンポーネント構成、コンポーネントロード、コンポーネントトポロジ、およびコンポーネントポッドの数を含むが、これらに限定されない。

データプレーンコンポーネントを使用する場合は、次の提案に従うことを推奨します。

  • 最新のコンポーネントバージョンを使用します。 新しいリリースには、バグ修正と新機能が含まれる場合があります。 新しいコンポーネントバージョンがリリースされたら、ユーザーガイドに記載されている手順に基づいて、コンポーネントを更新する適切な時期を選択します。 これにより、古いコンポーネントによって引き起こされる問題を防ぐことができます。 詳細については、「コンポーネントの概要」をご参照ください。

  • ACKのアラートセンターでアラート連絡先のメールアドレスと携帯電話番号を指定します。 次に、通知方法を指定します。 Alibaba Cloudは、指定された通知方法を使用して、アラートと通知を送信できます。 詳細については、「アラート管理」をご参照ください。.

  • コンポーネントの安定性リスクを通知するアラートを受け取ったら、指示に従って、できるだけ早い機会にリスクを軽減してください。

  • カスタムコンポーネントパラメーターを設定する場合は、ACK APIを呼び出すか、ACKコンソールのクラスターの [操作] > [アドオン] ページに移動することを推奨します。 他のメソッドを使用して変更されたカスタムコンポーネントパラメータは、コンポーネントの誤動作を引き起こす可能性があります。 詳細については、「コンポーネントの管理」をご参照ください。

  • Infrastructure as a Service (IaaS) サービスのAPIを使用して、データプレーンコンポーネントの環境を変更しないでください。 たとえば、データプレーンコンポーネントが実行されているECSインスタンスのステータスを変更したり、ワーカーノードのセキュリティグループやネットワーク設定を変更したりするためにECS APIを使用しないでください。 Server Load Balancer (SLB) APIを使用して、クラスターで使用されるSLBインスタンスの設定を変更しないでください。 IaaSリソースを不適切に変更すると、コンポーネントが誤動作する可能性があります。

  • 一部のデータプレーンコンポーネントは、オープンソースバージョンからバグや脆弱性を継承する場合があります。 ビジネスの安定性を確保するために、ACKが更新バージョンを提供する場合は、コンポーネントを更新することを推奨します。

クラスターの更新

ACKのクラスター更新機能を使用して、KubernetesバージョンのACKクラスターを更新します。 他の方法は、安定性または互換性の問題を引き起こし得る。 詳細については、「手動でACKクラスターをアップグレード」をご参照ください。

ACKは、クラスターの更新をサポートする次の機能を提供します。

  • ACKクラスターのバージョン更新。

  • ACKクラスターがバージョン更新の条件を満たしていることを確認するための更新前チェック。

  • 新しいKubernetesバージョンについて説明し、新しいバージョンと以前のバージョンを比較するリリースノート。

  • バージョン更新によるリソースの変更によって発生する可能性のあるリスクを通知する更新前の通知。

クラスター更新機能を使用する場合は、次の提案に従うことを推奨します。

  • 更新を実行する前に、事前チェックを実行し、特定された問題を修正することを推奨します。

  • 新しいKubernetesバージョンのリリースノートを読んで理解してください。 ACKによって報告された更新リスクに基づいて、クラスターとワークロードのステータスを確認します。 次に、クラスターの更新の影響を評価します。 詳細については、「ACKでサポートされているKubernetesバージョンの概要」をご参照ください。

  • クラスターの更新はロールバックできません。 クラスターを更新する前に、更新の準備をし、バックアップ計画があることを確認してください。

  • クラスターで使用されているKubernetesバージョンがACKによって廃止される前に、クラスターを最新のKubernetesバージョンに更新します。 詳細については、「Kubernetesバージョンのサポート」をご参照ください。

Kubernetes設定

  • キーKubernetesの設定は変更しないでください。 たとえば、次のディレクトリを変更したり、ディレクトリ内のファイルのパス、リンク、内容を変更したりしないでください。

    • /var/lib/kubelet

    • /var/lib/docker

    • /etc/kubernetes

    • /etc/kubeadm

    • /var/lib/containerd

  • YAMLテンプレートでKubernetesによって予約されたアノテーションを使用しないでください。 そうしないと、アプリケーションがリソースの検索やリクエストの送信に失敗し、異常な動作をする可能性があります。 プレフィックスがkubernetes.io/ またはk8s.io/ のラベルは、キーコンポーネント用に予約されています。 例: pv.kubernetes.io/bind-completed: "yes"

ACKサーバーレスクラスター

次のシナリオでは、ACKサーバーレスクラスターは補償条項の対象外です。

  • クラスターのO&Mを簡素化するために、ACKサーバーレスクラスターにはフルマネージド型のシステムコンポーネントが用意されています。 ACK Serverlessは、フルマネージドのシステムコンポーネントで使用されているKubernetesリソースの誤った削除などのユーザーエラーによるビジネス上の損失に対して責任を負いません。

クラスター登録

  • ACKコンソールで外部KubernetesクラスターをACKで登録する場合、クラスターとAlibaba Cloud間のネットワーク接続が安定していることを確認します。

  • ACKを使用すると、外部Kubernetesクラスターを登録できますが、外部クラスターの安定性が保証されず、これらのクラスターでの誤った操作を防ぐことはできません。 クラスター登録プロキシを使用して外部クラスター内のノードのラベル、アノテーション、およびタグを設定する場合は、注意して続行してください。 不適切な設定により、アプリケーションが誤動作する可能性があります。

アプリカタログ

ACKのアプリケーションマーケットプレイスは、オープンソースバージョンに基づいて開発されたアプリケーションをインストールするのに役立つアプリカタログ機能を提供します。 ACKは、オープンソースアプリケーションの欠陥を防ぐことはできません。 これらのアプリケーションをインストールするときは注意してください。 詳細については、「App Marketplace」をご参照ください。

リスクの高い操作

以下の操作は、ACKにおける高リスク操作とみなされる。 不適切な使用は安定性の問題を引き起こす可能性があり、厳しい状況ではクラスターが失敗する可能性があります。 これらの操作を実行する前に、次のリスクの高い操作の影響を読んで理解してください。

クラスターに対するリスクの高い操作

カテゴリ

ハイリスク操作

影響

どのように回復する

APIサーバー

APIサーバーの公開に使用されるSLBインスタンスを削除します。

クラスターを管理することはできません。

回復不能だ 新しいクラスターを作成する必要があります。 クラスターの作成方法の詳細については、「ACK管理クラスターの作成」をご参照ください。

ワーカーノード

ノードのセキュリティグループを変更します。

ノードが利用できなくなる場合があります。

元のセキュリティグループにノードを再度追加します。 セキュリティグループは、クラスターの作成時に作成されます。 詳細については、「セキュリティグループ内のECSインスタンスの管理」をご参照ください。

ノードのサブスクリプションが期限切れになるか、ノードが削除されます。

ノードが使用できなくなります。

回復不能だ

ノードOSを再インストールします。

コンポーネントはノードからアンインストールされます。

ノードを削除してから、ノードをクラスターに再度追加します。 詳細については、「ノードの削除」および「既存のECSインスタンスのACKクラスターへの追加」をご参照ください。

コンポーネントのバージョンを更新します。

ノードが利用できなくなる場合があります。

元のコンポーネントバージョンにロールバックします。

ノードのIPアドレスを変更します。

ノードが使用できなくなります。

ノードのIPアドレスを元のIPアドレスに変更します。

kubelet、docker、containerdなどの主要コンポーネントのパラメーターを変更します。

ノードが利用できなくなる場合があります。

ACK公式ドキュメントを参照し、コンポーネントパラメータを設定します。

ノードOSの設定を変更します。

ノードが利用できなくなる場合があります。

設定を復元するか、ワーカーノードを削除してから新しいノードを購入します。

ノードのシステム時刻を変更します。

ノード上のコンポーネントが期待どおりに動作しません。

ノードのシステム時間をリセットします。

ACK専用クラスターのマスターノード

マスターノードのセキュリティグループを変更します。

マスターノードが利用できなくなる場合があります。

元のセキュリティグループにマスターノードを再度追加します。 セキュリティグループは、クラスターの作成時に作成されます。 詳細については、「セキュリティグループ内のECSインスタンスの管理」をご参照ください。

マスターノードのサブスクリプションが期限切れになるか、マスターノードが削除されます。

マスターノードが使用できなくなります。

回復不能だ

ノードOSを再インストールします。

コンポーネントはマスターノードからアンインストールされます。

回復不能だ

マスターノードまたはetcdコンポーネントを更新します。

クラスターが利用できなくなる場合があります。

元のコンポーネントバージョンにロールバックします。

/etc/kubernetesなど、ビジネスクリティカルなデータをノードに格納するディレクトリを削除またはフォーマットします。

マスターノードが使用できなくなります。

回復不能だ

マスターノードのIPアドレスを変更します。

マスターノードが使用できなくなります。

マスターノードのIPアドレスを元のIPアドレスに変更します。

etcd、kube-apiser、dockerなどの主要コンポーネントのパラメーターを変更します。

マスターノードが利用できなくなる場合があります。

ACK公式ドキュメントを参照し、コンポーネントパラメータを設定します。

マスターノードまたはetcdコンポーネントの証明書を置き換えます。

クラスターが利用できなくなる場合があります。

回復不能だ

マスターノードの数を増減します。

クラスターが利用できなくなる場合があります。

回復不能だ

ノードのシステム時刻を変更します。

ノード上のコンポーネントが期待どおりに動作しません。

ノードのシステム時間をリセットします。

その他のサービス

RAM (Resource Access Management) を使用して権限を変更します。

SLBインスタンスなどのリソースの作成に失敗する場合があります。

権限を復元します。

ノードプールでの高リスク操作

ハイリスク操作

影響

どのように回復する

スケーリンググループを削除します。

ノードプール例外が発生します。

回復不能だ 新しいノードプールを作成する必要があります。 ノードプールの作成方法の詳細については、「手順」をご参照ください。

kubectlを使用して、ノードプールからノードを削除します。

ACKコンソールに表示されるノードプール内のノード数は、実際の数とは異なります。

ACK APIを呼び出すか、ノードプールのExpected nodesパラメーターを設定して、ACKコンソールでノードを削除します。 詳細については、「ノードの削除」および「ノードプールの作成」をご参照ください。

ECSインスタンスを手動でリリースします。

ノードプールの詳細ページに誤った情報が表示されることがあります。 ノードプールは、ノードプールの作成時にExpected Nodesパラメーターで設定されます。 ECSインスタンスをリリースすると、ACKは自動的にノードプールをExpected Nodesパラメーターの値にスケールアウトします。

回復不能だ ノードプール内のECSインスタンスをリリースするには、ACKコンソールで、またはACK APIを呼び出して、ノードプールのExpected Nodesパラメーターを設定します。 ECSインスタンスにデプロイされているノードを削除することもできます。 詳細については、「ノードプールの作成」および「ノードの削除」をご参照ください。

自動スケーリングが有効になっているノードプールを手動でスケールインまたはスケールアウトします。

自動スケーリングコンポーネントは、ノードプールを手動でスケールインまたはスケールアウトした後、ノードプール内のノード数を自動的に調整します。

回復不能だ 自動スケーリングが有効になっているノードプールを手動でスケーリングする必要はありません。

スケーリンググループに含めることができるインスタンスの上限または下限を変更します。

スケーリングエラーが発生する可能性があります。

  • 自動スケーリングが無効になっているノードプールの場合、スケーリンググループのインスタンスのデフォルトの上限は2,000、インスタンスのデフォルトの下限は0です。

  • 自動スケーリングが有効になっているノードプールの場合、スケーリンググループのインスタンスの上限と下限が、ノードプールのインスタンスの上限と下限と同じであることを確認します。

ノードのデータをバックアップせずに、既存のノードをクラスターに追加します。

ノードがクラスターに追加されると、ノード上のデータが失われます。

回復不能だ

  • 手動モードで既存のノードを追加する場合は、まずノードのデータをバックアップする必要があります。

  • 自動モードで既存のノードを追加する場合は、ノードがクラスターに追加されるとシステムディスクが置き換えられるため、最初にシステムディスク上のデータをバックアップする必要があります。

業務上重要なデータをシステムディスクに保存します。

ノードプールの自動修復を有効にすると、システムはノード設定をリセットしてノード例外を処理することがあります。 その結果、システムディスク上のデータが失われます。

回復不能だ ビジネスクリティカルなデータをデータディスク、クラウドディスク、Apsara File Storage NAS (NAS) ファイルシステム、またはObject Storage Service (OSS) バケットに保存します。

高リスクのネットワーク操作と負荷分散

ハイリスク操作

影響

どのように回復する

カーネルパラメーター設定net.ipv4.ip_forward=0を指定します。

ネットワーク接続の問題が発生します。

設定をnet.ipv4.ip_forward=1の内容に置き換えます。

次のカーネルパラメーター設定を指定します。

  • net.ipv4.conf.all.rp_filter = 1 | 2

  • net.ipv4.conf.[ethX].rp_filter = 1 | 2

    説明

    ethXは、名前がethで始まるネットワークインターフェイスコントローラーを指定します。

ネットワーク接続の問題が発生します。

設定を次の内容に置き換えます。

  • net.ipv4.conf.all.rp_filter = 0

  • net.ipv4.conf.[ethX].rp_filter = 0

カーネルパラメーター設定net.ipv4.tcp_tw_reuse = 1を指定します。

ポッドはヘルスチェックに合格しません。

設定を次のcontent: net.ipv4.tcp_tw_reuse = 0に置き換えます。

カーネルパラメーター設定net.ipv4.tcp_tw_recycle = 1を指定します。

ネットワークアドレス変換エラーが発生します。

設定をnet.ipv4.tcp_tw_recycle = 0の内容に置き換えます。

カーネルパラメーター設定net.ipv4.ip_local_port_rangeを指定します。

ネットワーク接続の問題が時折発生します。

設定を次の内容に置き換えます。net.ipv4.ip_local_port_range="32768 60999"

Firewalldやufwなどのファイアウォールソフトウェアをインストールします。

コンテナネットワークにアクセスできなくなります。

ファイアウォールソフトウェアをアンインストールし, ノードを再起動してください。

ノードのセキュリティグループが、ポッドCIDRブロックのUDPポート53を開いていません。

DNSはクラスターで期待どおりに機能しません。

ECSの公式ドキュメントを参照し、セキュリティグループの設定を変更して、ポッドCIDRブロックのUDPポート53を開きます。

ACKがSLBインスタンスに追加したタグを変更または削除します。

SLBインスタンスは通常どおり動作しません。

タグを復元します。

インスタンス、リスナー、vServerグループの設定など、ACKで管理されるSLBインスタンスの設定を変更します。

SLBインスタンスは通常どおり動作しません。

SLB設定を復元します。

サービス設定から既存のSLBインスタンスを指定するために使用されるservice.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID} アノテーションを削除します。

SLBインスタンスは通常どおり動作しません。

アノテーションをサービス構成に追加します。

説明

サービスが既存のSLBインスタンスを使用するように設定されている場合、設定を変更してサービスの新しいSLBインスタンスを作成することはできません。 新しいSLBインスタンスを使用するには、新しいサービスを作成する必要があります。

SLBコンソールでACKによって作成されたSLBインスタンスを削除します。

クラスタネットワークでエラーが発生する可能性があります。

SLBインスタンスに関連付けられているサービスを削除して、SLBインスタンスを削除します。 サービスを削除する方法の詳細については、「サービスの削除」をご参照ください。

nginx ingressコントローラーがインストールされているクラスターのkube-system名前空間のNGINX-Ingress-lbサービスを手動で削除します。

NGINX Ingressコントローラーは通常どおり実行されないか、実行を停止する場合があります。

次のYAMLテンプレートを使用して、同じ名前のサービスを作成します。

apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    app: nginx-ingress-lb
  name: nginx-ingress-lb
  namespace: kube-system
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: ingress-nginx
  type: LoadBalancer

ECSノードのDNS設定ファイルでnameserverパラメーターを設定します。 DNS設定ファイルの名前は /etc/resolv.confです。

DNSサーバーが正しく設定されていない場合、DNS解決は失敗する可能性があります。 その結果、クラスターは期待どおりに実行できません。

自己管理DNSサーバーを使用する場合は、CoreDNSでDNSサーバーを設定することを推奨します。 詳細については、「CoreDNSの設定」をご参照ください。

ストレージに対するリスクの高い操作

ハイリスク操作

影響

どのように回復する

ECSコンソールのポッドにマウントされているクラウドディスクのマウントを解除します。

ポッドにデータを書き込むときにI/Oエラーが発生します。

ポッドを再起動し、ノードの残留データを消去します。

ノードのマウントパスからディスクをアンマウントします。

ポッドデータは、ローカルディスクに書き込まれる。

ポッドを再起動します。

ノード上のクラウドディスクを管理します。

ポッドデータは、ローカルディスクに書き込まれる。

回復不能だ

クラウドディスクを複数のポッドにマウントします。

ポッドデータがローカルディスクに書き込まれるか、ポッドにデータを書き込むときにI/Oエラーが発生します。

クラウドディスクを1つのポッドにのみマウントします。

重要

Alibaba Cloudディスクは共有できません。 各ディスクは1つのポッドにのみマウントできます。

ポッドにマウントされているNASディレクトリを手動で削除します。

ポッドにデータを書き込むときにI/Oエラーが発生します。

ポッドを再起動します。

ポッドにマウントされているNASファイルシステムを削除するか、NASファイルシステムのマウントに使用されているマウントターゲットを削除します。

ポッドにデータを書き込むときにI/Oハングが発生します。

ECSインスタンスを再起動します。 ECSインスタンスを再起動する方法の詳細については、「インスタンスの再起動」をご参照ください。

ログに対するリスクの高い操作

ハイリスク操作

影響

どのように回復する

ノード上の /tmp/ccs-log-collector/posディレクトリを削除します。

重複したログが収集されます。

回復不能だ /tmp/ccs-log-collector/posディレクトリには、ログが収集されるパスに関する情報が含まれています。

ノード上の /tmp/ccs-log-collector/bufferディレクトリを削除します。

ログが失われます。

回復不能だ /tmp/ccs-log-collector/bufferディレクトリには、使用する必要のあるキャッシュされたログファイルが格納されます。

aliyunlogconfig CustomResourceDefinition (CRD) オブジェクトを削除します。

ログを収集できません。

削除されたaliyunlogconfig CRDオブジェクトと関連するリソースを再作成します。 aliyunlogconfig CRDオブジェクトが存在しない期間内に生成されたログは収集できません。

aliyunlogconfig CRDオブジェクトを削除すると、関連するログ収集タスクも削除されます。 aliyunlogconfig CRDオブジェクトを再作成した後、ログ収集タスクも再起動する必要があります。

ログコンポーネントをアンインストールします。

ログを収集できません。

ログコンポーネントを再インストールし、手動でaliyunlogconfig CRDオブジェクトを作成します。 ログコンポーネントとaliyunlogconfig CRDオブジェクトが存在しない期間内に生成されたログは収集できません。

ログコンポーネントを削除すると、aliyunlogconfig CRDオブジェクトとLogtailも削除されます。 ログコンポーネントが存在しない期間内に生成されたログは収集できません。