Инструменты пользователя

Инструменты сайта


k8s:use

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
k8s:use [2024/09/03 15:20]
admin
k8s:use [2024/11/14 11:14] (текущий)
admin
Строка 112: Строка 112:
  
  
-=== Docker Registry ===+==== Docker Registry ====
 Поле "imagePullPolicy" указывает политику скачивания образов, варианты "IfNotPresent" и "Always" (есть еще latest но вроде не рекоммендуется)\\ Поле "imagePullPolicy" указывает политику скачивания образов, варианты "IfNotPresent" и "Always" (есть еще latest но вроде не рекоммендуется)\\
  
  
-== Private Registry ==+=== Private Registry ===
 K8s поддерживает несколько способов передачи кредлов для авторизации, от google, aws и тд. один из вариантов это указать "ImagePullSecrets" в описании пода\\ K8s поддерживает несколько способов передачи кредлов для авторизации, от google, aws и тд. один из вариантов это указать "ImagePullSecrets" в описании пода\\
  
Строка 199: Строка 199:
   limits:   limits:
     cpu: "1"     cpu: "1"
 +    memory: "1G"
 --- ---
 resources: resources:
   limits:   limits:
     cpu: "0.5"     cpu: "0.5"
 +    memory: "0.5G"
 --- ---
 resources: resources:
   limits:   limits:
     cpu: "500m"     cpu: "500m"
 +    memory: "500M"
 </code> </code>
 +
 +
 +
 +==== Пробы приложения k8s ====
 +Описываются в деплойменте, в блоке "containers"\\
 +У обоих есть параметры: "initialDelaySeconds", "periodSeconds", "timeoutSeconds", "successThreshold", "failureThreshold", "terminationGracePeriodSeconds"\\
 +
 +
 +=== liveness ===
 +Проверка "живучести" контейнера, отвечает "да" или "нет" на вопрос запущено ли приложение\\
 +По умолчанию, для этого оценивается процесс с PID 1, на основании его состояния делаются такие выводы, в случае фейла, среда перезапускает под\\
 +
 +
 +<details>
 +<summary>:!: Примеры</summary>
 +<code yaml>
 +    spec:
 +      containers:
 +      - image: quay.io/<username>/my-application-nginx:latest
 +        name: my-application-nginx
 +        imagePullPolicy: Always
 +        ports:
 +        - containerPort: 8443
 +          protocol: TCP
 +        livenessProbe:
 +          exec:
 +            command:
 +            - /bin/sh
 +            - -c
 +            - "[ -f /run/nginx.pid ] && ps -A | grep nginx"
 +          initialDelaySeconds: 10
 +          periodSeconds: 5
 +      - image: quay.io/<username>/my-application-app-server:latest
 +        name: my-application-app-server
 +        imagePullPolicy: Always
 +        ports:
 +        - containerPort: 8080
 +          protocol: TCP
 +        livenessProbe:
 +          exec:
 +            command:
 +            - /bin/sh
 +            - -c
 +            - "/usr/bin/my-application-web --alive"
 +          initialDelaySeconds: 10
 +          periodSeconds: 5
 +</code>
 +</details>
 +
 +
 +
 +=== readiness ===
 +Проверка готовности приложения к принятию сетевого трафика, эта проверка для того чтобы отделить период инициализации приложения\\
 +При фейле, среда выводит под из балансера, но ничего не делает с самим подом, считает что приложение скоро само придет в статус готовности\\
 +
 +<details>
 +<summary>:!: Примеры</summary>
 +<code yaml>
 +    spec:
 +      containers:
 +      - image: quay.io/<username>/my-application-nginx:latest
 +        name: my-application-nginx
 +        imagePullPolicy: Always
 +        ports:
 +        - containerPort: 8443
 +          protocol: TCP
 +        readinessProbe:
 +          httpGet:
 +            scheme: HTTPS
 +            path: /index.html
 +            port: 8443
 +          initialDelaySeconds: 10
 +          periodSeconds: 5
 +
 +      - image: quay.io/<username>/my-application-app-server:latest
 +        name: my-application-app-server
 +        imagePullPolicy: Always
 +        ports:
 +        - containerPort: 8080
 +          protocol: TCP
 +        readinessProbe:
 +          httpGet:
 +            scheme: HTTP
 +            path: /healthz
 +            port: 8080
 +          initialDelaySeconds: 10
 +          periodSeconds: 5
 +</code>
 +</details>
 +
 +
 +==== Завершение приложения ====
 +**terminationGracePeriodSecond** - макс период который k8s ожидает после отправки SIGTERM, перед отправкой "SIGKILL" и принудительным завершением.\\
 +Контейнеру дается это время для корректного, самостоятельного завершения, дается "не больше" этого времени\\
 +Задается в блоке "containers" в деплойменте, по умолчанию 30 сек\\
 +
 +
 +
 +
 +=== preStop ===
 +Спец команда или HTTP-запрос, который отправляется контейнерам в поде\\
 +А, похоже это альтернатива сигнала "SIGTERM" для приложения, если оно некорректно завершается от этого сигнала и нет возможности править само приложение\\
 +Хотя даже не альтернатива а доп код, для выполнения каких либо действий\\
 +
 +
 +
 +
 +
 +==== Приоритет подов ====
 +В отличии от приоритета Linux, который задает как часто процесс будет исполняться, приоритет k8s задает в каком порядке поды будут убиваться при дефиците ресурсов или недостатке ресурсов при размещении новых подов, сравнивается приоритет нового пода с существующими\\
 +
 +Приоритет задается на под, целое число, чем больше тем выше приоритет\\
 +
 +
 +=== PriorityClass ===
 +Это объект кластера, не привязываемый к namespace. Присваивает имя целочисленному значению приоритета\\
 +Есть системные классы, созданные для служебных объектов\\
 +
 +Есть доп поля:\\
 +  * globalDefault - задает этот класс классом по умолчанию для всех подов
 +  * description - описание
 +  * preemptionPolicy - доп политика поведения (см гугл) 
 +
 +
 +<details>
 +<summary>:!: Примеры</summary>
 +Манифест класса
 +<code yaml>
 +apiVersion: scheduling.k8s.io/v1
 +kind: PriorityClass
 +metadata:
 +  name: high-priority
 +value: 1000000
 +globalDefault: false
 +preemptionPolicy: Never
 +description: "The maximal priority on the cluster"
 +</code>
 +
 +<code bash>
 +kubectl get pc
 +</code>
 +
 +Применение
 +<code yaml>
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  name: openresty
 +  labels:
 +    app: openresty
 +spec:
 +  containers:
 +  - name: openresty
 +    image: openresty:latest
 +    imagePullPolicy: IfNotPresent
 +  priorityClassName: high-priority
 +</code>
 +</details>
 +
 +
 +
 +
 +
 +
 +
 +
 +==== PodDisruptionBudget ====
 +
 +Позволяет контролировать какое кол-во подов приложения могут быть недоступны в момент времени. Т.е позволяет держать запущенными минимально необходимое кол-во подов приложения\\
 +:!: PDB помогает только в случае добровольного прерывания, k8s не даст остановить под пока указанная политика не будет выполнена, в случае непредвиденного сбоя, эта ф-я ес-но не поможет\\
 +
 +
 +
 +<details>
 +<summary>:!: Примеры</summary>
 +<code yaml>
 +apiVersion: policy/v1beta1
 +kind: PodDisruptionBudget
 +metadata:
 +  name: app-pdb
 +spec:
 +  maxUnavailable: 1
 +  selector:
 +    matchLabels:
 +      app: app
 +</code>
 +
 +
 +<code yaml>
 +apiVersion: policy/v1beta1
 +kind: PodDisruptionBudget
 +metadata:
 +  name: app-pdb
 +spec:
 +  minAvailable: 80%
 +  selector:
 +    matchLabels:
 +      app: app
 +</code>
 +</details>
 +
 +
 +
 +
 +
 +==== Примеры ====
 +
 +<details>
 +<summary>:!: Именованные порты сервиса</summary>
 +<code yaml>
 +apiVersion: v1
 +kind: Pod
 +metadata:
 +  name: named-port-pod
 +  labels:
 +    app: named-port-pod
 +spec:
 +  containers:
 +    - name: echoserver
 +      image: gcr.io/google_containers/echoserver:1.4
 +      ports:
 +      - name: pod-custom-port
 +        containerPort: 8080
 +---
 +apiVersion: v1
 +kind: Service
 +metadata:
 +  name: named-port-svc
 +spec:
 +  ports:
 +    - port: 80
 +      targetPort: pod-custom-port
 +  selector:
 +    app: named-port-pod
 +</code>
 +</details>
 +
 +
 +
 +
 +<details>
 +<summary>:!: </summary>
 +
 +<code yaml>
 +</code>
 +</details>
 +
k8s/use.1725376824.txt.gz · Последнее изменение: 2024/09/03 15:20 — admin