2016-11-01 1 views

답변

19

당신은 유예 기간으로 포드를 구성 할 수 있습니다 할 (예를 들어 30 초 이상, 따라 할 수 없습니다 컨테이너 시작 시간 및 이미지 크기) 및 "imagePullPolicy: "Always"을 설정하십시오. 그리고 kubectl delete pod pod_name을 사용하십시오. 새 컨테이너가 만들어지고 최신 이미지가 자동으로 다운로드 된 다음 이전 컨테이너가 종료됩니다.

예 : 나는 현재 자동화에 대한 젠킨스를 사용하고

spec: 
    terminationGracePeriodSeconds: 30 
    containers: 
    - name: my_container 
    image: my_image:latest 
    imagePullPolicy: "Always" 

빌드 및 이미지 태그 및 그것은 다음과 같은 :

kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT" 

또 다른 트릭은 intially 실행하는 것입니다 :

kubectl set image deployment/my-deployment mycontainer=myimage:latest 

다음 :

kubectl set image deployment/my-deployment mycontainer=myimage 

실제로 롤링 업데이트가 실행되지만, imagePullPolicy: "Always"도 설정해야합니다.

업데이트 :

난 당신이 이미지 이름을 변경할 필요가 없습니다 경우, terminationGracePeriodSeconds처럼, 롤링 업데이 트를 트리거 필드의 값을 변경하는 것입니다 발견 다른 트릭. 이 kubectl edit deployment your_deployment 또는 kubectl apply -f your_deployment.yaml를 사용하거나이 같은 패치를 사용하여 작업을 수행 할 수 있습니다

kubectl patch deployment your_deployment -p \ 
    '{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}' 

그냥 당신이 항상 숫자 값을 변경해야합니다.

+0

실제로 당신의 속임수는 나쁘지 않습니다. myimage를 고려해보십시오 : lastet와 myimage는 기본적으로 같은 것입니다. 감사합니다! – abovesun

+0

이 트릭은 버그와 비슷해 보입니다. 왜 우리가 두 번 지정해야하는지 확실하지 않습니다. – speedplane

+1

kubernetes 배치에서 동일한 이미지를 사용하여 새 창을 시작하려면 (이 트릭은 "최신"태그에만 적용됨) 태그없이 지정할 필요가 있습니다. 다음에 "최신"태그를 추가하면 업데이트가 트리거됩니다. 순서가 바뀔 수도 있지만 중요하지 않습니다. 프로덕션에서는 "최신"태그를 사용하지 않지만 개발 목적으로는 때때로 이점을 누릴 수 있습니다. – Camil