Рубрики
Uncategorized

Kubernetes Обучение Часть III: Ресурсы рабочей нагрузки K8S — развертывание и реплиз

Содержание Введение Kubernetes Object Management K8S Рабочая нагрузка … Помечено с Куберовщиками, начинающими, учебниками, DevOps.

Учебник Kubernetes (4 части серии)

Оглавление

  • Введение
  • Управление объектом Kubernetes
  • Ресурсы рабочей нагрузки K8S
  • Развертывание
  • Создание развертывания
  • Набор реплик
  • Обновление развертывания
  • Спец селектор поведение набора реплики
  • Вывод
  • Библиография

Введение

  • Эта статья является частью серии обучения Kubernetes
  • Поскольку мы собираемся обсудить концепции, эта статья теоретическая и TLDR в природе:-)
  • Пожалуйста, сделайте оформление заказа Kubernetes Surlege Series Для других частей в серии

Ресурсы рабочей нагрузки K8S

Kubernetes предоставляет несколько встроенных ресурсов рабочей нагрузки:

  • Развертывание и Реплиз (Замена устаревшего репликации ресурсовController). Развертывание является хорошим пригодным для управления рабочей нагрузкой в приложении без гражданства на вашем кластере, где любой POD в развертывании взаимозаменяется и может быть заменен при необходимости.
  • Сосредоточенное положение позволяет вам запустить один или несколько связанных Стручки которые каким-то образом отслеживают состояние. Например, если ваша рабочая нагрузка записывает данные настойчиво, вы можете запустить Сосредоточенное положение который соответствует каждому POD с ПерсистентВолюю Отказ Ваш код, работает в Стручки Для этого Сосредоточенное положение , может реплицировать данные на другие стручки в том же состоянии для улучшения общей устойчивости.
  • Daemonset Определяет Стручки которые обеспечивают узел-местные объекты. Они могут быть фундаментальными для работы вашего кластера, такого как сетевой помощник инструмента или являетесь частью дополнения. Каждый раз, когда вы добавляете узел в свой кластер, который соответствует спецификации в A Daemonset , Управляющий самолет Расписание 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»