Amazon EKS ポッドが「ポッドサンドボックスを作成できませんでした」というエラーで ContainerCreating 状態でスタックするのはなぜですか?
最終更新日: 2021 年 11 月 30 日
Amazon Elastic Kubernetes Service (Amazon EKS) ポッドが ContainerCreating 状態でスタックし、「ポッドサンドボックスを作成できませんでした」というエラーが表示されました。
解決方法
Amazon EKS ポッドは、いくつかの理由により、ネットワーク接続エラーで ContainerCreating 状態でスタックすることがあります。表示されたエラーメッセージに基づいて、次のトラブルシューティング手順を実行してください。
デーモンからのエラー応答: shim を起動できませんでした: fork/exec /usr/bin/containerd-shim: リソースは一時的に利用できません: 不明
このエラーは、最大 PID または最大ファイル数についての定義されたカーネル設定によるオペレーティングシステムの制限が原因で発生します。
以下のコマンドを実行してポッドに関する情報を取得します。
$ kubectl describe pod example_pod
出力は次のようになります。
kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal Failed to create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "example_pod": Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown
この問題を一時的に解決するには、ノードを再起動します。
この問題をトラブルシューティングするには、次の手順を実行します。
- ノードログを収集します。
- Docker ログで「dockerd[4597]: ランタイム/cgo: pthread_create が失敗しました: リソースは一時的に利用できません」というエラーがないか確認します。
- Kubelet ログで「kubelet[5267]: ランタイム: 新しい OS スレッドを作成できませんでした (既に 2 つあります; errno=11)」および「kubelet[5267]: ランタイム: 最大ユーザープロセス (ulimit -u) を引き上げる必要がある場合があります」というエラーがないか確認します。
- ps コマンドを実行してゾンビプロセスを特定します。出力で Z 状態が付されてリストされているプロセスはすべてゾンビプロセスです。
ネットワークプラグイン cni がポッドネットワークをセットアップできませんでした: add cmd: コンテナに IP アドレスを割り当てることができませんでした
このエラーは、Container Network Interface (CNI) が新しくプロビジョンされたポッドに IP アドレスを割り当てることができないことを示します。
以下のコマンドを実行してポッドに関する情報を取得します。
$ kubectl describe pod example_pod
出力は次のようになります。
Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "provisioning-XXXXXXXXXXXXXXX": networkPlugin cni failed to set up pod "provisioning-XXXXXXXXXXXXXXX" network: add cmd: failed to assign an IP address to container
サブネットに空き IP アドレスが不足していないかどうかをサブネットで確認します。Amazon VPC コンソールの [Subnets] (サブネット) セクションで、各サブネットで使用可能な IP アドレスを確認できます。
この問題を解決するには、ワークロードの一部をスケールダウンして、使用可能な IP アドレスを解放します。追加のサブネット容量が利用可能な場合は、ノードをスケールすることもできます。また、追加のサブネットを作成することもできます。詳細については、Amazon EKS で複数の CIDR 範囲を使用する方法を教えてくださいの新しい CIDR 範囲でサブネットを作成するを参照してください。
ダイヤル TCP 127.0.0.1:50051 のダイヤル中にエラーが発生しました:接続: 接続が拒否されました
このエラーは、aws-node ポッドが IPAM との通信に失敗したことを示します。
以下のコマンドを実行してポッドに関する情報を取得します。
$ kubectl describe pod example_pod
$ kubectl describe pod/aws-node-XXXXX -n kube-system
出力は次のようになります。
Warning FailedCreatePodSandBox 51s kubelet, ip-xx-xx-xx-xx.ec2.internal Failed create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to set up pod "example_pod" network: add cmd: Error received from AddNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused", failed to clean up sandbox container
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to teardown pod "example_pod" network: del cmd: error received from DelNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused"]
この問題をトラブルシューティングするには、次のコマンドを実行して最後のログメッセージを表示します。
kubectl -n kube-system exec -it aws-node-XXX-- tail -f /host/var/log/aws-routed-eni/ipamd.log | tee ipamd.log
最後のログメッセージは次のようになります。
Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\
このメッセージは、ポッドが var/run/dockershim.sock をマウントできなかったことを示しています。
この問題を解決するには、以下の操作をお試しください。
- aws-node ポッドを再起動します。再起動は、ポッドがマウントポイントを再マッピングするのに役立つ場合があります。
- それでも問題が解決しない場合は、該当のノードを遮断し、ノードグループ内のノードをスケールします。
- Virtual Private Cloud (VPC) CNI を、サポートされている最新バージョンのクラスターにアップグレードしてみてください。
CNI が AWS マネジメントコンソールでマネージドアドオンとして追加されている場合、aws-node はプローブに失敗します。マネージドアドオンに切り替えると、サービスアカウントが上書きされます。ただし、サービスアカウントは選択したロールで設定されません。この問題を解決するには、コンソールからアドオンをオフにし、マニフェストファイルを使用してサービスアカウントを作成します。または、現在の aws-node サービスアカウントを編集して、マネージドアドオンで使用されているロールを追加します。
ネットワークプラグイン cni がポッド「example_pod」ネットワークをセットアップできませんでした: Kubernetes 引数: ポッドにラベル vpc.amazonaws.com/PrivateIPv4Address がありません
このエラーは、ポッドが正しく実行されていないか、ポッドが使用している証明書が正常に作成されていないために発生します。このエラーは、Windows ワークロードを実行するために Amazon EKS クラスターで必要な VPC アドミッションコントローラー Webhook に関連しています。このコンポーネントは kube-system 名前空間でポッドを実行するプラグインです。このコンポーネントは Linux ノードで実行され、Windows ノード上の受信ポッドのネットワークを有効にします。
以下のコマンドを実行してポッドに関する情報を取得します。
$ kubectl describe pod example_pod
出力は次のようになります。
Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "<POD_ANME>": networkPlugin cni failed to set up pod "example_pod" network: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address
この問題をトラブルシューティングするには、次のコマンドを実行して VPC アドミッションコントローラーポッドが作成されたことを確認します。
$ kubectl get pods -n kube-system
アドミッションコントローラーポッドが作成されていない場合は、クラスター用に Windows サポートを有効にします。
重要: Amazon EKS は現在、VPC コントローラーを有効にしなくても Windows ノードグループをサポートしています。VPC コントローラーを有効にしている場合は、レガシー Windows サポートをデータプレーンから削除します。
次のコマンドを実行して、ログにエラーが書き込まれていないか確認します。
$ kubectl logs your-admission-webhook-name -n kube-system
ログから特定されたエラーに基づいて、さらにトラブルシューティングを続行できます。