Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Из этого краткого руководства вы узнаете, как:
- Создайте кластер AKS на Azure Linux с OS Guard (предварительная версия) с помощью Azure CLI.
- Подключитесь к кластеру с помощью kubectl.
- Запустите пример многоконтейнерного приложения в кластере.
Note
Azure Linux с OS Guard (предварительная версия) заменяется на Azure Container Linux (ACL).
Azure Контейнер Linux — это долгосрочная неизменяемая, оптимизированная для контейнеров операционная система Linux (OS) для Azure Kubernetes Service (AKS). Она обеспечивает безопасную, минималистичную и операционно согласованную хостовую ОС, предназначенную для запуска контейнеризованных рабочих нагрузок в большом масштабе.
Дополнительные сведения см. в обзоре Azure Container Linux (ACL).
Необходимые условия
-
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье Краткое руководство. Azure Cloud Shell — Bash.
Если вы предпочитаете локально запускать справочные команды CLI, install 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 CLI с помощью команды
Azure Linux: особенности и ограничения OS Guard
Прежде чем начать, ознакомьтесь со следующими рекомендациями и ограничениями для Azure Linux с OS Guard (предварительная версия):
- Для работы с Azure Linux и OS Guard требуется версия Kubernetes 1.32.0 или выше.
- Все образы Azure Linux с OS Guard включают в себя Федеральный стандарт обработки информации (FIPS) и доверенный запуск.
- Azure CLI и шаблоны ARM являются единственными поддерживаемыми методами развертывания для Azure Linux с OS Guard в AKS в предварительной версии. PowerShell и Terraform не поддерживаются.
- Образы Arm64 не поддерживаются в Azure Linux с OS Guard на AKS в режиме предварительной версии.
-
NodeImageиNoneявляются единственными поддерживаемыми каналами обновления операционной системы (ОС) для Azure Linux с OS Guard в AKS.UnmanagedиSecurityPatchнесовместимы с Azure Linux с OS Guard из-за неизменяемого каталога /usr. - Потоковая передача артефактов не поддерживается.
- Песочница Pod не поддерживается.
- Конфиденциальные виртуальные машины (CVM) не поддерживаются.
- Виртуальные машины 1-го поколения не поддерживаются.
Установите расширение aks-preview Azure CLI
Important
Предварительные версии функций AKS доступны на условиях самообслуживания и по выбору пользователя. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS сопровождаются частичной поддержкой клиентов на основе принципа лучших усилий. Как таковые, эти функции не предназначены для использования в производстве. Для получения дополнительной информации ознакомьтесь со следующими статьями поддержки:
aks-preview Установите расширение с помощью az extension add команды.
az extension add --name aks-preview
aks-preview Обновите расширение до последней версии с помощью команды az extension update.
az extension update --name aks-preview
Регистрация флага компонента AzureLinuxOSGuardPreview
Зарегистрируйте флаг функции
AzureLinuxOSGuardPreviewс помощью командыaz feature register.az feature register --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"Через несколько минут отобразится состояние Registered (Зарегистрировано).
Проверьте состояние регистрации с помощью
az feature showкоманды.az feature show --namespace "Microsoft.ContainerService" --name "AzureLinuxOSGuardPreview"Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью
az provider registerкоманды.az provider register --namespace "Microsoft.ContainerService"
Настройка переменных среды
Задайте следующие переменные среды, чтобы создать уникальные имена ресурсов для каждого развертывания. Замените <your-resource-group-name>, <your-region> и <your-cluster-name> собственными значениями. При желании можно использовать команду openssl rand -hex 3 для создания случайной строки, которую можно добавить к именам группы ресурсов и кластера (например, export RESOURCE_GROUP="myResourceGroup$RANDOM_ID").
# Create random string
export RANDOM_ID="$(openssl rand -hex 3)"
# Set environment variables
export RESOURCE_GROUP="<your-resource-group-name>"
export REGION="<your-region>"
export CLUSTER_NAME="<your-cluster-name>"
Создайте группу ресурсов
Группа ресурсов Azure — это логическая группа, в которой развертываются и управляются ресурсы Azure. При создании группы ресурсов в Azure необходимо указать расположение. Это расположение хранилища метаданных группы ресурсов и место, где ресурсы выполняются в Azure, если при создании ресурса не указан другой регион.
Создайте группу ресурсов с помощью команды az group create.
az group create --name $RESOURCE_GROUP --location $REGION
Пример выходных данных:
{
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/$RESOURCE_GROUPxxxxxx",
"location": "$REGION",
"managedBy": null,
"name": "$RESOURCE_GROUPxxxxxx",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
Создание Azure Linux с кластером OS Guard
Создайте кластер AKS с помощью az aks create команды с --os-sku параметром для подготовки кластера AKS с помощью образа OS Guard в Azure Linux.
az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --os-sku AzureLinuxOSGuard --node-osdisk-type Managed --enable-fips-image --enable-secure-boot --enable-vtpm
Через несколько минут команда завершается и возвращает информацию о кластере в формате JSON.
Подключение к кластеру
Чтобы управлять кластером Kubernetes, используйте клиент командной строки Kubernetes. kubectl
kubectl уже установлен, если вы используете Azure Cloud Shell. Чтобы установить kubectl локально, используйте az aks install-cli команду.
Настройте
kubectlдля подключения к вашему кластеру Kubernetes с помощью командыaz aks get-credentials. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEПроверьте подключение к кластеру
kubectl getс помощью команды. Эта команда возвращает список узлов кластера.kubectl get nodes
Развертывание приложения
Чтобы развернуть приложение, используйте файл манифеста для создания всех объектов, необходимых для запуска приложения AKS Store. Файл манифеста Kubernetes определяет желаемое состояние кластера, например, какие образы контейнеров запускать. В манифесте указаны следующие развертывания и службы Kubernetes:
- Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
- Сервис продукта: отображает информацию о продукте.
- Служба заказов: помещает заказы.
- Rabbit MQ: очередь сообщений для управления очередью заказов.
Note
Не рекомендуется запускать контейнеры с сохранением состояния, такие как Rabbit MQ, без постоянного хранилища для продакшена. Они используются здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как 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 локально, вы можете отправить файл манифеста в каталог по умолчанию в 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.
Удалите группу ресурсов Azure и все связанные ресурсы с помощью команды az group delete.
az group delete --name $RESOURCE_GROUP --yes --no-wait
Связанный контент
В этом кратком руководстве описано, как развернуть Azure Linux с кластером OS Guard. Дополнительные сведения о Azure Linux с OS Guard см. в следующих ресурсах: