Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
k8s:use [2024/09/01 05:51] admin создано |
k8s:use [2024/11/14 11:14] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | |||
+ | ===== Deployments ===== | ||
+ | Контроллер развертывания (Deployment controller) предоставляет возможность декларативного обновления для объектов типа поды (Pods) и наборы реплик (ReplicaSet)\\ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Кроме обычных, | ||
+ | |||
+ | В секции " | ||
+ | Кроме обязательных полей в секции " | ||
+ | |||
+ | :?: " | ||
+ | <code yaml> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Поле " | ||
+ | Поле " | ||
+ | |||
+ | " | ||
+ | Для второго случая есть доп параметры " | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | apiVersion: apps/v1 | ||
+ | kind: Deployment | ||
+ | metadata: | ||
+ | name: nginx-deployment | ||
+ | labels: | ||
+ | app: nginx | ||
+ | spec: | ||
+ | replicas: 3 | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: nginx | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: nginx | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: nginx | ||
+ | image: nginx:1.7.9 | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | </ | ||
+ | * Имя деплоймента " | ||
+ | * Три экземпляра пода (replicas) | ||
+ | * В поле селектора указано, | ||
+ | * В описании шаблона пода (template) указано " | ||
+ | * Деплоймент открывает 80й порт контейнера, | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | # Создаем объект (пар-р " | ||
+ | kubectl create -f nginx-deployment.yml --record | ||
+ | |||
+ | |||
+ | # Просмотр деплойментов | ||
+ | kubectl get deployments | ||
+ | |||
+ | |||
+ | # Текущий статус развертывания | ||
+ | kubectl rollout status deployment/ | ||
+ | |||
+ | |||
+ | # Деплойментом создается набор реплик (ReplicaSet) | ||
+ | kubectl get rs | ||
+ | |||
+ | |||
+ | # Увидеть какие поды к какому набору относятся, | ||
+ | kubectl get pods --show-labels | ||
+ | |||
+ | |||
+ | # Применение обновлений | ||
+ | kubectl apply -f nginx-deployment.yml | ||
+ | |||
+ | |||
+ | # Откат к предыдущей версии деплоймента (если есть в истории (--record)) | ||
+ | kubectl rollout history deployment/ | ||
+ | # Просмотр конкретной версии | ||
+ | kubectl rollout history deployment/ | ||
+ | |||
+ | kubectl rollout undo deployment/ | ||
+ | kubectl rollout undo deployment/ | ||
+ | |||
+ | |||
+ | # Скейлинг (увеличение/ | ||
+ | kubectl scale deployment nginx-deployment --replicas=10 | ||
+ | |||
+ | |||
+ | # Горизонтальное масштабирование подов (HPA) (если включено в кластере) | ||
+ | kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Docker Registry ==== | ||
+ | Поле " | ||
+ | |||
+ | |||
+ | === Private Registry === | ||
+ | K8s поддерживает несколько способов передачи кредлов для авторизации, | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | kubectl create secret docker-registry myregkey --docker-server=REG_URL --docker-username=USER --docker-password=PASSWD --docker-email=EMAIL | ||
+ | </ | ||
+ | |||
+ | Либо вариант с артефактом | ||
+ | <code yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: Secret | ||
+ | metadata: | ||
+ | name: myreskey | ||
+ | namespace: awesomeapps | ||
+ | data: | ||
+ | .dockerconfigjson: | ||
+ | type: kubernetes.io/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Применение | ||
+ | <code yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: foo | ||
+ | namespace: awesome | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: foo | ||
+ | image: myreg/ | ||
+ | imagePullSecrets: | ||
+ | - name: myregkey | ||
+ | </ | ||
+ | </ | ||
+ | |||
Строка 42: | Строка 199: | ||
limits: | limits: | ||
cpu: " | cpu: " | ||
+ | memory: " | ||
--- | --- | ||
resources: | resources: | ||
limits: | limits: | ||
cpu: " | cpu: " | ||
+ | memory: " | ||
--- | --- | ||
resources: | resources: | ||
limits: | limits: | ||
cpu: " | cpu: " | ||
+ | memory: " | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== Пробы приложения k8s ==== | ||
+ | Описываются в деплойменте, | ||
+ | У обоих есть параметры: | ||
+ | |||
+ | |||
+ | === liveness === | ||
+ | Проверка " | ||
+ | По умолчанию, | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | spec: | ||
+ | containers: | ||
+ | - image: quay.io/< | ||
+ | name: my-application-nginx | ||
+ | imagePullPolicy: | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | protocol: TCP | ||
+ | livenessProbe: | ||
+ | exec: | ||
+ | command: | ||
+ | - /bin/sh | ||
+ | - -c | ||
+ | - "[ -f / | ||
+ | initialDelaySeconds: | ||
+ | periodSeconds: | ||
+ | - image: quay.io/< | ||
+ | name: my-application-app-server | ||
+ | imagePullPolicy: | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | protocol: TCP | ||
+ | livenessProbe: | ||
+ | exec: | ||
+ | command: | ||
+ | - /bin/sh | ||
+ | - -c | ||
+ | - "/ | ||
+ | initialDelaySeconds: | ||
+ | periodSeconds: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === readiness === | ||
+ | Проверка готовности приложения к принятию сетевого трафика, | ||
+ | При фейле, среда выводит под из балансера, | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | spec: | ||
+ | containers: | ||
+ | - image: quay.io/< | ||
+ | name: my-application-nginx | ||
+ | imagePullPolicy: | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | protocol: TCP | ||
+ | readinessProbe: | ||
+ | httpGet: | ||
+ | scheme: HTTPS | ||
+ | path: /index.html | ||
+ | port: 8443 | ||
+ | initialDelaySeconds: | ||
+ | periodSeconds: | ||
+ | |||
+ | - image: quay.io/< | ||
+ | name: my-application-app-server | ||
+ | imagePullPolicy: | ||
+ | ports: | ||
+ | - containerPort: | ||
+ | protocol: TCP | ||
+ | readinessProbe: | ||
+ | httpGet: | ||
+ | scheme: HTTP | ||
+ | path: /healthz | ||
+ | port: 8080 | ||
+ | initialDelaySeconds: | ||
+ | periodSeconds: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Завершение приложения ==== | ||
+ | **terminationGracePeriodSecond** - макс период который k8s ожидает после отправки SIGTERM, перед отправкой " | ||
+ | Контейнеру дается это время для корректного, | ||
+ | Задается в блоке " | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === preStop === | ||
+ | Спец команда или HTTP-запрос, | ||
+ | А, похоже это альтернатива сигнала " | ||
+ | Хотя даже не альтернатива а доп код, для выполнения каких либо действий\\ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Приоритет подов ==== | ||
+ | В отличии от приоритета Linux, который задает как часто процесс будет исполняться, | ||
+ | |||
+ | Приоритет задается на под, целое число, чем больше тем выше приоритет\\ | ||
+ | |||
+ | |||
+ | === PriorityClass === | ||
+ | Это объект кластера, | ||
+ | Есть системные классы, | ||
+ | |||
+ | Есть доп поля:\\ | ||
+ | * globalDefault - задает этот класс классом по умолчанию для всех подов | ||
+ | * description - описание | ||
+ | * preemptionPolicy - доп политика поведения (см гугл) | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Манифест класса | ||
+ | <code yaml> | ||
+ | apiVersion: scheduling.k8s.io/ | ||
+ | kind: PriorityClass | ||
+ | metadata: | ||
+ | name: high-priority | ||
+ | value: 1000000 | ||
+ | globalDefault: | ||
+ | preemptionPolicy: | ||
+ | description: | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | kubectl get pc | ||
+ | </ | ||
+ | |||
+ | Применение | ||
+ | <code yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: openresty | ||
+ | labels: | ||
+ | app: openresty | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: openresty | ||
+ | image: openresty: | ||
+ | imagePullPolicy: | ||
+ | priorityClassName: | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== PodDisruptionBudget ==== | ||
+ | |||
+ | Позволяет контролировать какое кол-во подов приложения могут быть недоступны в момент времени. Т.е позволяет держать запущенными минимально необходимое кол-во подов приложения\\ | ||
+ | :!: PDB помогает только в случае добровольного прерывания, | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | apiVersion: policy/ | ||
+ | kind: PodDisruptionBudget | ||
+ | metadata: | ||
+ | name: app-pdb | ||
+ | spec: | ||
+ | maxUnavailable: | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: app | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code yaml> | ||
+ | apiVersion: policy/ | ||
+ | kind: PodDisruptionBudget | ||
+ | metadata: | ||
+ | name: app-pdb | ||
+ | spec: | ||
+ | minAvailable: | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: app | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Примеры ==== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code yaml> | ||
+ | apiVersion: v1 | ||
+ | kind: Pod | ||
+ | metadata: | ||
+ | name: named-port-pod | ||
+ | labels: | ||
+ | app: named-port-pod | ||
+ | spec: | ||
+ | containers: | ||
+ | - name: echoserver | ||
+ | image: gcr.io/ | ||
+ | ports: | ||
+ | - name: pod-custom-port | ||
+ | containerPort: | ||
+ | --- | ||
+ | apiVersion: v1 | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: named-port-svc | ||
+ | spec: | ||
+ | ports: | ||
+ | - port: 80 | ||
+ | targetPort: pod-custom-port | ||
+ | selector: | ||
+ | app: named-port-pod | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | <code yaml> | ||
+ | </ | ||
+ | </ | ||
+ |