Развертывание приложения Kubernetes без отслеживания состояния с помощью kubectl на устройстве Azure Stack Edge Pro GPU

ОБЛАСТЬ ПРИМЕНЕНИЯ:Yes for Pro GPU SKUAzure Stack Edge Pro — GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure Stack Edge Mini R

В этой статье описывается, как развернуть приложение без отслеживания состояния с помощью команд kubectl в существующем кластере Kubernetes. В этой статье также описывается процесс создания и настройки модулей pod в приложении без отслеживания состояния.

Необходимые компоненты

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

  • У вас есть учетные данные для входа на устройство Azure Stack Edge Pro с 1 узлом.

  • В клиентской системе Windows установлен Windows PowerShell 5.0 или более поздней версии для доступа к устройству Azure Stack Edge Pro. Также можно использовать любой другой клиент с поддерживаемой операционной системой. В этой статье описывается процедура с использованием клиента Windows. Чтобы скачать последнюю версию Windows PowerShell, перейдите к статье Установка Windows PowerShell.

  • На устройстве Azure Stack Edge Pro включено вычисление. Чтобы включить вычисление, перейдите на страницу Вычисление в локальном пользовательском интерфейсе устройства. Выберите сетевой интерфейс, который будет использоваться для вычислений. Выберите Включить. В результате включения вычислений будет создан виртуальный коммутатор на вашем устройстве в этом сетевом интерфейсе. Дополнительные сведения см. в разделе Включение сети вычислений на устройстве Azure Stack Edge Pro.

  • На устройстве Azure Stack Edge Pro работает сервер кластера Kubernetes версии 1.9 или более поздней. Дополнительные сведения см. в статье Создание кластера Kubernetes и управление им на устройства Microsoft Azure Stack Edge Pro.

  • Должен быть установлен kubectl.

Развертывание приложения без отслеживания состояния

Прежде чем начать, необходимо:

  1. Создать кластер Kubernetes.
  2. Настроить пространство имен.
  3. Привязать пользователя к пространству имен.
  4. Сохранить пользовательскую конфигурацию в C:\Users\<username>\.kube.
  5. Установить kubectl.

Теперь вы можете приступить к развертыванию приложений без отслеживания состояния и управлению ими на устройстве Azure Stack Edge Pro. Перед началом использования kubectl необходимо убедиться, что у вас установлена правильная версия kubectl.

Убедитесь, что вы установили правильную версия kubectl и настроили конфигурацию.

Для проверки версии kubectl:

  1. Убедитесь, что установлена версия kubectl не ранее 1.9:

    kubectl version
    

    Ниже показан пример выходных данных:

    PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version
    Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}
    Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
    

    В этом случае клиентская версия kubectl — 1.15.2, то есть совместимая версия.

  2. Получите список модулей pod, выполняющихся в кластере Kubernetes. Модуль pod — это контейнер приложения или процесс, выполняющийся в кластере Kubernetes.

    kubectl get pods -n <namespace-string>
    

    Ниже приведен пример использования команды.

    PS C:\WINDOWS\system32> kubectl get pods -n "test1"
    No resources found.
    PS C:\WINDOWS\system32>
    

    В выходных данных должно быть указано, что ресурсы (модули pod) не найдены, поскольку в кластере не выполняются никакие приложения.

    Команда заполняет структуру каталогов C:\Users\username>\<.kube файлами конфигурации. Программа командной строки kubectl будет использовать эти файлы для создания приложений без отслеживания состояния в кластере Kubernetes и управления ими.

  3. Вручную проверка структуру каталогов C:\Users\username>\<.kube, чтобы убедиться, что kubectl заполняет ее следующими вложенными папками:

    PS C:\Users\username> ls .kube
    
    
       Directory: C:\Users\user\.kube
    
    Mode                LastWriteTime         Length Name
    ----                -------------         ------ ----
    d-----         2/18/2020 11:05 AM                cache
    d-----         2/18/2020 11:04 AM                http-cache
    -a----         2/18/2020 10:41 AM           5377 config
    

Примечание.

Чтобы просмотреть список всех команд kubectl, введите kubectl --help.

Создание приложения без отслеживания состояния с помощью развертывания

Теперь, когда вы проверили правильность версии командной строки kubectl и у вас есть необходимые файлы конфигурации, можно создать развертывание приложения без отслеживания состояния.

