2016-07-07 2 views
2

롤링하고 있지 I이는 Kubernetes에서 다음과 같은 배포 :는 Kubernetes 배포 갱신

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    labels: 
    run: hello-node 
    name: hello-node 
    namespace: default 
spec: 
    replicas: 2 
    selector: 
    matchLabels: 
     run: hello-node 
    strategy: 
    rollingUpdate: 
     maxSurge: 2 
     maxUnavailable: 0 
    type: RollingUpdate 
    template: 
    metadata: 
     creationTimestamp: null 
     labels: 
     run: hello-node 
    spec: 
     containers: 
     - image: <image>:<tag> 
     imagePullPolicy: Always 
     name: hello-node 
     livenessProbe: 
      httpGet: 
      path: /rest/hello 
      port: 8081 
      initialDelaySeconds: 15 
      timeoutSeconds: 1 
     ports: 
     - containerPort: 8081 
      protocol: TCP 
     resources: 
      requests: 
      cpu: 400m 
     terminationMessagePath: /dev/termination-log 
     dnsPolicy: ClusterFirst 
     restartPolicy: Always 
     securityContext: {} 
     terminationGracePeriodSeconds: 30 

문제 난의 내 이미지의 새 버전을 생각한 내 배포를 업데이트 할 때, Kubernetes 즉시로 모두 포드를 죽일 것입니다 새 이미지로 두 개의 새 창을 가져올 수 있습니다. 새로운 포드가 부팅되는 동안 서비스 중단이 발생합니다. 새로운 포드가 livenessProbe에 따라 건강에 대한

  • 기다립니다 새 이미지로

    1. 시작 한 포드 : 때문에 나는 다음과 같은 작업을 수행 할 Kubernetes을 기대하고있어 rollingUpdatelivenessProbe

      모든 포드가 이주 될 때까지 이전 이미지

    2. 반복과
    3. 킬 하나 개 포드

    여기에 뭔가가 빠졌습니까?

  • 답변

    4

    readinessProbe이 필요합니다. 초기 지연 Readiness 이전의 디폴트 상태가 Failure 반면

    초기 지연 Liveness 이전의 디폴트 상태가 Success이다.

    프로브가 실패 할 경우 컨테이너를 강제 종료하고 다시 시작하려면 LivenessProbeRestartPolicyAlways 또는 OnFailure으로 지정하십시오.

    프로브가 성공할 때만 광고 모음으로 트래픽을 보내려면 ReadinessProbe을 지정하십시오.

    자세한 내용은 container probes을 참조하십시오.

    설명한 롤링 업데이트 동작을 사용하려면 maxSurge1 (기본값)으로 설정하십시오. 이것은 "한 번에 최대 하나 더 많은 복제본을 확장"하도록 배포에 지시합니다. 자세한 내용은 docs of maxSurge을 참조하십시오.

    +0

    감사합니다. 'readyinessProbe'는 서비스 중단에 결정적으로 도움이되었습니다. 이제'k8s'는 2 개의 새로운 포드를 시작하여 준비가 될 때까지 기다렸다가, 2 개의 포드를 죽일 것입니다. 이것은 더 좋지만 여전히 롤링 업데이트 동작을 얻지는 못하고 있습니다. 왜 그런가? – phoenix7360

    +0

    "롤링 업데이트 동작을 얻지 못했습니다"에 대해 자세히 설명 할 수 있습니까? '.strategy.rollingUpdate.maxSurge'는''2''와''MaxUnavailable''이''0''으로 설정되어 있음을 의미합니다. 이것은 Deployment가 최대 4 개의 복제본과 최소 2 개의 복제본을 가질 것을 기대한다는 것을 의미합니다. 2 개의 복제본을 의미하는'minReadySeconds'를 설정하지 마십시오). 그래서 당신이 보는 것은 기대됩니다. – janetkuo

    +0

    Kubernetes 웹 사이트의 비디오에서 롤링 업데이트 중에 kubernetes가 이전 포드를 제거하고 새 포드를 추가하는 방법을 번갈아 사용한다는 것을 알고있었습니다. 포드가 3 개인 경우 [3,0], [2.1], [1,2], [0,3]이됩니다. 따라서 두 버전의 서비스가 트래픽을 처리하는 기간이 있습니다. 전 롤링 업데이트 (예 : 배포 객체가 아닌)의 옛 방식에서는 각 업데이트 사이의 기간을 정의하는 매개 변수가 있다는 것을 알고 있습니다. 나는 이해하지 못 했니? – phoenix7360