Учебник 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Значение в нашем определении развертыванияТеперь мы увидим, что происходит, когда мы обновляем развертывание и какова роль
Набор репликиПри обновлении развертываний
Обновление развертывания
- Теперь мы изменим
nginxID изображения от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»