Учебник Kubernetes (4 части серии)
Оглавление
- Введение
- Управление объектом Kubernetes
- Ресурсы рабочей нагрузки K8S
- Развертывание
- Создание развертывания
- Набор реплик
- Обновление развертывания
- Спец селектор поведение набора реплики
- Вывод
- Библиография
Введение
- Эта статья является частью серии обучения Kubernetes
- Поскольку мы собираемся обсудить концепции, эта статья теоретическая и
TLDR
в природе:-) - Пожалуйста, сделайте оформление заказа Kubernetes Surlege Series Для других частей в серии
Ресурсы рабочей нагрузки K8S
Kubernetes предоставляет несколько встроенных ресурсов рабочей нагрузки:
Развертывание
иРеплиз
(Замена устаревшего репликации ресурсовController). Развертывание является хорошим пригодным для управления рабочей нагрузкой в приложении без гражданства на вашем кластере, где любой POD в развертывании взаимозаменяется и может быть заменен при необходимости.Сосредоточенное положение
позволяет вам запустить один или несколько связанныхСтручки
которые каким-то образом отслеживают состояние. Например, если ваша рабочая нагрузка записывает данные настойчиво, вы можете запуститьСосредоточенное положение
который соответствует каждому POD сПерсистентВолюю
Отказ Ваш код, работает вСтручки
Для этогоСосредоточенное положение
, может реплицировать данные на другие стручки в том же состоянии для улучшения общей устойчивости.Daemonset
ОпределяетСтручки
которые обеспечивают узел-местные объекты. Они могут быть фундаментальными для работы вашего кластера, такого как сетевой помощник инструмента или являетесь частью дополнения. Каждый раз, когда вы добавляете узел в свой кластер, который соответствует спецификации в ADaemonset
,Управляющий самолет
Расписание AСтручок
Для этогоDaemonset
на новый узел.Работа
иCronjob
Определите задачи, которые работают до завершения, а затем остановитесь. Работа представляют одноразовые задачи, тогда как Cronjobs Recur в соответствии с графиком.В этой статье мы увидим о управлении набором развертывания и реплики и поведение при обновлении развертываний
Управление объектом Kubernetes
Когда мы говорим о создании определения манифеста Kubernetes, важно знать о 3 типа управления объектами
kubectl
Инструмент поддерживает три вида объекта управления:Императивные команды :
- При использовании императивных команд пользователь работает непосредственно на живых объектах в кластере. Пользователь предоставляет операции в команду kubectl как аргументы или флаги.
- Это рекомендуемый способ начать или запустить разовую задачу в кластере. Поскольку эта техника работает непосредственно на живых объектах, оно не дает истории предыдущих конфигураций.
kubectl create deployment nginx --image nginx
Императивная конфигурация объекта :
- В конфигурации императивных объектов команда KUBECTL указывает операцию (создание, заменить и т. Д.), Дополнительные флаги и, по меньшей мере, одно имя файла. Указанный файл должен содержать полное определение объекта в формате YAML или JSON.
kubectl create -f nginx.yaml
Кроме того, мы можем использовать Kubectl Edit
, Kubectl Удалить
и kubectl заменить
В этом методе конфигурации объекта
Декларативная конфигурация объекта :
- При использовании декларативной конфигурации объекта пользователь работает на файлах конфигурации объекта, сохраненным локально, однако пользователь не определяет операции, которые необходимо предпринять в файлах.
- Операции создания, обновления и удаления автоматически обнаруживаются на объект kubectl.
- Это позволяет работать по каталогам, где могут потребоваться различные операции для разных объектов.
Развертывание
- А Развертывание Предоставляет декларативные обновления для стручек и реплиссетов.
- Мы можем описать желаемое состояние в развертывании, а контроллер развертывания изменяет фактическое состояние в желаемое состояние.
- Развертывания могут использоваться для создания новых реплизментов или для удаления существующих развертываний и принять все их ресурсы с новыми развертываниями.
- Пример развертывания. Это создает реплиз, чтобы увеличить 3 стручки Nginx:
- Создайте развертывание и сохранить его как
развертывание
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.21-alpine ports: - containerPort: 80 resources: limits: memory: "128Mi" cpu: "500m"
В этом примере:
Развертывание по имени
Nginx-развертывание
создается, указан.МЕТИАДАТА. Нравится
поле.Развертывание создает 3 реплицированных стручка, указанных
.spec.reppleas
поле..spec.selector.
Поле определяет, как развертывание находит, какие PODS управлять. В этом случае вы выбираете метку, определяемую в шаблоне POD (приложение: nginx
).Поле шаблона содержит следующие подпольные поля:
- Стручки помечены
Приложение: Nginx
используя.МЕТИАДАТА. Labels
поле. - Спецификация шаблона POD или
.template.spec field
указывает на то, что стручки бегают одинnginx
Контейнер, который запускаетNginx Docker Hub Image
в версии1.21-ALPINE.
.
- Стручки помечены
Создайте один контейнер и имя NGINX, используя
.spec.template.spec.containers [0] .Name
поле.
Создание развертывания
- Теперь давайте попробуем разные
kubectl
Команды, чтобы узнать о ресурсе рабочей нагрузки развертывания K8S Беги
Minikube Start
Чтобы начать начать локальный кластер K8SИспользовать
Kubectl Apply -F
Для выполнения манифеста развертывания
#:~/github/learning2021/kubernetes$ kubectl apply -f deployment.yml deployment.apps/nginx-deployment created
- Использовать
Kubectl Получить развертывание
команда, чтобы прочитать раскрытие развертывания
#:~/github/learning2021/kubernetes$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE nginx-deployment 3/3 3 3 76s
- Наше определение манифеста имеет 3 реплика NGINX POD, определенного в нем.
- Перечислите стручки, используя команду
Kubectl Получить По
#:~/github/learning2021/kubernetes$ kubectl get po NAME READY STATUS RESTARTS AGE nginx-deployment-c7768ddc9-6cxtc 1/1 Running 0 80s nginx-deployment-c7768ddc9-g7v7c 1/1 Running 0 80s nginx-deployment-c7768ddc9-hcj4s 1/1 Running 0 80s
- Наборы реплики можно просматривать с помощью команды
Kubectl Получить RS
#:~/github/learning2021/kubernetes$ kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-c7768ddc9 3 3 3 101s
- Теперь позвольте нам описать развертывание, которое мы только что создали.
- Используйте команду
Kubectl Опишите
#:~/github/learning2021/kubernetes$ kubectl describe deployment nginx-deployment Name: nginx-deployment Namespace: default CreationTimestamp: Thu, 01 Oct 2021 12:27:22 +0530 Labels: app=nginx Annotations: deployment.kubernetes.io/revision: 1 Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.21-alpine Port: 80/TCP Host Port: 0/TCP Limits: cpu: 500m memory: 128Mi Environment:Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: nginx-deployment-c7768ddc9 (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m8s deployment-controller Scaled up replica set nginx-deployment-c7768ddc9 to 3
Набор реплик
- Цель Реплиз состоит в том, чтобы поддерживать стабильный набор репликных стручков в любой момент времени.
Таким образом, он часто используется для гарантии наличия указанного количества идентичных стручков.
Рекомендуется использовать реплика-набор в определении развертывания. Поскольку развертывание — это концепция более высокого уровня, которая управляет наборами реплики и обеспечивает декларативные обновления для стручек вместе с большим количеством других полезных функций.
Набор реплики упоминается с помощью
spec.replicas
Значение в нашем определении развертыванияТеперь мы увидим, что происходит, когда мы обновляем развертывание и какова роль
Набор реплики
При обновлении развертываний
Обновление развертывания
- Теперь мы изменим
nginx
ID изображения от1.21-Alpine
к1.21.
- Мы не будем обновлять определение развертывания, используя
Kubectl Edit
команда
#:~/github/learning2021/kubernetes$ kubectl edit deployment/nginx-deployment deployment.apps/nginx-deployment edited
- Мы обновили развертывание, которое уже имеет работу подвода
- Итак, давайте проверьте состояние развертывания, используя
Kubectl Rollout
команда
#:~/github/learning2021/kubernetes$ kubectl rollout status deployment/nginx-deployment deployment "nginx-deployment" successfully rolled out
- Как только развертывание будет завершено, мы проверим статус
стручки
иРазвертывание
ИспользованиеKubectl описывает
команда
#:~/github/learning2021/kubernetes$ kubectl describe deployment nginx-deployment Name: nginx-deployment Namespace: default CreationTimestamp: Thu, 16 Sep 2021 12:27:22 +0530 Labels: app=nginx Annotations: deployment.kubernetes.io/revision: 2 Selector: app=nginx Replicas: 3 desired | 3 updated | 3 total | 3 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.21 Port: 80/TCP Host Port: 0/TCP Limits: cpu: 500m memory: 128Mi Environment:Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: NewReplicaSet: nginx-deployment-6f88dfb7c7 (3/3 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 7m45s deployment-controller Scaled up replica set nginx-deployment-c7768ddc9 to 3 Normal ScalingReplicaSet 52s deployment-controller Scaled up replica set nginx-deployment-6f88dfb7c7 to 1 Normal ScalingReplicaSet 39s deployment-controller Scaled down replica set nginx-deployment-c7768ddc9 to 2 Normal ScalingReplicaSet 39s deployment-controller Scaled up replica set nginx-deployment-6f88dfb7c7 to 2 Normal ScalingReplicaSet 38s deployment-controller Scaled down replica set nginx-deployment-c7768ddc9 to 1 Normal ScalingReplicaSet 38s deployment-controller Scaled up replica set nginx-deployment-6f88dfb7c7 to 3 Normal ScalingReplicaSet 37s deployment-controller Scaled down replica set nginx-deployment-c7768ddc9 to 0
Теперь давайте ущербным соблюдаем поведение развертывания и реплики
описано
выше,- Развертывание гарантирует, что только определенное количество стручков снижается, пока они обновляются. По умолчанию он гарантирует, что по меньшей мере 75% желаемого количества стручков находятся (25% MAX недоступно).
- Развертывание также гарантирует, что над желаемым количеством стручков создается только определенное количество стручков. По умолчанию он гарантирует, что не более 125% желаемого количества стручков (25% Max Right).
- Здесь вы видите, что когда вы впервые создали развертывание, он создал реплиз (Nginx-развертывание-2035384211) и масштабировал его напрямую до 3 реплик.
- Когда вы обновили развертывание, он создал новый реплиз (NGINX-развертывание-1564180365) и масштабировал его до 1, а затем масштабировал старый реплиз на 2, так что по крайней мере 2 стручка были доступны и на большинстве 4 стручка были созданы на все время.
- Затем он продолжил масштабирование вверх и вниз по новой и старой реплизке, с тем же стратегией обновления Rolling. Наконец, у вас будет 3 доступных реплика в новом реплизке, а старый реплизет масштабируется до 0.
Спец селектор поведение набора реплики
- Каждый раз, когда новое развертывание наблюдается контроллером развертывания, создается реплиз, чтобы вызвать желаемые стручки.
- Оказавшись, если развертывание обновляется, существующий реплиз, который контролирует стручки, чьи этикетки совпадают
.spec.selector.
Но чей шаблон не совпадает.spec.template
масштабированы. - В конце концов, новый
Реплиз
масштабируется до.spec.replicas.
И все старыеРеплизетки
масштабируется до0
Отказ
#:~/github/learning2021/kubernetes$ kubectl get rs NAME DESIRED CURRENT READY AGE nginx-deployment-6f88dfb7c7 3 3 3 69s nginx-deployment-c7768ddc9 0 0 0 8m2s #:~/github/learning2021/kubernetes$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-deployment-6f88dfb7c7-25z2c 1/1 Running 0 106s nginx-deployment-6f88dfb7c7-m7hst 1/1 Running 0 119s nginx-deployment-6f88dfb7c7-zrbc2 1/1 Running 0 105s #:~/github/learning2021/kubernetes$ kubectl describe pod nginx-deployment-6f88dfb7c7-25z2c Name: nginx-deployment-6f88dfb7c7-25z2c Namespace: default Priority: 0 Node: minikube/192.168.49.2 Start Time: Thu, 16 Sep 2021 12:34:28 +0530 Labels: app=nginx pod-template-hash=6f88dfb7c7 Annotations:Status: Running IP: 172.17.0.5 IPs: IP: 172.17.0.5 Controlled By: ReplicaSet/nginx-deployment-6f88dfb7c7 Containers: nginx: Container ID: docker://9fd85eb81263d16bc73752a1275c35d6cdc0eb3074734d0820bd327eb39b30b2 Image: nginx:1.21 Image ID: docker-pullable://nginx@sha256:853b221d3341add7aaadf5f81dd088ea943ab9c918766e295321294b035f3f3e Port: 80/TCP Host Port: 0/TCP State: Running Started: Thu, 16 Sep 2021 12:34:29 +0530 Ready: True Restart Count: 0 Limits: cpu: 500m memory: 128Mi Requests: cpu: 500m memory: 128Mi Environment: Mounts: /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-4b8m4 (ro) Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True Volumes: kube-api-access-4b8m4: Type: Projected (a volume that contains injected data from multiple sources) TokenExpirationSeconds: 3607 ConfigMapName: kube-root-ca.crt ConfigMapOptional: DownwardAPI: true QoS Class: Guaranteed Node-Selectors: Tolerations: node.kubernetes.io/not-ready:NoExecute op=Exists for 300s node.kubernetes.io/unreachable:NoExecute op=Exists for 300s Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m18s default-scheduler Successfully assigned default/nginx-deployment-6f88dfb7c7-25z2c to minikube Normal Pulled 2m18s kubelet Container image "nginx:1.21" already present on machine Normal Created 2m18s kubelet Created container nginx Normal Started 2m18s kubelet Started container nginx
Вывод
- В этом блоге мы видели концепции развертывания и набора реплики и их поведение
- В следующем блоге мы увидим о
Государственные наборы
Библиография
рабочие нагрузки Развертывание Реплизет
Учебник Kubernetes (4 части серии)
Оригинал: «https://dev.to/chefgs/kubernetes-learning-part-iii-k8s-workload-resources-deployment-and-replicaset-182n»