Сегодня предлагаю разобрать следующий по списку объект 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)

От DevOps

DevOps or not...