Pod — это основная единица выполнения приложения Kubernetes, мельчайшая и простейшая единица в объектной модели Kubernetes, которую вы создаете или развертываете. Pod инкапсулирует ресурсы хранилища, уникальный IP-адрес сети и параметры, определяющие, как должны выполняться контейнеры.

Тип создаваемого приложения без отслеживания состояния — развертывание веб-сервера nginx.

Все команды kubectl, используемые, чтобы создавать развертывания приложений без отслеживания состояния и управлять ими, должны указывать пространство имен, связанное с конфигурацией. Вы создали пространство имен при подключении к кластеру на устройстве Azure Stack Edge Pro в учебнике Создание кластера Kubernetes на устройстве Microsoft Azure Stack Edge Pro и управление им с пространством имен New-HcsKubernetesNamespace.

Чтобы указать пространство имен в команде kubectl, используйте kubectl <command> -n <namespace-string>.

Чтобы создать развертывание nginx, сделайте следующее.

  1. Примените приложение без отслеживания состояния, создав объект развертывания Kubernetes:

    kubectl apply -f <yaml-file> -n <namespace-string>
    

    В этом примере путь к файлу приложения YAML является внешним источником.

    Ниже приведен пример использования команды и ее выходные данные.

    PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1"
    
    deployment.apps/nginx-deployment created
    

    Кроме того, можно сохранить следующий Markdown на локальном компьютере и заменить путь и имя файла в параметре -f. Например, "C:\Kubernetes\deployment.yaml". Конфигурация для развертывания приложения будет выглядеть следующим образом:

    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      selector:
        matchLabels:
          app: nginx
      replicas: 2 # tells deployment to run 2 pods matching the template
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:1.7.9
            ports:
            - containerPort: 80
    

    Эта команда создает nginx-deployment по умолчанию с двумя модулями pod для запуска приложения.

  2. Получите описание созданного развертывания nginx-deployment Kubernetes:

    kubectl describe deployment nginx-deployment -n <namespace-string>
    

    Ниже приведен пример использования команды с выходными данными.

    PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1"
    
    Name:                   nginx-deployment
    Namespace:              test1
    CreationTimestamp:      Tue, 18 Feb 2020 13:35:29 -0800
    Labels:                 <none>
    Annotations:            deployment.kubernetes.io/revision: 1
                            kubectl.kubernetes.io/last-applied-configuration:
                              {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl...
    Selector:               app=nginx
    Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    StrategyType:           RollingUpdate
    MinReadySeconds:        0
    RollingUpdateStrategy:  25% max unavailable, 25% max surge
    Pod Template:
       Labels:  app=nginx
       Containers:
        nginx:
         Image:        nginx:1.7.9
         Port:         80/TCP
         Host Port:    0/TCP
         Environment:  <none>
         Mounts:       <none>
       Volumes:        <none>
    Conditions:
       Type           Status  Reason
       ----           ------  ------
       Available      True    MinimumReplicasAvailable
       Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   nginx-deployment-5754944d6c (2/2 replicas created)
    Events:
      Type    Reason             Age    From                   Message
      ----    ------             ----   ----                   -------
      Normal  ScalingReplicaSet  2m22s  deployment-controller  Scaled up replica set nginx-deployment-5754944d6c to 2
    

    Для параметра replicas вы увидите следующее:

    Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    

    Параметр replicas указывает, что спецификация развертывания требует наличия двух модулей pod и что эти модули созданы, обновлены и готовы к использованию.

    Примечание.

    Набор реплик заменяет модули pod, удаленные или завершенные по любой причине, например в случае сбоя узла устройства или обновления устройства, которое приводит к остановке работы. Поэтому рекомендуется использовать набор реплик, даже если приложению требуется только один модуль pod.

  3. Чтобы получить список модулей pod в развертывании, выполните следующие действия.

    kubectl get pods -l app=nginx -n <namespace-string>
    

    Ниже приведен пример использования команды с выходными данными.

    PS C:\Users\user> kubectl get pods -l app=nginx -n "test1"
    
    NAME                                READY   STATUS    RESTARTS   AGE
    nginx-deployment-5754944d6c-7wqjd   1/1     Running   0          3m13s
    nginx-deployment-5754944d6c-nfj2h   1/1     Running   0          3m13s
    

    В выходных данных проверяется наличие двух модулей pod с уникальными именами, на которые можно сослаться с помощью kubectl.

  4. Чтобы просмотреть сведения об отдельном модуле pod в развертывании, выполните следующие действия.

    kubectl describe pod <podname-string> -n <namespace-string>
    

Ниже приведен пример использования команды с выходными данными.

PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"

Name:           nginx-deployment-5754944d6c-7wqjd
Namespace:      test1
Priority:       0
Node:           k8s-1d9qhq2cl-n1/10.128.46.184
Start Time:     Tue, 18 Feb 2020 13:35:29 -0800
Labels:         app=nginx
                pod-template-hash=5754944d6c
Annotations:    <none>
Status:         Running
IP:             172.17.246.200
Controlled By:  ReplicaSet/nginx-deployment-5754944d6c
 Containers:
   nginx:
     Container ID:   docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
     Image:          nginx:1.7.9
     Image ID:       docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
     Port:           80/TCP
     Host Port:      0/TCP
     State:          Running
       Started:      Tue, 18 Feb 2020 13:35:35 -0800
     Ready:          True
     Restart Count:  0
     Environment:    <none>
     Mounts:
       /var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
 Conditions:
   Type              Status
   Initialized       True
   Ready             True
   ContainersReady   True
   PodScheduled      True
 Volumes:
   default-token-8gksw:
     Type:        Secret (a volume populated by a Secret)
     SecretName:  default-token-8gksw
     Optional:    false
 QoS Class:       BestEffort
 Node-Selectors:  <none>
 Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                  node.kubernetes.io/unreachable:NoExecute for 300s
 Events:
   Type    Reason     Age    From                       Message
   ----    ------     ----   ----                       -------
   Normal  Scheduled  4m58s  default-scheduler          Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
   Normal  Pulling    4m57s  kubelet, k8s-1d9qhq2cl-n1  Pulling image "nginx:1.7.9"
   Normal  Pulled     4m52s  kubelet, k8s-1d9qhq2cl-n1  Successfully pulled image "nginx:1.7.9"
   Normal  Created    4m52s  kubelet, k8s-1d9qhq2cl-n1  Created container nginx
   Normal  Started    4m52s  kubelet, k8s-1d9qhq2cl-n1  Started container nginx

Изменение масштаба развертывания приложения путем увеличения числа реплик

Каждый модуль pod предназначен для запуска одного экземпляра данного приложения. Если вы хотите увеличить горизонтальный масштаб приложения и запустить несколько экземпляров, можно увеличить число модулей pod на единицу для каждого экземпляра. В Kubernetes это называется репликацией. Вы можете увеличить число модулей pod в развертывании приложения, применив новый файл YAML. Файл YAML изменяет число реплик на 4, в итоге число модулей pod в развертывании увеличивается до четырех. Чтобы увеличить число модулей pod с 2 до 4:

PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"

Кроме того, можно сохранить следующий Markdown на локальном компьютере и заменить путь и имя файла в параметре -f для kubectl apply. Например, C:\Kubernetes\deployment-scale.yaml. Конфигурация для масштабирования развертывания приложения будет выглядеть следующим образом:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4 # Update the replicas from 2 to 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.8
        ports:
        - containerPort: 80

Чтобы убедиться, что развертывание состоит из четырех модулей pod:

kubectl get pods -l app=nginx

Ниже приведен пример выходных данных для изменения масштаба развертывания с двух до четырех модулей pod.

PS C:\WINDOWS\system32> kubectl get pods -l app=nginx

NAME                               READY     STATUS    RESTARTS   AGE
nginx-deployment-148880595-4zdqq   1/1       Running   0          25s
nginx-deployment-148880595-6zgi1   1/1       Running   0          25s
nginx-deployment-148880595-fxcez   1/1       Running   0          2m
nginx-deployment-148880595-rwovn   1/1       Running   0          2m

Как видно из выходных данных, теперь в развертывании есть четыре модуля pod, на которых может работать приложение.

Удаление развертывания

Чтобы удалить развертывание, включая все модули pod, выполните команду kubectl delete deployment, указав имя развертывания nginx-deployment и имя пространства имен. Удаление развертывания:

kubectl delete deployment nginx-deployment -n <namespace-string>

Ниже приведен пример использования команды с выходными данными.

PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted

Следующие шаги

Обзор Kubernetes