Развертывание приложения 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-адрес вашей службы.
Масштабирование модулей 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