Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба Azure Kubernetes (AKS) — это управляемая служба Kubernetes, которая позволяет быстро развертывать кластеры и управлять ими. Из этого краткого руководства вы узнаете, как:
- Создайте кластер AKS с помощью Flatcar Container Linux для AKS (предварительная версия).
- Развертывание кластера AKS с помощью Azure CLI.
- Запустите пример многоконтейнерного приложения с группой микрослужб и веб-интерфейсов, которые имитируют сценарий розничной торговли.
Замечание
В этой статье описаны действия по развертыванию кластера с параметрами по умолчанию только для оценки. Прежде чем развертывать готовый к работе кластер, рекомендуется ознакомиться с базовой эталонной архитектурой , чтобы понять, как она соответствует вашим бизнес-требованиям.
Перед тем как начать
В этом руководстве быстрого старта предполагается, что у вас есть базовое понимание концепций Kubernetes. Дополнительные сведения см. в статье Ключевые концепции Kubernetes для службы Azure Kubernetes (AKS).
- Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
- Убедитесь, что удостоверение, которое вы используете для создания кластера, имеет необходимые минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в разделе «Параметры доступа и удостоверения для службы Azure Kubernetes (AKS)».
- Если у вас несколько подписок Azure, выберите соответствующий идентификатор подписки, в котором должны выставляться счета за ресурсы с помощью
az account setкоманды. Дополнительные сведения см. в статье "Управление подписками Azure" — Azure CLI. - В зависимости от подписки Azure может потребоваться запросить увеличение квоты виртуального ЦП. Дополнительные сведения см. в разделе "Увеличение квот виртуальных ЦП для семейств виртуальных машин".
Регистрация поставщиков ресурсов
Возможно, потребуется зарегистрировать поставщиков ресурсов в подписке Azure. Например, Microsoft.ContainerService требуется.
Проверьте состояние регистрации с помощью az provider show команды.
az provider show --namespace Microsoft.ContainerService --query registrationState
При необходимости зарегистрируйте поставщика ресурсов с помощью команды az provider register .
az provider register --namespace Microsoft.ContainerService
Установка aks-preview расширения
Это важно
Предварительные версии функций AKS доступны на условиях самообслуживания и добровольного выбора. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
aks-previewУстановите расширение Azure CLI с помощьюaz extension addкоманды.az extension add --name aks-previewОбновите до последней версии расширения с помощью
az extension updateкоманды. Flatcar Container Linux требует минимум 18.0.0b42.az extension update --name aks-preview
Регистрация AKSFlatcarPreview флага компонента
Зарегистрируйте флаг функции
AKSFlatcarPreviewс помощью командыaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "AKSFlatcarPreview"Проверьте состояние регистрации с помощью
az feature showкоманды. Через несколько минут отобразится состояние Registered (Зарегистрировано).az feature show --namespace Microsoft.ContainerService --name AKSFlatcarPreviewКогда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace Microsoft.ContainerService
Определение переменных среды
- Определите следующие переменные среды для использования в этом кратком руководстве.
export RANDOM_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_ID"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM_ID"
Значение RANDOM_ID переменной — это буквенно-цифровое значение, которое добавляется в группу ресурсов и имя кластера, чтобы имена были уникальными.
echo Используйте команду для просмотра значений переменных, таких какecho $RANDOM_ID.
Создайте группу ресурсов
Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. При создании группы ресурсов вам будет предложено указать расположение. Это расположение хранилища метаданных группы ресурсов и место, где ресурсы выполняются в Azure, если вы не указываете другой регион во время создания ресурса.
- Создайте группу ресурсов с помощью команды
az group create.
az group create \
--name $MY_RESOURCE_GROUP_NAME \
--location $REGION
Пример выходных данных:
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomIDValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomIDValue>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Создание кластера AKS
- Создайте кластер AKS с помощью команды
az aks create. В следующем примере создается кластер с одним узлом и включается управляемое удостоверение, назначаемое системой:
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--os-sku flatcar \
--node-count 1 \
--generate-ssh-keys
Замечание
При создании нового кластера AKS автоматически создает вторую группу ресурсов для хранения ресурсов AKS. Дополнительные сведения см. в разделе Почему с AKS создаются две группы ресурсов?
Подключение к кластеру
Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes.
kubectl уже установлен, если вы используете Azure Cloud Shell. Чтобы установить kubectl локально, используйте az aks install-cli команду.
Настройте
kubectlдля подключения к вашему кластеру Kubernetes с помощью командыaz aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials \ --resource-group $MY_RESOURCE_GROUP_NAME \ --name $MY_AKS_CLUSTER_NAMEПроверьте подключение к кластеру
kubectl getс помощью команды. Эта команда возвращает список узлов кластера.kubectl get nodes
Развертывание приложения
Чтобы развернуть приложение, используйте файл манифеста для создания всех объектов, необходимых для запуска приложения AKS Store. Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например выполняемых в нем образов контейнеров. В манифесте указаны следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Служба продуктов: отображает сведения о продукте.
- Служба заказов: помещает заказы.
-
RabbitMQ: очередь сообщений для управления очередью заказов.
Замечание
Не рекомендуется запускать состоящие контейнеры, такие как RabbitMQ, без постоянного хранилища для рабочей среды. Мы используем его здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure Cosmos DB или служебная шина Azure.
Создайте файл с именем aks-store-quickstart.yaml и скопируйте его в следующем манифесте.
apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq 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 startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 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 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- 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 startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerСведения о разбивке файлов манифеста YAML см. в разделе "Развертывания" и "Манифесты YAML".
Если вы создаете и сохраняете файл YAML локально, вы можете отправить файл манифеста в каталог по умолчанию в Cloud Shell, нажав кнопку " Отправить и скачать файлы " и выбрав файл из локальной файловой системы.
Разверните приложение с помощью
kubectl applyкоманды и укажите имя манифеста YAML.kubectl apply -f aks-store-quickstart.yamlВ следующем примере выходных данных показаны развертывания и службы:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
Тестирование приложения
При запуске приложения Служба Kubernetes предоставляет внешний интерфейс приложения в Интернете. Процесс может занять несколько минут для завершения.
Проверьте состояние развернутых подов с помощью команды
kubectl get pods. Убедитесь, что все поды имеют статусRunning, прежде чем продолжить.kubectl get podsПроверьте общедоступный IP-адрес приложения
store-front. Отслеживайте ход выполнения, используя командуkubectl get serviceс аргументом--watch.kubectl get service store-front --watchВыходные данные EXTERNAL-IP для
store-frontслужбы изначально отображаются как в ожидании:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mКогда адрес EXTERNAL-IP изменится из состояния pending на общедоступный IP-адрес, выполните команду
CTRL-C, чтобы остановить процесс отслеживанияkubectl.В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mОткройте веб-браузер и перейдите на внешний IP-адрес вашей службы, чтобы увидеть, как работает приложение Azure Store.
Удаление кластера
Если вы не планируете использовать учебник AKS, очистите ненужные ресурсы, чтобы избежать расходов на выставление счетов Azure.
Удалите группу ресурсов, службу контейнеров и все связанные ресурсы с помощью
az group deleteкоманды.az group delete --name $MY_RESOURCE_GROUP_NAMEКластер AKS был создан с управляемой системой идентичностью, которая является идентичностью по умолчанию, используемой в этом кратком руководстве. Платформа управляет этим удостоверением, так что вам не нужно удалять его вручную.
Дальнейшие шаги
В этом кратком руководстве вы развернули кластер Kubernetes, а затем развернули на нем простое многоконтейнерное приложение. Этот пример приложения предназначен только для демонстрационных целей и не представляет все рекомендации для приложений Kubernetes. Рекомендации по созданию полных решений с помощью AKS для продуктивной среды см. в руководстве по решению AKS.
Дополнительные сведения об AKS и полный пример развертывания см. в руководстве по кластеру Kubernetes.