Kubernetes. Deployment. Разворачиваем приложение из заранее созданного Docker-образа

Материал из Wiki
Перейти к навигации Перейти к поиску

Описание

Deployment - деплой в кластер

Это такая расширенная версия ReplicaSet.

Переходим к следующей абстракции Kubernetes - Deployment. Они управляют наборами replicaset для непрерывного обновления подов. Покажу на примере, о чем идет речь. Допустим, у вас вышло обновление приложения в новом контейнере. Вам нужно не останавливая сервис выкатить обновление в прод. Если вы измените версию контейнера в шаблоне replicaset, автоматически он у вас не обновится. Да, если pod со старой версией контейнера упадет, новый будет создан уже с новой версией. Но все работающие поды останутся на старой версии.

Deployment как раз и нужен для управления репликасетами, задавая им стратегию обновления. У вас вышла новая версия контейнера, вы заменяете в текущем deployment версию контейнера и он по заранее настроенным правилам начинает перезапуск репликасетов и соответственно подов в них.

Настройка

Пример 1. Nginx

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 и доступен через Интернет

Доступ из веб-браузера (МОЖНО ПРОЙТИ ПО IP ЛЮБОЙ НОДЫ КЛАСТЕРА KUBERNETES)

http://192.168.199.184:32032/

http://192.168.199.186:32032/

http://192.168.199.180:32032/

Удалить deployment

kubectl delete deployment nginx02