Краткое руководство. Развертывание узла контейнеров Azure Linux для кластера AKS с помощью шаблона ARM
Начало работы с узлом контейнеров Linux Azure с помощью шаблона Azure Resource Manager (ARM) для развертывания кластера узла контейнеров Linux Azure. После установки необходимых компонентов вы создадите пару ключей SSH, просмотрите шаблон, разверните шаблон и проверьте его, а затем развернете приложение.
Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.
Необходимые компоненты
-
Если у вас еще нет подписки 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.
Если у вас еще нет kubectl, установите его с помощью
az aks install-cli
Azure CLI или следуйте инструкциям вышестоящего руководства.Чтобы создать кластер AKS с использованием шаблона Resource Manager, укажите открытый ключ SSH. Если вам требуется этот ресурс, выполните инструкции из следующего раздела. В противном случае перейдите к разделу Изучение шаблона.
Удостоверение, используемое для создания кластера, имеет соответствующие минимальные разрешения. Дополнительные сведения о доступе и удостоверении для AKS см. в разделе "Параметры доступа и удостоверения" для Служба Azure Kubernetes (AKS).
Для развертывания файла Bicep или шаблона ARM необходим доступ с правом записи для развертываемых ресурсов и доступ ко всем операциям с типом ресурсов Microsoft.Resources/deployments. Например, для развертывания виртуальной машины требуются разрешения Microsoft.Compute/virtualMachines/write и Microsoft.Resources/deployments/*. Список ролей и разрешений см. в статье Встроенные роли Azure.
Создание пары ключей SSH
Подключение к узлам AKS выполняется с парой ключей SSH (открытого и закрытого), которые создаются с помощью команды ssh-keygen
. По умолчанию эти файлы хранятся в каталоге ~/.ssh. При выполнении ssh-keygen
команды выполняется перезапись любой пары ключей SSH с тем же именем, что и в указанном расположении.
Перейдите по адресу https://shell.azure.com, чтобы открыть Cloud Shell в браузере.
Выполните команду
ssh-keygen
. Следующий пример создает пару 4096-разрядных ключей SSH с шифрованием RSA:ssh-keygen -t rsa -b 4096
Дополнительные сведения о создании ключей SSH см. в статье Detailed steps: Create and manage SSH keys for authentication to a Linux VM in Azure (Подробные инструкции. Создание ключей SSH для проверки подлинности на виртуальной машине Linux в Azure и управление этими ключами).
Изучение шаблона
В следующем развертывании используется шаблон ARM из шаблонов быстрого запуска Azure.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "azurelinuxakscluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "Standard_DS2_v2",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
}
},
"osType": {
"type": "string",
"defaultValue": "Linux",
"allowedValues": [
"Linux"
],
"metadata": {
"description": "The type of operating system."
}
},
"osSKU": {
"type": "string",
"defaultValue": "AzureLinux",
"allowedValues": [
"AzureLinux",
"Ubuntu"
],
"metadata": {
"description": "The Linux SKU to use."
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2021-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"mode": "System",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "[parameters('osType')]",
"osSKU": "[parameters('osSKU')]",
"storageProfile": "ManagedDisks"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
},
"identity": {
"type": "SystemAssigned"
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(parameters('clusterName')).fqdn]"
}
}
}
Чтобы добавить Azure Linux в существующий шаблон ARM, необходимо добавить "osSKU": "AzureLinux"
и "mode": "System"
agentPoolProfiles
установить apiVersion в 2021-03-01 или более поздней версии ("apiVersion": "2021-03-01"
).
Развертывание шаблона
Нажмите следующую кнопку, чтобы войти на портал Azure и открыть шаблон.
Введите или выберите следующие значения.
В этом кратком руководстве оставьте значения по умолчанию для параметров OS Disk Size GB (Размер диска операционной системы в ГБ), Число агентов, Размер виртуальной машины агента, Тип ОС и Версия Kubernetes. Укажите собственные значения для следующих параметров шаблона:
- Подписка— выберите подписку Azure.
- Группа ресурсов: выберите "Создать". Введите уникальное имя группы ресурсов, например testAzureLinuxResourceGroup, а затем нажмите кнопку "ОК".
- Расположение: выберите расположение, например восточную часть США.
- Имя кластера: введите уникальное имя кластера AKS, например testAzureLinuxCluster.
- Префикс DNS: введите уникальный префикс DNS для кластера, например myAzureLinuxCluster.
- Имя пользователя администратора Linux: введите имя пользователя для подключения с помощью SSH, например azureUser.
- Открытый ключ SSH RSA: скопируйте и вставьте общедоступную часть пары ключей SSH (по умолчанию содержимое ~/.ssh/id_rsa.pub).
Выберите Review + Create (Просмотреть и создать).
Создание кластера узла контейнеров Linux в Azure занимает несколько минут. Дождитесь успешного развертывания кластера, прежде чем перейти к следующему шагу.
Проверка развертывания
Подключение к кластеру
Кластером Kubernetes можно управлять при помощи kubectl клиента командной строки Kubernetes.
Установите
kubectl
локально с помощьюaz aks install-cli
команды:az aks install-cli
Настройте
kubectl
подключение к кластеруaz aks get-credentials
Kubernetes с помощью команды. Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.az aks get-credentials --resource-group testAzureLinuxResourceGroup --name testAzureLinuxCluster
Проверьте подключение к кластеру
kubectl get
с помощью команды. Эта команда возвращает список узлов кластера.kubectl get nodes
В следующем примере выходных данных показаны три узла, созданные на предыдущих шагах. Убедитесь, что этот узел находится в состоянии готовности:
NAME STATUS ROLES AGE VERSION aks-agentpool-41324942-0 Ready agent 6m44s v1.12.6 aks-agentpool-41324942-1 Ready agent 6m46s v1.12.6 aks-agentpool-41324942-2 Ready agent 6m45s v1.12.6
Развертывание приложения
Файл манифеста Kubernetes используется для определения требуемого состояния кластера, например выполняемых в нем образов контейнеров.
В этом кратком руководстве вы используете манифест для создания всех объектов, необходимых для запуска приложения Azure Vote. Этот манифест содержит два развертывания Kubernetes:
- пример приложения Azure для голосования на языке Python;
- экземпляр Redis.
Кроме того, создаются две Службы Kubernetes:
- внутренняя служба для экземпляра Redis;
- внешняя служба для доступа к приложению Azure для голосования из Интернета.
Создайте файл с именем
azure-vote.yaml
.- Если вы используете Azure Cloud Shell, этот файл можно создать с помощью
code
,vi
илиnano
, как при работе в виртуальной или физической системе:
- Если вы используете Azure Cloud Shell, этот файл можно создать с помощью
Скопируйте в него следующее определение 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: "kubernetes.io/os": linux containers: - name: azure-vote-back image: mcr.microsoft.com/oss/bitnami/redis:6.0.8 env: - name: ALLOW_EMPTY_PASSWORD value: "yes" 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: "kubernetes.io/os": linux containers: - name: azure-vote-front image: mcr.microsoft.com/azuredocs/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
Сведения о разбивке файлов манифеста YAML см. в разделе "Развертывания" и "Манифесты YAML".
Разверните приложение с помощью команды 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
Параметр EXTERNAL-IP для службы azure-vote-front
в выходных данных изначально будут иметь значение pending (Ожидается).
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
azure-vote-front LoadBalancer 10.0.37.27 <pending> 80:30572/TCP 6s
Когда параметр EXTERNAL-IP вместо pending примет значение общедоступного IP-адреса, выполните команду CTRL-C
, чтобы остановить процесс отслеживания kubectl
. В следующем примере выходных данных показан общедоступный IP-адрес, присвоенный службе.
azure-vote-front LoadBalancer 10.0.37.27 52.179.23.131 80:30572/TCP 2m
Чтобы увидеть приложение для голосования Azure в действии, откройте в веб-браузере внешний IP-адрес вашей службы.
Удаление кластера
Если вы не собираетесь продолжать работу со следующими руководствами, чтобы избежать расходов Azure, удалите ненужные ресурсы. az group delete
Используйте команду, чтобы удалить группу ресурсов и все связанные ресурсы.
az group delete --name testAzureLinuxCluster --yes --no-wait
Следующие шаги
В этом кратком руководстве вы развернули кластер узла контейнеров Azure Linux. Чтобы узнать больше о узле контейнеров Linux Для Azure и ознакомиться с полным примером развертывания кластера и управления, перейдите к руководству по узлу контейнеров Azure Linux.