Поделиться через


Развертывание приложения 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 Vote из Интернета.

Создайте файл с именем 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: <path to image>/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

Изначально внешний 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-адреса, используйте CTRL-C, чтобы остановить kubectl процесс наблюдения. В следующем примере выходных данных показан общедоступный 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