Краткое руководство. Развертывание узла контейнеров Azure Linux для кластера AKS с помощью Azure CLI
Приступая к работе с узлом контейнеров Azure Linux с помощью Azure CLI для развертывания узла контейнеров Linux Azure для кластера AKS. После установки необходимых компонентов вы создадите группу ресурсов, создадите кластер AKS, подключитесь к кластеру и запустите пример многоконтейнерного приложения в кластере.
Необходимые компоненты
-
Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье Краткое руководство. Azure Cloud Shell — Bash.
Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.
Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
Создание или изменение группы ресурсов
Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. При создании группы ресурсов необходимо указать расположение. Это расположение определяет следующее:
- место хранения метаданных группы ресурсов;
- Где ресурсы будут работать в Azure, если при создании ресурса не указать другой регион.
Чтобы создать группу ресурсов с именем testAzureLinuxResourceGroup в регионе eastus , выполните следующий шаг:
Создайте группу ресурсов с помощью az group create
команды.
az group create --name testAzureLinuxResourceGroup --location eastus
Следующие выходные данные похожи на то, что группа ресурсов успешно создана:
{
"id": "/subscriptions/<guid>/resourceGroups/testAzureLinuxResourceGroup",
"location": "eastus",
"managedBy": null,
"name": "testAzureLinuxResourceGroup",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Примечание.
В приведенном выше примере используется eastus, но кластеры узлов контейнеров Azure Linux доступны во всех регионах.
Создание кластера узла контейнеров Azure Linux
Создайте кластер AKS с помощью az aks create
команды с --os-sku
параметром для подготовки кластера AKS с помощью образа Azure Linux. В следующем примере создается кластер Azure Linux с именем testAzureLinuxCluster с одним узлом:
az aks create --name testAzureLinuxCluster --resource-group testAzureLinuxResourceGroup --os-sku AzureLinux
Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.
Подключение к кластеру
Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes.
- Настройте
kubectl
подключение к кластеруaz aks get-credentials
Kubernetes с помощью команды.
az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
- Проверьте подключение к кластеру, выполнив команду kubectl get. Команда возвращает список модулей pod.
kubectl get pods --all-namespaces
Развертывание приложения
Чтобы развернуть приложение, используйте файл манифеста для создания всех объектов, необходимых для запуска приложения AKS Store. Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например выполняемых в нем образов контейнеров. Манифест включает следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Служба продуктов: отображает сведения о продукте.
- Служба заказов: помещает заказы.
- Rabbit MQ: очередь сообщений для очереди заказов.
Примечание.
Не рекомендуется запускать контейнеры с отслеживанием состояния, такие как Rabbit MQ, без постоянного хранения для рабочей среды. Они используются здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure Cosmos DB или Служебная шина Azure.
Создайте файл с именем
aks-store-quickstart.yaml
и скопируйте его в следующем манифесте:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: "kubernetes.io/os": linux containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "password" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "password" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: "kubernetes.io/os": linux containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancer
Если вы создаете и сохраняете файл YAML локально, вы можете отправить файл манифеста в каталог по умолчанию в CloudShell, нажав кнопку "Отправить и скачать файлы " и выбрав файл из локальной файловой системы.
Разверните приложение с помощью
kubectl apply
команды и укажите имя манифеста YAML.kubectl apply -f aks-store-quickstart.yaml
Тестирование приложения
Чтобы убедиться, что приложение запущено, посетите общедоступный IP-адрес или URL-адрес приложения.
Получите URL-адрес приложения с помощью следующих команд:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "Service IP Address: $IP_ADDRESS"
break
else
sleep 10
fi
done
curl $IP_ADDRESS
Результаты.
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
Удаление кластера
Если вы не собираетесь продолжать работу со следующими руководствами, чтобы избежать расходов Azure, удалите ненужные ресурсы. az group delete
Используйте команду, чтобы удалить группу ресурсов и все связанные ресурсы.
az group delete --name testAzureLinuxCluster --yes --no-wait
Следующие шаги
В этом кратком руководстве вы развернули кластер узла контейнеров Azure Linux. Чтобы узнать больше о узле контейнеров Linux Для Azure и ознакомиться с полным примером развертывания кластера и управления, перейдите к руководству по узлу контейнеров Azure Linux.