Сегодня предлагаю разобрать следующий по списку объект Kubernetes, а именно Deployment.
Создание и управление Deployments
Команда для создания deployment выглядит так:
kubectl create deployment DEPLOYMENT_NAME --image IMAGE_NAME
Чтобы посмотреть список созданных deployment:
kubectl get deployments
Как и у Pods, у deployments есть команда для отображения подробной информации:
kubectl describe deployments DEPLOYMENT_NAME
Для скейлинга деплоймента можно использовать такую команду:
kubectl scale deployment DEPLOYMENT_NAME --replicas NUM_OF_REPLICAS
Для проверки, что команда сработала вводим:
kubectl get pods
После скейлинга можно посмотреть параметр replica set:
kubectl get rs
Эта команда выводит информация о количестве подов, которые должны быть запущены в деплойменте.
И теперь, если вы удалите Pod, то он автоматически перезапустится. Таким образом Deployment всегда будет поддерживать количество работающих подов, которое было указано при скейлинге.
Так же можно сделать автоскейлинг:
kubectl autoscale deployment DEPLOYMENT_NAME --min=MIN_NUM_REPLICS --max=MAX_NUM_REPLICAS --cpu-percent=CPU_PERCENT_NUM
Команда для проверки:
kubectl get hpa
Deployment также можно создать с помощью YAML файла. С минимально необходимым YAML файлом вы можете ознакомиться в моем GitHub`е.
И для запуска deployment через yaml файл используется вот такая команда:
kubectl apply -f FILE_NAME.yaml
Для удаления deployment есть команда delete:
kubectl delete deployments DEPLOYMENT_NAME
Обновление Docker Image в Deployment
Посмотреть историю обновлений:
kubectl rollout history deployment/DEPLOYMENT_NAME
Команда для обновления вот такая:
kubectl set image deployment/DEPLOYMENT_NAME CONTAINER_NAME=UPDATED_CONTAINER_NAME --record
Для просмотра статуса обновления:
kubectl rollout status deployment/DEPLOYMENT_NAME
А как откатить последнее выполненное обновление? Легко:
kubectl rollout undo deployment/DEPLOYMENT_NAME
Можно откатиться на любую ревизию:
kubectl rollout undo deployment/DEPLOYMENT_NAME --to-revision=REVISION_NUM
Как обновиться, если вместо версии вы ранее указали latest? Вот так:
kubectl rollout restart deployment/DEPLOYMENT_NAME
Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)