2016-05-02 2 views
0

展開を実行すると、ダウンタイムが発生します。さまざまな時間(20〜40秒)後に要求が失敗します。Kubernetesの展開にダウンタイムが発生する

preStopがSIGUSR1を送信し、31秒待ってからSIGTERMを送信すると、入力コンテナの準備チェックが失敗します。その時間枠では、5秒の間隔で2回失敗した後、準備確認が失敗するように設定されているため、サービスからポッドを削除する必要があります。

サービスの追加や削除を行うイベントを確認して、原因を突き止めるにはどうすればよいですか?

準備状況のイベントは自分でチェックしますか?

私はGoogle Container Engineバージョン1.2.2を使用し、GCEのネットワークロードバランサを使用しています。

サービス:

apiVersion: v1 
kind: Service 
metadata: 
    name: myapp 
    labels: 
    app: myapp 
spec: 
    type: LoadBalancer 
    ports: 
    - name: http 
    port: 80 
    targetPort: http 
    protocol: TCP 
    - name: https 
    port: 443 
    targetPort: https 
    protocol: TCP 
    selector: 
    app: myapp 

展開:プローブが失敗した場合

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: myapp 
spec: 
    replicas: 3 
    strategy: 
    type: RollingUpdate 
    revisionHistoryLimit: 10 
    selector: 
    matchLabels: 
     app: myapp 
    template: 
    metadata: 
     labels: 
     app: myapp 
     version: 1.0.0-61--66-6 
    spec: 
     containers: 
     - name: myapp 
     image: **** 
     resources: 
      limits: 
      cpu: 100m 
      memory: 250Mi 
      requests: 
      cpu: 10m 
      memory: 125Mi 
     ports: 
     - name: http-direct 
      containerPort: 5000 
     livenessProbe: 
      httpGet: 
      path: /status 
      port: 5000 
      initialDelaySeconds: 30 
      timeoutSeconds: 1 
     lifecycle: 
      preStop: 
      exec: 
       # SIGTERM triggers a quick exit; gracefully terminate instead 
       command: ["sleep 31;"] 
     - name: haproxy 
     image: travix/haproxy:1.6.2-r0 
     imagePullPolicy: Always 
     resources: 
      limits: 
      cpu: 100m 
      memory: 100Mi 
      requests: 
      cpu: 10m 
      memory: 25Mi 
     ports: 
     - name: http 
      containerPort: 80 
     - name: https 
      containerPort: 443 
     env: 
     - name: "SSL_CERTIFICATE_NAME" 
      value: "ssl.pem"   
     - name: "OFFLOAD_TO_PORT" 
      value: "5000" 
     - name: "HEALT_CHECK_PATH" 
      value: "/status" 
     volumeMounts: 
     - name: ssl-certificate 
      mountPath: /etc/ssl/private 
     livenessProbe: 
      httpGet: 
      path: /status 
      port: 443 
      scheme: HTTPS 
      initialDelaySeconds: 30 
      timeoutSeconds: 1 
     readinessProbe: 
      httpGet: 
      path: /readiness 
      port: 81 
      initialDelaySeconds: 0 
      timeoutSeconds: 1 
      periodSeconds: 5 
      successThreshold: 1 
      failureThreshold: 2 
     lifecycle: 
      preStop: 
      exec: 
       # SIGTERM triggers a quick exit; gracefully terminate instead 
       command: ["kill -USR1 1; sleep 31; kill 1"] 
     volumes: 
     - name: ssl-certificate 
     secret: 
      secretName: ssl-c324c2a587ee-20160331 

答えて

1

、プローバはxx probe errored: xxxとしてUnhealthyやメッセージなどの理由で警告イベントを発行します。

kubectl get eventsまたはkubectl describe pods -l app=myapp,version=1.0.0-61--66-6(ラベルでフィルタポッド)を使用してこれらのイベントを見つけることができます。

+0

私が今まで気づいたことは、新しいポッドには「準備ができていませんでした:HTTPプローブが状態コード:503で失敗しました」という最後のイベントがあります。私はこれに健康で交通を受け入れる準備ができているというメッセージが続くことを期待しています。 –