Легко обновить существующее Развертывание новым образом без необходимости его удаления.
Представьте, что у нас есть файл YAML с Развертыванием.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
Чтобы запустить это развертывание, выполните следующую команду:
$ kubectl create -f nginx-deployment.yaml --record
(--record
- добавляет текущую команду к аннотациям созданного или обновленного ресурса. Это полезно для будущегопроверяет, например, выясняет, какие команды выполнялись в каждой ревизии развертывания, и выполняет откат.)
Чтобы увидеть состояние развертывания развертывания, выполните
$ kubectl rollout status deployment/nginx-deployment
Чтобы обновить версию образа nginx,просто запустите команду:
$ kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
Или вы можете отредактировать существующее развертывание с помощью команды:
$ kubectl edit deployment/nginx-deployment
Чтобы просмотреть состояние процесса обновления развертывания, введите команду:
$ kubectl rollout status deployment/nginx-deployment
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out
или
$ kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx-deployment 3 3 3 3 36s
Каждый раз, когда вы обновляете Deployment, он обновляет модули, создавая новый ReplicaSet, масштабируя его до 3-х реплик и уменьшая старый ReplicaSet до 0. Если вы обновляетеПри повторном развертывании во время предыдущего обновления он начинает создавать новый ReplicaSet немедленно, не дожидаясь завершения предыдущего обновления.
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-1180356465 3 3 3 4s
nginx-deployment-2538420311 0 0 0 56s
Если вы сделали опечатку во время редактирования развертывания (например,nginx: 1.91) вы можете откатить его до предыдущей хорошей версии.
Сначала проверьте версии этого развертывания:
$ kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment"
REVISION CHANGE-CAUSE
1 kubectl create -f nginx-deployment.yaml --record
2 kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
3 kubectl set image deployment/nginx-deployment nginx=nginx:1.91
Поскольку мы записали команду при создании этого развертывания с помощью --record, мыможно легко увидеть изменения, которые мы внесли в каждую ревизию.
Чтобы просмотреть подробную информацию о каждой ревизии, выполните:
$ kubectl rollout history deployment/nginx-deployment --revision=2
deployments "nginx-deployment" revision 2
Labels: app=nginx
pod-template-hash=1159050644
Annotations: kubernetes.io/change-cause=kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
Containers:
nginx:
Image: nginx:1.9.1
Port: 80/TCP
QoS Tier:
cpu: BestEffort
memory: BestEffort
Environment Variables: <none>
No volumes.
Теперь вы можете выполнить откат к предыдущей версии, используя команду:
$ kubectl rollout undo deployment/nginx-deployment
deployment "nginx-deployment" rolled back
Или вы можете выполнить откат к определенной версии:
$ kubectl rollout undo deployment/nginx-deployment --to-revision=2
deployment "nginx-deployment" rolled back
Для получения дополнительной информации, пожалуйста, прочитайте часть документации Kubernetes, относящуюся к Развертывание