Kubernetes. Deployment. Разворачиваем приложение из заранее созданного Docker-образа
Описание
Deployment - деплой в кластер
Переходим к следующей абстракции Kubernetes - Deployment. Они управляют наборами replicaset для непрерывного обновления подов. Покажу на примере, о чем идет речь. Допустим, у вас вышло обновление приложения в новом контейнере. Вам нужно не останавливая сервис выкатить обновление в прод. Если вы измените версию контейнера в шаблоне replicaset, автоматически он у вас не обновится. Да, если pod со старой версией контейнера упадет, новый будет создан уже с новой версией. Но все работающие поды останутся на старой версии.
Deployment как раз и нужен для управления репликасетами, задавая им стратегию обновления. У вас вышла новая версия контейнера, вы заменяете в текущем deployment версию контейнера и он по заранее настроенным правилам начинает перезапуск репликасетов и соответственно подов в них.
Настройка
nano ./deployment-nginx.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: nginx02 spec: replicas: 2 selector: matchLabels: app: nginx02 strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 1 type: RollingUpdate template: metadata: labels: app: nginx02 spec: containers: - image: nginx:1.16 name: nginx02 ports: - containerPort: 80
kubectl apply -f deployment-nginx.yaml
kubectl get deployment -o wide
... NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx02 2/2 2 2 10m nginx02 nginx:1.16 app=nginx02 ...
kubectl get pod -o wide
... NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx02-59dc87447c-9nrkj 1/1 Running 0 10m 172.16.213.141 kub-node-1 <none> <none> nginx02-59dc87447c-d7vf5 1/1 Running 0 10m 172.16.213.77 kub-node-2 <none> <none> ...
nano ./service.yaml
apiVersion: v1 kind: Service metadata: name: nginx02 spec: ports: - port: 80 targetPort: 80 selector: app: nginx02 type: NodePort
kubectl apply -f service.yaml
kubectl get svc -o wide
... NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d12h <none> nginx02 NodePort 10.101.196.165 <none> 80:32032/TCP 6m41s app=nginx02 ...
Nginx Pod теперь развернут в кластере Kubernetes и доступен через Интернет
Доступ из веб-браузера
http://192.168.169.169:32032/
Удалить deployment
kubectl delete deployment nginx02