2017-02-12 17 views
3

1つのinit-containerでレプリケーションコントローラを作成しています。しかし、初期化コンテナが起動に失敗し、ポッドの状態:kubernetes initコンテナCrashLoopBackOff

NAME      READY  STATUS    RESTARTS AGE 
testcontainer 0/1  CrashLoopBackOff 12   37m 

私は正確に失敗しているどの部分かわからない、とログが役立ちません。 マイkubectlサーバのバージョンは1.4(クライアント・バージョンとは異なる)であるので、私は使用しています:

ここ
annotations: 
     pod.beta.kubernetes.io/init-containers: 

は、私が使用していますレプリケーションコントローラYAMLファイルです。私は両方のコンテナのログをチェックするとき(

Warning FailedSync  Error syncing pod, skipping: failed to "StartContainer" for "nginx" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=nginx pod=testcontainer()" 

    32m 16s  145  {kubelet x.x.x.x} spec.containers{nginx} Warning BackOff Back-off restarting failed docker container 

:私はkubectlからポッドを記述

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: testcontainer 
spec: 
    replicas: 1 
    selector: 
    app: nginx 
    template: 
    metadata: 
     labels: 
     app: nginx 
     annotations: 
     pod.beta.kubernetes.io/init-containers: '[ 
      { 
       "name": "install", 
       "image": "hello-world" 
      } 
     ]' 
    spec: 
     containers: 
     - name: nginx 
     image: hello-world 
     dnsPolicy: Default 
     nodeName: x.x.x.x 

ログを(より速くそれを作るために代わりにnginxのの)は「hello-world」の画像を使用しています nginxとtestcontainer)、hello-worldイメージを実行した結果が表示されるので、イメージがダウンロードされて正常に開始されたと思います。私はさらにhttps://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-containerで提供されている例を使用して1つのポッドを作成しようとしましたが、まだ失敗します)

ありがとう!

答えて

1

ここの問題はinitコンテナではないと思います。 hello-worldイメージはテキストを印刷し、すぐに終了します。ポッドの.spec.restartPolicyはデフォルトでAlwaysに設定されているため、毎回ポッドを再起動します。

エラーメッセージが少し混乱する可能性がありますが、ポッドは永遠に実行されるため、終了コードが0であっても、エラーを表示するのはかなり意味があります。

ポッドを1回だけ実行する場合は、job APIを使用してください。


は、init-コンテナの例に興味があるので、私はあなたの例を修正:

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: testcontainer 
spec: 
    replicas: 1 
    selector: 
    app: nginx 
    template: 
    metadata: 
     labels: 
     app: nginx 
     annotations: 
     pod.beta.kubernetes.io/init-containers: '[ 
      { 
       "name": "install", 
       "image": "hello-world" 
      } 
     ]' 
    spec: 
     containers: 
     - name: nginx 
     image: nginx # <--- this image shouldn't be a single shot application 
     dnsPolicy: Default 
     nodeName: x.x.x.x 
+0

こんにちは svenwltr私は初期化cotainerは(インストール)を実行するだろうと思った、成功した場合アプリケーションコンテナ(nginx)が起動します。 initコンテナが成功した場合、なぜ再起動するのですか? (「常時」の再起動ポリシーは、失敗した場合にのみ適用する必要があります) Iveはこの例も試してみましたが、initコンテナはまだ失敗します。 https://kubernetes.io/docs/tasks/configure-pod-container/configure -pod-initialization /#作成中のポッド-in-init-container 「PodInitializig」が表示されますが、完了することはありません。 – greg

+0

つまり、hello-worldイメージで実行されているレプリケーションコントローラ(ジョブではない)のinitコンテナはどうすればできますか? – greg

+0

あなたのinitコンテナは正常に動作しますが、initコンテナの後に 'nginx'という名前のコンテナが起動します。このコンテナはまた、世界のイメージを使用します。あなたはこのイメージを置き換えます。 – svenwltr

関連する問題