このトピックでは、Container Service for Kubernetes (ACK) で Elastic Container Instance を使用する場合によく寄せられる質問への回答を提供します。
ECI ポッド
スケジューリング
ネットワーキング
ロギング
モニタリング
GPU アクセラレーション付きのエラスティックコンテナインスタンスを作成するにはどうすればよいですか?
GPU アクセラレーション付きの Elastic Compute Service (ECS) インスタンスタイプを指定して、GPU アクセラレーション付きのエラスティックコンテナインスタンスを作成できます。詳細については、GPU アクセラレーション付きのエラスティックコンテナインスタンスの作成を参照してください。
エラスティックコンテナインスタンスの ID を照会するにはどうすればよいですか?
Kubernetes クラスタでは、1 つのポッドが 1 つのエラスティックコンテナインスタンスです。次のいずれかの方法を使用して、エラスティックコンテナインスタンスの ID を照会できます。
方法 1: kubectl コマンドを実行する
kubectl describe pod
コマンドを実行してポッドの詳細を表示し、ポッドの詳細の Annotations セクションでエラスティックコンテナインスタンスの ID を表示します。k8s.aliyun.com/eci-instance-id
アノテーションの値は、エラスティックコンテナインスタンスの ID です。ID はeci-xxxx
形式です。例:方法 2: Elastic Container Instance コンソールを使用する
Elastic Container Instance コンソールの コンテナグループページで、ポッド名に基づいてエラスティックコンテナインスタンスを照会し、インスタンス ID を表示します。
コンテナグループの ID はインスタンスの ID です。ID は
eci-xxxx
形式です。例:
イメージキャッシュ機能を使用しているのに、Elastic Container Instance ポッドの作成速度が遅いのはなぜですか?
問題の説明
標準ノードでは、ポッドは 2 ~ 3 秒以内に作成できます。ただし、イメージキャッシュを使用して作成されたエラスティックコンテナインスタンスの起動には 10 秒以上かかりました。
説明
この状況は正常です。標準ノードでポッドの作成をリクエストすると、システムはリソースを申請せずに、ノードに直接コンテナを作成します。エラスティックコンテナインスタンスの作成をリクエストすると、システムは最初に必要なリソースを申請します。複数のゾーンを指定した場合、システムは指定されたゾーンを 1 つずつ試して、インスタンスを作成するのに十分なリソースが利用可能なゾーンを見つけます。
リソース不足のためにシステムが異なるゾーンで再試行する必要がある場合、システムはインスタンスの作成にさらに多くの時間を費やす必要があります。この問題を防ぐために、複数のゾーンを指定する場合は、利用可能なリソースが十分にあるゾーンを最初に配置することをお勧めします。
Elastic Container Instance ポッドを作成した後に、ポッドが Pending 状態のままになっている場合はどうすればよいですか?
問題の説明
作成後数時間経っても、ポッドが Pending 状態のままになっています。ポッドイベントリストは、ボリュームをマウントするときに API サーバーへの接続がタイムアウトしたために問題が発生したことを示しています。
解決策
この問題は、インスタンスと API サーバー間の接続不良が原因で発生します。次の操作を実行して、問題のトラブルシューティングを行うことができます。
ポッドとクラスタの API サーバーが同じ仮想プライベートクラウド (VPC) にデプロイされているかどうかを確認します。
クラスタのサーバーロードバランサー (SLB) インスタンスにアクセス制御を構成している場合は、ポッドの CIDR ブロックがアクセス制御リスト (ACL) に追加されていることを確認します。
ポッドが virtual-kubelet ノードにスケジュールされていますが、ノードで実行できません。どうすればよいですか?
問題の説明
ACK と VNode を使用するシナリオでは、ポッドは virtual-kubelet ノードにスケジュールされる場合がありますが、イベントは更新されていません。この場合、virtual-kubelet ノードのログを照会し、ログに基づいて問題のトラブルシューティングを行う必要があります。
イベントが生成された場合は、イベントに基づいて問題のトラブルシューティングを行うことができます。
解決策
ACK コンソールの クラスタページで、クラスタを見つけ、[アクション] 列の 詳細 > Cloud Shell を開くを選択します。
次のコマンドを実行して、Virtual Kubelet コンポーネントによって作成されたポッドの名前を取得します:
kubectl -n kube-system get pods
次のコマンドを実行して、ポッドのログを取得します。ack-virtual-node-controller-xxxxxxxxxx を手順 2 で取得したポッド名に置き換えます。
kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx
ログの最新のエラーメッセージに基づいて問題のトラブルシューティングを行います。または、チケットを送信し、リクエスト ID とエラーメッセージを Alibaba Cloud テクニカルサポートに提供します。
ACK と VNode を使用するシナリオで、kube-proxy と coreDNS が VNode にスケジュールされ、起動に失敗します。どうすればよいですか?
Kubernetes が kube-proxy と CoreDNS をスケジュールする場合、Kubernetes はそれらの taint を無視し、kube-proxy と CoreDNS を VNode にスケジュールする場合があります。この問題を解決するには、kube-proxy と CoreDNS の YAML ファイルに次の内容を追加します。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubelet
Elastic Container Instance ポッドの ClusterDomain を変更するにはどうすればよいですか?
コンテナに環境変数 CLUSTER_DOMAIN を追加することで、Virtual kubelet コンポーネントの Deployment を変更できます。このようにして、Virtual Kubelet コンポーネントによって作成された Elastic Container Instance ポッドの ClusterDomain を変更できます。Alibaba Cloud テクニカルサポートに連絡するためにチケットを送信することをお勧めします。
ACK Serverless クラスタのイングレスコントローラーで構成された認証が有効にならないのはなぜですか?
問題の説明
nginx.ingress.kubernetes.io/auth-url
アノテーションは nginx-ingress
に設定されていますが、有効になりません。
説明
ACK Serverless クラスタでは、イングレスコントローラーは SLB インスタンスに基づいてロードバランシング機能を提供し、URL 認証をサポートしていません。
ACK クラスタは URL 認証をサポートしています。
クラスタのアップグレード後、サービス IP アドレスに ping できなくなりました。どうすればよいですか?
2020 年 10 月より前までは、各サービス IP アドレスは仮想ネットワークインターフェースコントローラーに割り当てられており、ping することができました。2020 年 10 月以降、高並列性を最適化するために、サービス IP アドレスは IP Virtual Server (IPVS) ルールにのみ存在するように変更されました。サービス IP アドレスには ping できなくなりました。IPVS は IP アドレスとポート番号に基づいてリクエストを転送し、ping パケットを転送することはできません。
エラスティックコンテナインスタンスのログが収集されないのはなぜですか?
ポッドに Simple Log Service の aliyun_logs_{Logstore 名}
環境変数を設定しているのに、Simple Log Service にエラスティックコンテナインスタンスのログが見つからない場合は、次の原因が考えられます。
エラスティックコンテナインスタンスの実行時間が短い
エラスティックコンテナの起動後 20 秒以内にアプリケーションコンテナが完了した場合、ログが収集される前にコンテナが終了し、ログ関連のボリュームがアンマウントされる可能性があります。その結果、Simple Log Service はログを収集できません。
収集パスのエラー
ポッドのログを初めて収集するために環境変数を指定すると、Elastic Container Instance は Simple Log Service に Logstore とパスを自動的に作成します。別のポッドを作成するときは、このパスのみを使用できます。別のパスを使用すると、Simple Log Service はポッドのログを収集できません。パスは Logstore 自体と一緒に変更できます。Elastic Container Instance は Simple Log Service に新しい Logstore を自動的に作成します。
仮想ノードを使用してポッドが ACK クラスタに接続されている場合、Prometheus は Elastic Container Instance ポッドの監視メトリクスをどのように取得しますか?
仮想ノードは実際のノードと互換性があります。Prometheus (ARMS Prometheus またはセルフマネージドのオープンソース Prometheus) は、仮想ノードにデプロイされている Elastic Container Instance ポッドの基本的な監視メトリクスを自動的に取得します。追加の構成を行う必要はありません。
ACK クラスタに Prometheus をデプロイする方法については、Prometheus サービスの有効化またはPrometheus を使用した ACK クラスタの監視を参照してください。