Container Service for Kubernetes (ACK) クラスターで Elastic Container Instance (ECI) を使用する際のよくある質問とその回答です。
ECI Pod
GPU 高速化エラスティックコンテナインスタンスを作成するにはどうすればよいですか?
Pod の作成時に、GPU 高速化 Elastic Compute Service (ECS) インスタンスタイプを指定します。詳細な手順については、「GPU 高速化エラスティックコンテナインスタンスの作成」をご参照ください。
エラスティックコンテナインスタンスの ID を見つけるにはどうすればよいですか?
ACK では、各 Pod が 1 つのエラスティックコンテナインスタンスにマッピングされます。以下のいずれかの方法を使用します。
方法 1: kubectl
次のコマンドを実行し、出力の [アノテーション] セクションを確認します。
kubectl describe pod <pod-name>アノテーション k8s.aliyun.com/eci-instance-id には、eci-xxxx の形式でインスタンス ID が保持されています。

方法 2: ECI コンソール
Elastic Container Instance コンソールに移動し、[コンテナグループ] ページを開きます。Pod 名で検索します。コンテナグループ ID は、eci-xxxx というフォーマットのインスタンス ID です。

イメージキャッシュを使用して Pod を作成しましたが、起動に 10 秒以上かかります。これは想定どおりですか?
はい、想定どおりです。標準ノードでは、スケジューラは新しいリソースをプロビジョニングすることなく、既存のノードに Pod を配置するため、起動は 2~3 秒で完了します。ECI の動作は異なります。各 Pod には専用のリソースプロビジョニングが必要です。複数のゾーンを指定した場合、ECI は十分なキャパシティを持つゾーンが見つかるまで各ゾーンを順番に試行するため、時間が追加されます。
起動時間を短縮するには、マルチゾーン構成で最も利用可能なキャパシティを持つゾーンを最初にリストします。
ECI Pod が数時間 Pending 状態のままです。どうすればよいですか?
Pod イベントを確認するには、次のコマンドを実行します。
kubectl describe pod <pod-name>イベントにボリュームのマウント時に API サーバーへの接続タイムアウトが表示される場合、インスタンスが API サーバーに到達できません。次のいずれかを実行します。
VPC 接続性の確認 — Pod とクラスター API サーバーが同じ VPC にあることを確認します。
SLB アクセスの制御の更新 — クラスターの Server Load Balancer (SLB) インスタンスでアクセスの制御が有効になっている場合、Pod の CIDR ブロックをアクセス制御リスト (ACL) に追加します。
スケジューリング
Pod が virtual-kubelet ノードにスケジュールされましたが、実行されません。どうすればよいですか?
スケジューリング後に Pod イベントに更新がない場合、Virtual Kubelet コンポーネントログをクエリして根本原因を見つけます。
イベントが存在する場合は、イベントメッセージに基づいて直接トラブルシューティングを行います。
ACK コンソールの [クラスター] ページで、クラスターを見つけ、操作列から [詳細設定] > [Cloud Shell を開く] を選択します。
Virtual Kubelet Pod をリストして Pod 名を取得します。
kubectl -n kube-system get pods
ログをフェッチします。
ack-virtual-node-controller-xxxxxxxxxxをステップ 2 で取得した実際の Pod 名に置き換えます。kubectl -n kube-system logs ack-virtual-node-controller-xxxxxxxxxx
最新のエラーメッセージを特定し、それに応じてトラブルシューティングを行います。原因が不明な場合は、Alibaba Cloud テクニカルサポートにチケットを送信し、リクエスト ID とエラーメッセージを含めてください。

kube-proxy と CoreDNS が VNode にスケジュールされ、起動に失敗します。どうすればよいですか?
Kubernetes は kube-proxy と CoreDNS のスケジューリング時にノード Taint を無視するため、これらが VNode に配置される可能性があります。これを防ぐには、両方のコンポーネントの YAML に nodeAffinity ルールを追加して、virtual-kubelet ノードにスケジュールされないようにします。
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: type
operator: NotIn
values:
- virtual-kubeletネットワーク
ECI Pod の ClusterDomain を変更するにはどうすればよいですか?
Virtual Kubelet コンポーネントの Deployment 内のコンテナに CLUSTER_DOMAIN 環境変数を追加します。これにより、そのコンポーネントによって作成されたすべての ECI Pod の ClusterDomain が更新されます。サポートが必要な場合は、Alibaba Cloud テクニカルサポートにチケットを送信してください。
サーバーレス Kubernetes Ingress の nginx.ingress.kubernetes.io/auth-url アノテーションが機能しません。なぜですか?
サーバーレス Kubernetes クラスターは SLB ベースの Ingress コントローラーを使用しており、負荷分散は提供しますが、URL 認証はサポートしていません。nginx.ingress.kubernetes.io/auth-url アノテーションは、このクラスタータイプでは効果がありません。
URL 認証が必要な場合は、代わりに標準 ACK クラスターを使用してください。
クラスターのアップグレード後、サービス IP アドレスに PING できなくなりました。なぜですか?
2020 年 10 月以前は、サービス IP アドレスは仮想ネットワークインターフェースコントローラーにバインドされており、PING 可能でした。2020 年 10 月以降、サービス IP アドレスは高い同時実行性をサポートするために IP Virtual Server (IPVS) ルール内にのみ存在します。IPVS は IP アドレスとポート番号でトラフィックをルーティングし、ICMP パケットを処理しないため、サービス IP に対する PING は機能しなくなりました。
ログ
aliyun_logs_ 環境変数を設定しましたが、Simple Log Service にログが表示されません。なぜですか?
一般的な原因は 2 つあります。
短いコンテナランタイム — アプリケーションコンテナが ECI 起動後 20 秒以内に終了する場合、Simple Log Service (SLS) がログを収集する前にコンテナが終了し、ログボリュームがアンマウントされる可能性があります。
誤ったログパス — Pod で aliyun_logs_{Logstore name} 環境変数を最初に構成すると、ECI は自動的に Logstore を作成し、SLS にログパスを登録します。以降のすべての Pod は同じパスを使用する必要があります。異なるパスを使用すると、SLS はそれらの Pod からログを収集できません。異なるパスを使用するには、同時に Logstore 名を変更します。ECI は新しいパスで新しい Logstore を自動的に作成します。
監視
Prometheus は仮想ノード上の ECI Pod からメトリクスを自動的に収集しますか?
はい。仮想ノードは実ノードと互換性があるため、ARMS Prometheus とセルフマネージドのオープンソース Prometheus の両方が、仮想ノード上の ECI Pod から基本的な監視メトリクスを自動的に収集します。追加の構成は不要です。
セットアップ手順については、「Prometheus Service を有効にする」または「Prometheus を使用して ACK クラスターを監視する」をご参照ください。