Deployment
Deployments наиболее популярный способ для запуска приложений без сохранения состояния. Это добавляет проверку состояния, масштабирование, восстановление.
Реализовано через deployment контроллер. Каждый контроллер управляет одним или несколькими одинаковыми подами.
Масштабирование (Scalling)
Существуют несколько типов
Тип | Описание |
Horizontal Pod Autoscaler | Масштабирование количества подов, наиболее часто используется. |
Vertical Pod Autoscaler | Масштабирование ресурсов, потребляемых подами. Не установлен по умолчанию. Редко используется |
Cluster Autoscaler | Добавляет/удаляет ноды. По умолчанию, часто используется. |
Например, указываем кол-во подов от 2 до 10. Нагрузка повысилась, и HPA запрашивает еще 2 пода. Они запускаются. Но нагрузка растет, и запрашивается еще 2 пода. Однако на существующем кластере нет возможности запустить еще 2 пода, и они переходят в статус Pending. CA определяет Pending поды и увеличивает количество нодов, запуская там поды. И наоборот.
Масштабирование связано с понятием текущего состояния (state). Есть необходимое состояние и наблюдаемое состояние. При неравенстве контроллер запускает процесс изменений.
Важно: архитектура приложения должна поддерживать возможность масштабирования. Микросервисы должны взаимодействовать только через API. При увеличении количества, добавляется новый под.
Реплики
ReplicaSets - набор настроек и подов с одной версией конфигурации. При обновлении yaml создается вторая ReplicaSet и один новый под. Из старой ReplicaSet удаляется один под. И так далее до полного обновления. Но конфигурация сохраняется. Можно вернуть к старым настройкам.
Структура YAML файла
Верхний уровень
Параметр | Описание |
kind | Тип, в данном случае Deployments |
spec | Спецификация |
spec
Параметр | Описание |
strategy | Стратегия восстановления |
replicas | кол-во реплик |
selector | правила выбора меток |
template | описание шаблона (все аналогично описанию пода) |
Примеры
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deploy
spec:
replicas: 10
selector:
matchLabels:
app: hello-world
revisionHistoryLimit: 5
progressDeadlineSeconds: 300
minReadySeconds: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-pod
image: nigelpoulton/k8sbook:1.0
ports:
- containerPort: 8080
resources:
limits:
memory: 128Mi
cpu: 0.1
Пример сервиса для данного приложения
apiVersion: v1
kind: Service
metadata:
name: lb-svc
labels:
app: hello-world
spec:
type: LoadBalancer
ports:
- port: 8080
protocol: TCP
selector:
app: hello-world
Основные команды
Команда | Доп. пар. | Описание |
kubectl get deploy dep_name | статус | |
kubectl describe deploy dep-name | Расширенная информация | |
kubectl get rs | Список реплик | |
kubectl scale | deploy dep_name --replicas count | Императивное масштабирование. Нежелательно. |
kubectl rollout status deployment dep_name | Статус обновления подов | |
kubectl rollout pause deploy dep_name | Приостановка обновления | |
kubectl describe deploy dep_name | Отображает в частности список роллбеков | |
kubectl rollout history deployment dep_name | История роллбеков | |
kubectl rollout undo deployment hello-deploy --to-revision=1 | Возврат. Быстро, но не рекомендуется. Лучше через загрузку старого файла из репозитория и обновление. |
No Comments