2017-03-27 19 views
0

私はKubernetesのドキュメントでこれに対する答えを探すのに苦労しています。 AWS上で夜遅く明らかな理由もなく再起動しますポッドのKubernetes展開 Kubernetes Podが理由と終了コード0を完了した終了状態になるのはなぜですか?

  • 一つとして展開NodeJSのAPI(エクスプレス)を実行している
  • 8ポッド

    • Kubernetesバージョン1.4:シナリオは以下のとおりです。 (トラフィック、CPUスパイク、メモリ圧迫、アラートなし...)。この結果、再起動の回数が増えます。
    • ログは
    • リソースの消費量が正常である、Kubernetesについてのイベントが別のノードまたは類似
    • にポッドを再スケジュールを見ることができない(、以前のログを見ることで、すべてそこにエラーをkubectl -pを走っていない)、異常は何も表示されません。ポッドを記述すると、COMPLETEDの理由と終了コード0が返され、TERMINATEDという状態が戻されます。kubectlから正確な出力が得られません。このポッドは現在何度も置き換えられています。

    ポッドは、NodeJSサーバのインスタンスである彼らは完全、彼らは常に要求を待って実行されていることができません。

    これは、ポッドの内部クーベルネット再配置ですか?これがいつ起こるかを知る方法はありますか?なぜそれが起こったのかというと、どこかのイベントではいけませんか?

    アップデートは

    これが私たちのprod環境で起こりました。問題のポッドを記載した結果は次のとおり

    api: Container ID: docker://7a117ed92fe36a3d2f904a882eb72c79d7ce66efa1162774ab9f0bcd39558f31 Image: 1.0.5-RC1 Image ID: docker://sha256:XXXX Ports: 9080/TCP, 9443/TCP State: Running Started: Mon, 27 Mar 2017 12:30:05 +0100 Last State: Terminated Reason: Completed Exit Code: 0 Started: Fri, 24 Mar 2017 13:32:14 +0000 Finished: Mon, 27 Mar 2017 12:29:58 +0100 Ready: True Restart Count: 1

    アップデート2

    ここでは、使用deployment.yamlファイルである:上記で参照画像の

    apiVersion: "extensions/v1beta1" 
    kind: "Deployment" 
    metadata: 
        namespace: "${ENV}" 
        name: "${APP}${CANARY}" 
        labels: 
        component: "${APP}${CANARY}" 
    spec: 
        replicas: ${PODS} 
        minReadySeconds: 30 
        revisionHistoryLimit: 1 
        strategy: 
        type: RollingUpdate 
        rollingUpdate: 
         maxUnavailable: 1 
         maxSurge: 1 
        template: 
        metadata: 
         labels: 
         component: "${APP}${CANARY}" 
        spec: 
         serviceAccount: "${APP}" 
    
    ${IMAGE_PULL_SECRETS} 
    
         containers: 
         - name: "${APP}${CANARY}" 
         securityContext: 
          capabilities: 
          add: 
           - IPC_LOCK 
         image: "134078050561.dkr.ecr.eu-west-1.amazonaws.com/${APP}:${TAG}" 
         env: 
         - name: "KUBERNETES_CA_CERTIFICATE_FILE" 
          value: "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt" 
         - name: "NAMESPACE" 
          valueFrom: 
          fieldRef: 
           fieldPath: "metadata.namespace" 
         - name: "ENV" 
          value: "${ENV}" 
         - name: "PORT" 
          value: "${INTERNAL_PORT}" 
         - name: "CACHE_POLICY" 
          value: "all" 
         - name: "SERVICE_ORIGIN" 
          value: "${SERVICE_ORIGIN}" 
         - name: "DEBUG" 
          value: "http,controllers:recommend" 
         - name: "APPDYNAMICS" 
          value: "true" 
         - name: "VERSION" 
          value: "${TAG}" 
         ports: 
         - name: "http" 
          containerPort: ${HTTP_INTERNAL_PORT} 
          protocol: "TCP" 
         - name: "https" 
          containerPort: ${HTTPS_INTERNAL_PORT} 
          protocol: "TCP" 
    

    Dockerfileデプロイメントマニフェスト:

    FROM ubuntu:14.04 
    ENV NVM_VERSION v0.31.1 
    ENV NODE_VERSION v6.2.0 
    ENV NVM_DIR /home/app/nvm 
    ENV NODE_PATH $NVM_DIR/v$NODE_VERSION/lib/node_modules 
    ENV PATH  $NVM_DIR/v$NODE_VERSION/bin:$PATH 
    ENV APP_HOME /home/app 
    
    RUN useradd -c "App User" -d $APP_HOME -m app 
    RUN apt-get update; apt-get install -y curl 
    USER app 
    
    # Install nvm with node and npm 
    RUN touch $HOME/.bashrc; curl https://raw.githubusercontent.com/creationix/nvm/${NVM_VERSION}/install.sh | bash \ 
        && /bin/bash -c 'source $NVM_DIR/nvm.sh; nvm install $NODE_VERSION' 
    
    ENV NODE_PATH $NVM_DIR/versions/node/$NODE_VERSION/lib/node_modules 
    ENV PATH  $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH 
    
    # Create app directory 
    WORKDIR /home/app 
    COPY . /home/app 
    
    # Install app dependencies 
    RUN npm install 
    
    EXPOSE 9080 9443 
    CMD [ "npm", "start" ] 
    

    npm startポート9080

  • +0

    配備またはrc yamlファイルを投稿してください。また、このトラブルシューティングガイドをご覧ください:https://kubernetes.io/docs/tasks/debug-application-cluster/determine-reason-pod-failure/ – jaxxstorm

    +0

    投稿されています。この時点で、終了メッセージを表示するために実行中のポッドを変更することはできませんが、今後の展開では間違いなくそのポッドを実行します。 –

    +0

    cmdがポストされていません。あなたのエントリーポイント/コマンドは何ですか? – jaxxstorm

    答えて

    2

    にNodeJSサーバを起動し、通常のnode app.jsコマンドの別名は、実行ドッキングウィンドウのバージョンを確認し、ドッキングウィンドウデーモンはその時間中に再起動されたかどうかです。

    ドッカーデーモンが再起動した場合は、1.12の新しい「ライブ復元」機能を使用しない限り、すべてのコンテナが終了します。 ドッカーのバージョンでは、ドッカーはこの状況で終了したすべてのコンテナに対して「終了コード0」を誤って報告することがあります。詳細はhttps://github.com/docker/docker/issues/31262を参照してください。

    関連する問題