Kubernetes が ContainerCreating で停止

Kubernetes が ContainerCreating で停止

Kubernetes クラスター内のポッドが、作成を実行した後に「ContainerCreating」で停止しています。停止している理由を診断するために、この操作のログを表示するにはどうすればよいでしょうか?kubectl logsコンテナーは保留中でない状態である必要があるため、機能しないようです。

答え1

kubectl describe podsリストアップしますいくつかのイメージのプル、コンテナの起動など、ポッドに関連するイベントのほとんど(すべてではない可能性があります)。

答え2

詳細はイベントで提供される可能性があります。

kubectl get events --all-namespaces  --sort-by='.metadata.creationTimestamp'

ただし、次のバグにより、イベントの並べ替えが正しく機能しない可能性があることに注意してください。参考:


あるいは:

Kubernetes 1.18 以降、すべての新しいオブジェクトにはサーバー側適用用のメタデータが含まれており、イベントを並べ替える新しい方法が提供されます。

kubectl get events --sort-by=".metadata.managedFields[0].time"

から:https://github.com/kubernetes/kubernetes/issues/29838#issuecomment-789660546


私の場合は、ポッドに関連するイベントがありました:

default       13s         Warning   FailedMount               Pod          Unable to mount volumes for pod "restore-db-123-1-5f24s_default(9b7df264-2976-11ea-bb8f-42010a9a002c)": timeout expired waiting for volumes to attach or mount for pod "default"/"restore-db-123-1-5f24s". list of unmounted volumes=[nfsv]. list of unattached volumes=[nfsv default-token-hxrng]

答え3

私の場合、dockerのインターネットへのアクセスがブロックされていました。プロキシを使用して解決しました(sandylssのコメントを使用):

  1. minikube stop
  2. minikube delete
  3. export http_proxy=http://user:pass@ip:port
  4. export https_proxy=http://user:pass@ip:port
  5. export no_proxy=192.168.99.0/24
  6. minikube start --logtostderr --v=0 --bootstrapper=localkube --vm-driver hyperv 
      --hyperv-virtual-switch "Primary Virtual Switch" --docker-env HTTP_PROXY=$http_proxy \
      --docker-env HTTPS_PROXY=$https_proxy --docker-env NO_PROXY=$no_proxy
    
  7. export no_proxy=$no_proxy,$(minikube ip)
  8. export NO_PROXY=$no_proxy,$(minikube ip)

次に、docker がインターネットにアクセスできるかどうかを確認するには、次を実行します。

$ docker pull tutum/hello-world

クラスター内( を使用してクラスターに接続しますminikube ssh)。ダウンロードが開始された場合はプロセスを停止します。

2 つ目の問題は、インターネット接続が遅いことでした。必要な Docker イメージは約 100 MB なので、Docker コンテナーと Kubernetes ポッドの両方が30 分間状態のままでした\pauseContainerCreating

docker がイメージをダウンロードしているかどうかを確認するには、次のコマンドを実行します。

$ ls -l /var/lib/docker/tmp

クラスター内には、ダウンロード中の一時イメージ ファイルが表示され、それ以外の場合は空になります。

minikubeで開発していてVPNを使用している場合、dockerはVPNを次のように使用できます。バイオリニストつまり、docker は fiddler の ip:port に接続され、fiddler は VPN に接続されます。そうしないと、ホストと minikube VM 間で VPN が共有されません。

答え4

私がこの問題に遭遇したのは、リソース宣言が誤って非常に小さかったためです。

リソース: 制限: CPU: 1000m メモリ: 1024M リクエスト: CPU: 1000m メモリ: 1024M

リソース: 制限: CPU: 1000m メモリ: 1024m リクエスト: CPU: 1000m メモリ: 1024m

m を大文字にすると、リソースの使用に大きな違いが生じます。コンテナーに十分なメモリを割り当てていなかったため、ContainerCreating で行き詰まってしまいました。

関連情報