Краткое руководство. Развертывание кластера Kubernetes с помощью шаблона azure Resource Manager

Область применения: Azure Stack HCI, версия 23H2

В этом кратком руководстве показано, как развернуть кластер Kubernetes в AKS Arc с помощью шаблона azure Resource Manager. Azure Arc расширяет возможности управления Azure для кластеров Kubernetes в любом месте, обеспечивая единый подход к управлению различными средами.

Подготовка к работе

В этой статье предполагается базовое понимание концепций Kubernetes.

Чтобы развернуть шаблон Resource Manager, вам потребуется доступ на запись в развертываемых ресурсах и доступ ко всем операциям с типом ресурсов Microsoft.Resources/deployments. Например, для развертывания виртуальной машины требуются разрешения Microsoft.Compute/virtualMachines/write и Microsoft.Resources/deployments/* . Список ролей и разрешений см. в статье Встроенные роли Azure.

Предварительные требования

  • Учетная запись Azure с активной подпиской.
  • Кластер Azure Stack HCI 23H2.
  • Последняя версия Azure CLI.

Шаг 1. Подготовка учетной записи Azure

  1. Войдите в Azure: откройте терминал или командную строку и войдите в учетную запись Azure с помощью Azure CLI:

    az login
    
  2. Задайте подписку: замените <your-subscription-id> своим идентификатором подписки:

    az account set --subscription "<your-subscription-id>"
    

Шаг 2. Создание пары ключей SSH с помощью Azure CLI

az sshkey create --name "mySSHKey" --resource-group "myResourceGroup"

Или создайте пару ключей SSH с помощью ssh-keygen:

ssh-keygen -t rsa -b 4096

Чтобы развернуть шаблон, необходимо указать открытый ключ из пары SSH. Чтобы получить открытый ключ, используйте az sshkey show команду :

az sshkey show --name "mySSHKey" --resource-group "myResourceGroup" --query "publicKey"

По умолчанию файлы ключей SSH создаются в каталоге ~/.ssh . az sshkey create Выполните команду или ssh-keygen , чтобы перезаписать все существующие пары ключей SSH с тем же именем.

Дополнительные сведения о создании ключей SSH см. в статье Detailed steps: Create and manage SSH keys for authentication to a Linux VM in Azure (Подробные инструкции. Создание ключей SSH для проверки подлинности на виртуальной машине Linux в Azure и управление этими ключами).

Шаг 3. Проверка шаблона

Шаблон, используемый в этом кратком руководстве, из репозитория шаблонов быстрого запуска Azure:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "provisionedClusterName": {
          "type": "string",
          "defaultValue": "aksarc-armcluster",
          "metadata": {
              "description": "The name of the AKS Arc Cluster resource."
          }
      },
      "location": {
          "type": "string",
          "defaultValue": "eastus",
          "metadata": {
              "description": "The location of the AKS Arc Cluster resource."
          }
      },
      "resourceTags": {
            "type": "object",
            "defaultValue": {}
        },
      "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 '"
          }
      },
       "enableAHUB": {
            "type": "string",
            "defaultValue": "NotApplicable",
            "metadata": {
                "description": "Azure Hybrid Benefit for Windows Server licenses. NotApplicable, True, False."
            }
        },
       "agentName": {
              "type": "string",
              "defaultValue": "nodepool",
              "metadata": {
                  "description": "The name of the node pool."
              }
          },
        "agentVMSize": {
            "type": "string",
            "defaultValue": "Standard_A4_v2",
            "metadata": {
                  "description": "The VM size for node pools."
            }
        },
        "agentCount": {
              "type": "int",
              "defaultValue": 1,
              "minValue": 1,
              "maxValue": 50,
              "metadata": {
                  "description": "The number of nodes for the cluster."
              }
          },
          "agentOsType": {
              "type": "string",
              "defaultValue": "Linux",
              "metadata": {
                  "description": "The OS Type for the agent pool. Values are Linux and Windows."
              }
          },
         "loadBalancerCount": {
            "type": "int",
            "defaultValue": 0,
            "metadata": {
                "description": "The number of load balancers."
            }
        },
          "kubernetesVersion": {
              "type": "string",
              "metadata": {
                  "description": "The version of Kubernetes."
              }
          },
          "controlPlaneNodeCount": {
              "type": "int",
              "defaultValue": 1,
              "minValue": 1,
              "maxValue": 5,
              "metadata": {
                  "description": "The number of control plane nodes for the cluster."
              }
          },
          "controlPlaneIp": {
            "type": "string",
            "defaultValue": "<default_value>",
              "metadata": {
                  "description": "Control plane IP address."
              }
         },
          "controlPlaneVMSize": {
              "type": "string",
              "defaultValue": "Standard_A4_v2",
              "metadata": {
                  "description": "The VM size for control plane."
              }
          },
          "vnetSubnetIds": {
              "type": "array",
              "metadata": {
                  "description": "List of subnet Ids for the AKS cluster."
              }
          },
          "podCidr": {
            "type": "string",
            "defaultValue": "10.244.0.0/16",
            "metadata": {
                  "description": "The VM size for control plane."
              }
          },
          "networkPolicy": {
            "type": "string",
            "defaultValue": "calico",
            "metadata": {
                  "description": "Network policy to use for Kubernetes pods. Only options supported is calico."
              }
          },
          "customLocation": {
            "type": "string",
            "metadata": {
                  "description": "Fully qualified custom location resource Id."
              }
          }
      },
      "resources": [
      {
          "apiVersion": "2024-01-01",
          "type": "Microsoft.Kubernetes/ConnectedClusters",
          "kind": "ProvisionedCluster",
          "location": "[parameters('location')]",
          "name": "[parameters('provisionedClusterName')]",
          "tags": "[parameters('resourceTags')]",
          "identity": {
              "type": "SystemAssigned"
          },
          "properties": {
              "agentPublicKeyCertificate":"" ,
              "aadProfile": {
                  "enableAzureRBAC": false
              }
          }
      },
      {
          "apiVersion": "2024-01-01",
          "type": "microsoft.hybridcontainerservice/provisionedclusterinstances",
          "name": "default",
          "scope": "[concat('Microsoft.Kubernetes/ConnectedClusters', '/', parameters('provisionedClusterName'))]",
          "dependsOn": [
              "[resourceId('Microsoft.Kubernetes/ConnectedClusters', parameters('provisionedClusterName'))]"
          ],
          "properties": {
          "agentPoolProfiles": [
            {
              "count": "[parameters('agentCount')]",
              "name":"[parameters('agentName')]",
              "osType": "[parameters('agentOsType')]",
              "vmSize": "[parameters('agentVMSize')]"
            }
          ],
          "cloudProviderProfile": {
            "infraNetworkProfile": {
                  "vnetSubnetIds": "[parameters('vnetSubnetIds')]"
            }
          },
          "controlPlane": {
            "count": "[parameters('controlPlaneNodeCount')]",
            "controlPlaneEndpoint": {
                        "hostIP": "[parameters('controlPlaneIp')]"
                    },
            "vmSize": "[parameters('controlPlaneVMSize')]"
          },
         "licenseProfile": {
            "azureHybridBenefit": "[parameters('enableAHUB')]"
         },
          "kubernetesVersion": "[parameters('kubernetesVersion')]",
          "linuxProfile": {
            "ssh": {
              "publicKeys": [
                {
                  "keyData": "[parameters('sshRSAPublicKey')]"
                }
              ]
            }
          },
        "networkProfile": {
          "loadBalancerProfile": {
            "count": "[parameters('loadBalancerCount')]"
          },
          "networkPolicy": "[parameters('networkPolicy')]",
          "podCidr": "[parameters('podCidr')]"
        },
        "storageProfile": {
          "nfsCsiDriver": {
            "enabled": false
          },
          "smbCsiDriver": {
            "enabled": false
          }
        }
        },
        "extendedLocation": {
            "name": "[parameters('customLocation')]",
            "type": "CustomLocation"
        }
      }
    ]
  }

Шаг 4. Развертывание шаблона

Чтобы развернуть шаблон, выполните следующую команду для развертывания кластера Kubernetes:

az deployment group create \
--name "<deployment-name>" \
--resource-group "<resource-group-name>" \
--template-uri "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/quickstarts/microsoft.kubernetes/aks-arc/azuredeploy.json" \
--parameters provisionedClusterName="<cluster-name> location="eastus" sshRSApublicKey="" etc..."

Создание кластера занимает несколько минут. Дождитесь успешного развертывания кластера, прежде чем перейти к следующему шагу.

Шаг 5. Проверка развертывания

После завершения развертывания используйте следующую команду, чтобы убедиться, что кластер Kubernetes запущен и работает:

az aksarc show --resource-group "<resource-group-name>" --name "<cluster-name>" --output table

Шаг 6. Подключение к кластеру

  1. Чтобы подключиться к кластеру, выполните az connectedk8s proxy команду . Команда скачивает и запускает двоичный файл прокси-сервера на клиентском компьютере, а затем извлекает файл kubeconfig , связанный с кластером:

    az connectedk8s proxy --name <cluster name> -g <resource group>
    

    Или используйте клиент командной строки Kubernetes kubectl. Если вы используете azure Cloud Shell, kubectl уже установлен. Чтобы установить и запустить kubectl локально, выполните az aksarc install-cli команду .

    Настройте kubectl для подключения к кластеру Kubernetes с помощью az aksarc get-credentials команды . Эта команда скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования.

    az aksarc get-credentials --resource-group "<resource-group-name>" --name "<cluster-name>"
    
  2. Проверьте подключение к кластеру kubectl get с помощью команды . Эта команда возвращает список узлов кластера:

    kubectl get nodes -A --kubeconfig .\<path to kubecofig> 
    

    В следующем примере выходных данных показаны три узла, созданные на предыдущих шагах. Убедитесь, что этот узел находится в состоянии готовности:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-agentpool-27442051-vmss000000   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000001   Ready    agent   10m   v1.27.7
    aks-agentpool-27442051-vmss000002   Ready    agent   11m   v1.27.7
    

Ресурсы шаблона

connectedClusters

Имя Описание Значение
type Тип ресурса. Microsoft.Kubernetes/ConnectedClusters
apiVersion Версия API ресурса. 2024-01-01
name Имя ресурса. Строка (обязательно)
Ограничение символов: 1-63
Допустимые символы: буквенно-цифровые, символы подчеркивания и дефисы.
Начинается и закачивается буквенно-цифровым символом.
location Географическое расположение, в котором находится ресурс. Строка (обязательно).
tags Теги ресурсов. Словарь имен и значений тегов. См . раздел Теги в шаблонах.
extendedLocation Расширенное расположение виртуальной машины. ExtendedLocation
identity Удостоверение подключенного кластера, если настроено.
properties Свойства подключенного кластера.

ProvisionedClusterInstances

Имя Описание Значение
type Тип ресурса microsoft.hybridcontainerservice/provisionedclusterinstances
apiVersion Версия API ресурса 2024-01-01
name имя ресурса. Строка (обязательно). Не изменяйте это значение по умолчанию.
properties Свойства подключенного кластера.
extendedLocation Расширенное расположение кластера. ExtendedLocation

ExtendedLocation

Имя Описание Значение
name Идентификатор расширенного расположения. строка
type Тип расширенного расположения. CustomLocation

Дальнейшие действия

Обзор AKS Arc