Развертывание приложения Kubernetes без отслеживания состояния с помощью kubectl на устройстве Azure Stack Edge Pro GPU
ОБЛАСТЬ ПРИМЕНЕНИЯ: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure 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
.
Развертывание приложения без отслеживания состояния
Прежде чем начать, необходимо:
- Создать кластер Kubernetes.
- Настроить пространство имен.
- Привязать пользователя к пространству имен.
- Сохранить пользовательскую конфигурацию в
C:\Users\<username>\.kube
. - Установить
kubectl
.
Теперь вы можете приступить к развертыванию приложений без отслеживания состояния и управлению ими на устройстве Azure Stack Edge Pro. Перед началом использования kubectl
необходимо убедиться, что у вас установлена правильная версия kubectl
.
Убедитесь, что вы установили правильную версия kubectl и настроили конфигурацию.
Для проверки версии kubectl
:
Убедитесь, что установлена версия
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, то есть совместимая версия.
Получите список модулей 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 и управления ими.
Вручную проверьте структуру каталогов 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, сделайте следующее.
Примените приложение без отслеживания состояния, создав объект развертывания 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 для запуска приложения.
Получите описание созданного развертывания 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.
Чтобы получить список модулей 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.
Чтобы просмотреть сведения об отдельном модуле 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