Kubernetes создание своих ресурсов через CustomResourceDefinition или CustomApi

Создадим наш ресурс с именем Website, который будет содержать 2 поля: имя сайта и репозиторий git из которого надо взять файлы для сайта apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: websites.extensions.example.com spec: scope: Namespaced group: extensions.example.com version: v1 names: kind: Website singular: website plural: websites Создадим контроллер apiVersion: apps/v1beta1 kind: Deployment metadata: name: website-controller spec: replicas: […]

Read More &#8594

Kubernetes причина терминации пода

Для того чтобы было легче находить причину почему под прекратил свою работу, надо сделать запись в файл, который можно переопределить, вот пример apiVersion: v1 kind: Pod metadata: name: pod-with-termination-message spec: containers: — image: busybox name: main command: — sh — -c — ‘echo «I»ve had enough» > /var/termination-reason ; exit 1’ terminationMessagePath: /var/termination-reason  

Read More &#8594

Kubernetes удаление пода

K8S останавливает контейнеры по череди, а не убивает сразу весь под. Сначала устанавливается deletionTimestamp, после чего kubectl обнаруживает его, запускается процесс удаления Последовательность такая: Запускается предостановочные обработчик Отправляется сигнал SIGTERM Ожидание, пока контейнер завершится или не закончится льготный период Принудительное завершение SIGKILL Так можно установить льготный период kubectl delete po mypod —grace-period=5 Так можно удалить […]

Read More &#8594

Kubernetes обработчики жизненного цикла

Делятся на:  предстартовые постстартовые Могут выполнять: HTTP GET Команду внутри контейнера Постстартовый Выполняется сразу после запуска контейнера и используется для выполнения дополнительных команд при запуске приложения, если мы не можем или не хотим влиять на приложение. Пока обработчик не завершится, контейнер будет в состоянии Waiting с причиной ContainterCreating, а статус пода будет Pending. Если обработчик […]

Read More &#8594

Kubernetes init контейнеры в подах

Для того чтобы не пытаться запустить например web сервер, до того как запустится база, надо в поде web создать init контайнер, который будет проверять доступна ли база и как только база будет доступна, будет запущен web сервер apiVersion: v1 kind: Pod metadata: name: fortune-client spec: initContainers: — name: init image: busybox command: — sh — […]

Read More &#8594

Kubernetes сходство и антисходство модулей

Необходимо например когда frontend и backend должны быть рядом, для увеличения производительности Использование межмодульного сходства для развертывания подов на одном узле kubectl run backend -l app=backend —image busybox — sleep 999999 И создадим модули фронтенда, опираясь на метку app=backend apiVersion: extensions/v1beta1 kind: Deployment metadata: name: frontend spec: replicas: 5 template: metadata: labels: app: frontend spec: […]

Read More &#8594

Kubernetes приоритет узлов для подов

Цель, мы имеем 2 зоны в разных ДЦ и внутри каждой зоны 1 сервер для своих нужд и второй для партнёров Для начала надо сделать разметку узлов $ kubectl label node node1.k8s availability-zone=zone1 node «node1.k8s» labeled $ kubectl label node node1.k8s share-type=dedicated node «node1.k8s» labeled $ kubectl label node node2.k8s availability-zone=zone2 node «node2.k8s» labeled $ […]

Read More &#8594

Kubernetes разрешение узлов для подов

Каждый узел имеет метки, чтобы их просмотреть kubectl describe node gke-kubia-default-pool-db274c5a-mjnf Например последние 3 метки, это зона, регион и имя узла, их можно использовать в поде для выбора узла Указание жестких правил сходства узлов Можно использовать селекто меток, но можно использовать правило сходства узлов apiVersion: v1 kind: Pod metadata: name: kubia-gpu spec: affinity: nodeAffinity: requeredDuringSchedulingIngnoredDuringEcecution: […]

Read More &#8594