Поделиться через


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

Область применения: Локальная версия Azure, версия 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 версии 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 для подключения к кластеру az aksarc get-credentials Kubernetes с помощью команды. Эта команда скачивает учетные данные и настраивает интерфейс командной строки 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