Você pode configurar seu pod com um período de carência (por exemplo, 30 segundos ou mais, dependendo do tempo de inicialização do contêiner e do tamanho da imagem) e definir "imagePullPolicy: "Always"
. E use kubectl delete pod pod_name
. Um novo contêiner será criado e a imagem mais recente será baixada automaticamente e o contêiner antigo será encerrado.
Exemplo:
spec:
terminationGracePeriodSeconds: 30
containers:
- name: my_container
image: my_image:latest
imagePullPolicy: "Always"
Atualmente, estou usando o Jenkins para compilações automatizadas e marcação de imagens e é algo como isto:
kubectl --user="kube-user" --server="https://kubemaster.example.com" --token=$ACCESS_TOKEN set image deployment/my-deployment mycontainer=myimage:"$BUILD_NUMBER-$SHORT_GIT_COMMIT"
Outro truque é executar inicialmente:
kubectl set image deployment/my-deployment mycontainer=myimage:latest
e depois:
kubectl set image deployment/my-deployment mycontainer=myimage
Na verdade, ele estará acionando a atualização sem interrupção, mas verifique se você também imagePullPolicy: "Always"
definiu.
Atualizar:
outro truque que encontrei, onde você não precisa alterar o nome da imagem, é alterar o valor de um campo que acionará uma atualização contínua, como terminationGracePeriodSeconds
. Você pode fazer isso usando kubectl edit deployment your_deployment
ou kubectl apply -f your_deployment.yaml
ou usando um patch assim:
kubectl patch deployment your_deployment -p \
'{"spec":{"template":{"spec":{"terminationGracePeriodSeconds":31}}}}'
Apenas certifique-se de sempre alterar o valor numérico.