Руководство. Развертывание приложения Linux

Область применения: AKS в Azure Stack HCI 22H2, AKS в Windows Server

В этом руководстве описывается, как развернуть многоконтейнерное приложение, включающее веб-интерфейс и экземпляр базы данных Redis в кластере Kubernetes в AKS, включенном Azure Arc. Вы также узнаете, как протестировать и масштабировать приложение.

В этом руководстве предполагается базовое понимание концепций Kubernetes. Дополнительные сведения см. в статье Основные понятия Kubernetes.

Подготовка к работе

Убедитесь, что у вас есть следующие требования:

  • Кластер AKS с по крайней мере одним рабочим узлом Linux, который запущен и работает.
  • Файл kubeconfig для доступа к кластеру.
  • Установлен модуль PowerShell AksHci . Дополнительные сведения см. в разделе Install-AksHci.

При выполнении процедур учебника:

  • Выполните команды в окне PowerShell, открытом с правами администратора.
  • Убедитесь, что рабочие нагрузки, относящиеся к операционной системе, размещаются на соответствующем узле контейнера. Если в кластере Kubernetes есть сочетание рабочих узлов Linux и Windows, можно использовать селекторы узлов или отметки и допуски. Дополнительные сведения см. в разделе Об использовании селекторов узлов, а также в разделах с отметками и допусками.

Примечание

Развертывание целевого кластера, который совместно использует сеть с другим целевым кластером, может привести к конфликтам IP-адресов подсистемы балансировки нагрузки. Конфликты IP-адресов могут возникнуть при развертывании двух рабочих нагрузок, использующих разные порты, в целевых кластерах, использующих один и тот же AksHciClusterNetwork объект. Из-за того, как IP-адреса и сопоставления портов выделяются внутри прокси-сервера высокого уровня доступности, это может привести к назначению повторяющихся IP-адресов. В этом случае одна или обе рабочие нагрузки могут столкнуться с проблемами с случайным сетевым подключением до повторного развертывания рабочих нагрузок. При повторном развертывании рабочих нагрузок можно либо использовать один и тот же порт, который назначает IP-адрес службы каждой рабочей нагрузке, либо повторно развернуть рабочие нагрузки в целевых кластерах, использующих разные AksHciClusterNetwork объекты.

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

Файл манифеста Kubernetes определяет требуемое состояние кластера, например образы контейнеров для запуска. В этом руководстве используется манифест для создания всех объектов, необходимых для запуска приложения azure для голосования. Этот манифест включает в себя два развертывания Kubernetes: одно для примеров приложений Python для голосования Azure, а другое — для экземпляра Redis. Также создаются две службы Kubernetes: внутренняя служба для экземпляра Redis и внешняя служба для доступа к приложению Azure Для голосования из Интернета.

Create файл с именем azure-vote.yaml и скопируйте или вставьте следующее определение YAML:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: mcr.microsoft.com/azuredocs/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

Разверните приложение с помощью kubectl apply команды и укажите имя манифеста YAML:

kubectl apply -f azure-vote.yaml

В следующем примере выходных данных показаны развертывания и службы, которые были успешно созданы:

deployment "azure-vote-back" created
service "azure-vote-back" created
deployment "azure-vote-front" created
service "azure-vote-front" created

Тестирование приложения

При запуске приложения служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс создания может занять несколько минут.

Чтобы отслеживать ход выполнения, используйте kubectl get service команду с аргументом --watch :

kubectl get service azure-vote-front --watch

Изначально external-IP для службы azure-vote-front отображается как ожидающий:

NAME               TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27      <pending>     80:30572/TCP   22m

Если внешний IP-адрес изменится с ожидающего на фактический общедоступный IP-адрес, нажмите клавишиkubectl CTRL+C, чтобы остановить процесс watch. В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.

NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
azure-vote-front   LoadBalancer   10.0.37.27   52.179.23.131   80:30572/TCP   24m

Чтобы увидеть приложение для голосования Azure в действии, откройте в веб-браузере внешний IP-адрес вашей службы.

Снимок экрана: домашняя страница приложения Azure для голосования, развернутого в кластере Kubernetes в Azure.

Масштабирование модулей pod приложений

Мы создали один реплика интерфейсного интерфейса приложения Azure Для голосования и экземпляра Redis. Чтобы просмотреть количество и состояние модулей pod в кластере kubectl get , используйте команду :

kubectl get pods -n default

В следующем примере выходных данных показано по одному интерфейсному и серверному модулю pod:

NAME                                READY     STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1       Running   0          25m
azure-vote-front-84c8bf64fc-cdq86   1/1       Running   0          25m

Чтобы изменить количество модулей pod в развертывании azure-vote-front , используйте kubectl scale команду . В следующем примере увеличивает число интерфейсных модулей pod до 5.

kubectl scale --replicas=5 deployment/azure-vote-front

Запустите kubectl get pods еще раз, чтобы убедиться, что были созданы дополнительные модули pod. Они становятся доступными примерно через минуту.

kubectl get pods -n default
Name                                READY   STATUS    RESTARTS   AGE
azure-vote-back-6bdcb87f89-g2pqg    1/1     Running   0          31m
azure-vote-front-84c8bf64fc-cdq86   1/1     Running   0          31m
azure-vote-front-84c8bf64fc-56h64   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-djkp8   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-jmmvs   1/1     Running   0          80s
azure-vote-front-84c8bf64fc-znc6z   1/1     Running   0          80s

Дальнейшие действия

Мониторинг кластера и приложения с помощью Azure Monitor