Краткое руководство: развертывание кластера Azure Red Hat OpenShift со стандартной архитектурой с помощью шаблона Azure Resource Manager или файла Bicep

В этой статье описывается, как использовать шаблон Azure Resource Manager (шаблон ARM) или Bicep для создания Azure Red Hat OpenShift с кластером стандартной архитектуры. Кластер можно развернуть с помощью PowerShell или интерфейса командной строки Azure (Azure CLI).

Шаблон Azure Resource Manager — это файл нотации объектов JavaScript (JSON), который определяет инфраструктуру и конфигурацию проекта. В шаблоне используется декларативный синтаксис. Вы описываете предполагаемое развертывание без написания последовательности команд программирования для создания развертывания.

Bicep — это предметно-ориентированный язык (DSL), который использует декларативный синтаксис для развертывания ресурсов Azure. В файле Bicep вы определяете инфраструктуру, которую необходимо развернуть в Azure, а затем используете этот файл на протяжении всего жизненного цикла разработки для многократного развертывания инфраструктуры. Ваши ресурсы развертываются в последовательной манере.

Замечание

Сведения о развертывании кластеров Azure Red Hat OpenShift с помощью Terraform см. в статье Microsoft.RedHatOpenShift openShiftClusters Terraform.

Предпосылки

  • Для использования требуется учетная запись Azure с активной подпиской. Если ее нет, можно создать учетную запись бесплатно.

  • Возможность назначать роли «Администратор доступа пользователей» и «Участник». Если у вас нет этой возможности, обратитесь к администратору Microsoft Entra для управления ролями.

  • Учетная запись Red Hat. Если у вас нет, вам придется зарегистрировать учетную запись.

  • Секрет извлечения для кластера Azure Red Hat OpenShift. Скачайте файл pull-secret с веб-сайта Red Hat OpenShift Cluster Manager.

  • Если вы хотите локально запустить код Azure PowerShell, Azure PowerShell.

  • Если вы хотите локально запустить код Azure CLI:

    • Интерпретатор команд оболочки Bash (например, Git Bash, который включён в Git для Windows).
    • Azure CLI.

Создайте шаблон ARM или файл Bicep

Выберите шаблон Azure Resource Manager (шаблон ARM) или файл Azure Bicep. Затем можно развернуть шаблон с помощью командной строки Azure (azure-cli) или PowerShell.

Создание шаблона ARM

В следующем примере показано, как шаблон ARM должен выглядеть при настройке кластера Azure RedHat OpenShift.

Шаблон определяет три ресурса Azure:

Дополнительные примеры шаблонов Azure Red Hat OpenShift можно найти на веб-сайте Red Hat OpenShift.

Сохраните следующий пример как azuredeploy.json:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
      "location" : {
        "type": "string",
        "defaultValue": "eastus",
        "metadata": {
          "description": "Location"
        }
      },
      "domain": {
          "type": "string",
          "defaultValue": "",
          "metadata": {
              "description": "Domain Prefix"
          }
      },
      "pullSecret": {
          "type": "string",
          "metadata": {
              "description": "Pull secret from cloud.redhat.com. The json should be input as a string"
          }
      },
      "clusterVnetName": {
          "type": "string",
          "defaultValue": "aro-vnet",
          "metadata": {
              "description": "Name of vNet"
          }
      },
      "clusterVnetCidr": {
          "type": "string",
          "defaultValue": "10.100.0.0/15",
          "metadata": {
              "description": "vNet Address Space"
          }
      },
      "workerSubnetCidr": {
          "type": "string",
          "defaultValue": "10.100.70.0/23",
          "metadata": {
              "description": "Worker node subnet address space"
          }
      },
      "masterSubnetCidr": {
          "type": "string",
          "defaultValue": "10.100.76.0/24",
          "metadata": {
              "description": "Master node subnet address space"
          }
      },
      "masterVmSize" : {
          "type": "string",
          "defaultValue": "Standard_D8s_v3",
          "metadata": {
              "description": "Master Node VM Type"
          }
      },
      "workerVmSize": {
          "type": "string",
          "defaultValue": "Standard_D4s_v3",
          "metadata": {
              "description": "Worker Node VM Type"
          }
      },
      "workerVmDiskSize": {
          "type" : "int",
          "defaultValue": 128,
          "minValue": 128,
          "metadata": {
              "description": "Worker Node Disk Size in GB"
          }
      },
      "workerCount": {
          "type": "int",
          "defaultValue": 3,
          "minValue": 3,
          "metadata": {
              "description": "Number of Worker Nodes"
          }
      },
      "podCidr": {
          "type": "string",
          "defaultValue": "10.128.0.0/14",
          "metadata": {
              "description": "Cidr for Pods"
          }
      },
      "serviceCidr": {
          "type": "string",
          "defaultValue": "172.30.0.0/16",
          "metadata": {
              "description": "Cidr of service"
          }
      },
      "clusterName" : {
        "type": "string",
        "metadata": {
          "description": "Unique name for the cluster"
        }
      },
      "tags": {
          "type": "object",
          "defaultValue" : {
              "env": "Dev",
              "dept": "Ops"
          },
          "metadata": {
              "description": "Tags for resources"
          }
      },
      "apiServerVisibility": {
          "type": "string",
          "allowedValues": [
              "Private",
              "Public"
          ],
          "defaultValue": "Public",
          "metadata": {
              "description": "Api Server Visibility"
          }
      },
      "ingressVisibility": {
          "type": "string",
          "allowedValues": [
              "Private",
              "Public"
          ],
          "defaultValue": "Public",
          "metadata": {
              "description": "Ingress Visibility"
          }
      },
      "aadClientId" : {
        "type": "string",
        "metadata": {
          "description": "The Application ID of an Azure Active Directory client application"
        }
      },
      "aadObjectId": {
          "type": "string",
          "metadata": {
              "description": "The Object ID of an Azure Active Directory client application"
          }
      },
      "aadClientSecret" : {
        "type":"securestring",
        "metadata": {
          "description": "The secret of an Azure Active Directory client application"
        }
      },
      "rpObjectId": {
          "type": "String",
          "metadata": {
              "description": "The ObjectID of the Resource Provider Service Principal"
          }
      }
    },
    "variables": {
        "contribRole": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', 'b24988ac-6180-42a0-ab88-20f7382dd24c')]",
        "fpNetworkRole": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/', '42f3c60f-e7b1-46d7-ba56-6de681664342')]"
    },
    "resources": [
        {
            "type": "Microsoft.Network/virtualNetworks",
            "apiVersion": "2020-05-01",
            "name": "[parameters('clusterVnetName')]",
            "location": "[parameters('location')]",
            "tags": "[parameters('tags')]",
            "properties": {
                "addressSpace": {
                "addressPrefixes": [
                    "[parameters('clusterVnetCidr')]"
                    ]
                },
                "subnets": [
                {
                    "name": "master",
                    "properties": {
                        "addressPrefix": "[parameters('masterSubnetCidr')]",
                        "serviceEndpoints": [
                            {
                                "service": "Microsoft.ContainerRegistry"
                            }
                        ],
                        "privateLinkServiceNetworkPolicies": "Disabled"
                    }
                },
                {
                    "name": "worker",
                    "properties": {
                        "addressPrefix": "[parameters('workerSubnetCidr')]",
                        "serviceEndpoints": [
                            {
                                "service": "Microsoft.ContainerRegistry"
                            }
                        ]
                    }
                }]
            }
        },
        {
            "type": "Microsoft.Network/virtualNetworks/providers/roleAssignments",
            "apiVersion": "2018-09-01-preview",
            "name": "[concat(parameters('clusterVnetName'), '/Microsoft.Authorization/', guid(resourceGroup().id, deployment().name, parameters('aadObjectId')))]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('clusterVnetName'))]"
            ],
            "properties": {
                "roleDefinitionId": "[variables('contribRole')]",
                "principalId":"[parameters('aadObjectId')]"
            }
        },
        {
            "type": "Microsoft.Network/virtualNetworks/providers/roleAssignments",
            "apiVersion": "2018-09-01-preview",
            "name": "[concat(parameters('clusterVnetName'), '/Microsoft.Authorization/', guid(resourceGroup().id, deployment().name, parameters('rpObjectId')))]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('clusterVnetName'))]"
            ],
            "properties": {
                "roleDefinitionId": "[variables('fpNetworkRole ')]",
                "principalId":"[parameters('rpObjectId')]"
            }
        },
        {
            "type": "Microsoft.RedHatOpenShift/OpenShiftClusters",
            "apiVersion": "2025-07-25",
            "name": "[parameters('clusterName')]",
            "location": "[parameters('location')]",
            "tags": "[parameters('tags')]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', parameters('clusterVnetName'))]"
            ],
            "properties": {
                "clusterProfile": {
                    "domain": "[parameters('domain')]",
                    "resourceGroupId": "[concat('/subscriptions/', subscription().subscriptionId,'/resourceGroups/aro-', parameters('domain'))]",
                    "pullSecret": "[parameters('pullSecret')]"
                },
                "networkProfile": {
                    "podCidr": "[parameters('podCidr')]",
                    "serviceCidr": "[parameters('serviceCidr')]"
                },
                "servicePrincipalProfile": {
                    "clientId": "[parameters('aadClientId')]",
                    "clientSecret": "[parameters('aadClientSecret')]"
                },
                "masterProfile": {
                    "vmSize": "[parameters('masterVmSize')]",
                    "subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('clusterVnetName'), 'master')]"
                },
                "workerProfiles": [
                    {
                        "name": "worker",
                        "vmSize": "[parameters('workerVmSize')]",
                        "diskSizeGB": "[parameters('workerVmDiskSize')]",
                        "subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('clusterVnetName'), 'worker')]",
                        "count": "[parameters('workerCount')]"
                    }
                ],
                "apiserverProfile": {
                    "visibility": "[parameters('apiServerVisibility')]"
                },
                "ingressProfiles": [
                    {
                        "name": "default",
                        "visibility": "[parameters('ingressVisibility')]"
                    }
                ]
            }
        }
    ],
    "outputs": {
         "clusterCredentials": {
             "type": "object",
             "value": "[listCredentials(resourceId('Microsoft.RedHatOpenShift/OpenShiftClusters', parameters('clusterName')), '2025-07-25')]"
         },
         "oauthCallbackURL": {
             "type": "string",
             "value": "[concat('https://oauth-openshift.apps.', parameters('domain'), '.', parameters('location'), '.aroapp.io/oauth2callback/AAD')]"
         }
    }
}

Создайте файл Bicep

В следующем примере показано, как должен выглядеть файл Azure Bicep при настройке для кластера Azure Red Hat OpenShift.

Файл Bicep определяет три ресурса Azure:

Дополнительные шаблоны Azure Red Hat OpenShift можно найти на веб-сайте Red Hat OpenShift.

Создайте следующий Bicep-файл, содержащий определение для кластера Azure Red Hat OpenShift. В следующем примере показано, как должен выглядеть файл Bicep при настройке.

Сохраните следующий файл как azuredeploy.bicep:

@description('Location')
param location string = 'eastus'

@description('Domain Prefix')
param domain string = ''

@description('Pull secret from cloud.redhat.com. The json should be input as a string')
param pullSecret string

@description('Name of vNet')
param clusterVnetName string = 'aro-vnet'

@description('vNet Address Space')
param clusterVnetCidr string = '10.100.0.0/15'

@description('Worker node subnet address space')
param workerSubnetCidr string = '10.100.70.0/23'

@description('Master node subnet address space')
param masterSubnetCidr string = '10.100.76.0/24'

@description('Master Node VM Type')
param masterVmSize string = 'Standard_D8s_v3'

@description('Worker Node VM Type')
param workerVmSize string = 'Standard_D4s_v3'

@description('Worker Node Disk Size in GB')
@minValue(128)
param workerVmDiskSize int = 128

@description('Number of Worker Nodes')
@minValue(3)
param workerCount int = 3

@description('Cidr for Pods')
param podCidr string = '10.128.0.0/14'

@metadata({
  description: 'Cidr of service'
})
param serviceCidr string = '172.30.0.0/16'

@description('Unique name for the cluster')
param clusterName string

@description('Tags for resources')
param tags object = {
  env: 'Dev'
  dept: 'Ops'
}

@description('Api Server Visibility')
@allowed([
  'Private'
  'Public'
])
param apiServerVisibility string = 'Public'

@description('Ingress Visibility')
@allowed([
  'Private'
  'Public'
])
param ingressVisibility string = 'Public'

@description('The Application ID of an Azure Active Directory client application')
param aadClientId string

@description('The Object ID of an Azure Active Directory client application')
param aadObjectId string

@description('The secret of an Azure Active Directory client application')
@secure()
param aadClientSecret string

@description('The ObjectID of the Resource Provider Service Principal')
param rpObjectId string

@description('Specify if FIPS validated crypto modules are used')
@allowed([
  'Enabled'
  'Disabled'
])
param fips string = 'Disabled'

@description('Specify if master VMs are encrypted at host')
@allowed([
  'Enabled'
  'Disabled'
])
param masterEncryptionAtHost string = 'Disabled'

@description('Specify if worker VMs are encrypted at host')
@allowed([
  'Enabled'
  'Disabled'
])
param workerEncryptionAtHost string = 'Disabled'

var contributorRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', 'b24988ac-6180-42a0-ab88-20f7382dd24c')
var firstPartyNetworkRoleDefinitionId = resourceId('Microsoft.Authorization/roleDefinitions', '42f3c60f-e7b1-46d7-ba56-6de681664342')
var resourceGroupId = '/subscriptions/${subscription().subscriptionId}/resourceGroups/aro-${domain}-${location}'
var masterSubnetId=resourceId('Microsoft.Network/virtualNetworks/subnets', clusterVnetName, 'master')
var workerSubnetId=resourceId('Microsoft.Network/virtualNetworks/subnets', clusterVnetName, 'worker')

resource clusterVnetName_resource 'Microsoft.Network/virtualNetworks@2020-05-01' = {
  name: clusterVnetName
  location: location
  tags: tags
  properties: {
    addressSpace: {
      addressPrefixes: [
        clusterVnetCidr
      ]
    }
    subnets: [
      {
        name: 'master'
        properties: {
          addressPrefix: masterSubnetCidr
          serviceEndpoints: [
            {
              service: 'Microsoft.ContainerRegistry'
            }
          ]
          privateLinkServiceNetworkPolicies: 'Disabled'
        }
      }
      {
        name: 'worker'
        properties: {
          addressPrefix: workerSubnetCidr
          serviceEndpoints: [
            {
              service: 'Microsoft.ContainerRegistry'
            }
          ]
        }
      }
    ]
  }
}

resource clusterVnetName_Microsoft_Authorization_id_name_aadObjectId 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = {
  name: guid(aadObjectId, clusterVnetName_resource.id, contributorRoleDefinitionId)
  scope: clusterVnetName_resource
  properties: {
    roleDefinitionId: contributorRoleDefinitionId
    principalId: aadObjectId
    principalType: 'ServicePrincipal'
  }
}

resource clusterVnetName_Microsoft_Authorization_id_name_rpObjectId 'Microsoft.Authorization/roleAssignments@2020-10-01-preview' = {
  name: guid(rpObjectId, clusterVnetName_resource.id, firstPartyNetworkRoleDefinitionId)
  scope: clusterVnetName_resource
  properties: {
    roleDefinitionId: firstPartyNetworkRoleDefinitionId
    principalId: rpObjectId
    principalType: 'ServicePrincipal'
  }
}

resource clusterName_resource 'Microsoft.RedHatOpenShift/OpenShiftClusters@2025-07-25' = {
  name: clusterName
  location: location
  tags: tags
  properties: {
    clusterProfile: {
      domain: domain
      resourceGroupId: resourceGroupId
      pullSecret: pullSecret
      fipsValidatedModules: fips
    }
    networkProfile: {
      podCidr: podCidr
      serviceCidr: serviceCidr
    }
    servicePrincipalProfile: {
      clientId: aadClientId
      clientSecret: aadClientSecret
    }
    masterProfile: {
      vmSize: masterVmSize
      subnetId: masterSubnetId
      encryptionAtHost: masterEncryptionAtHost
    }
    workerProfiles: [
      {
        name: 'worker'
        vmSize: workerVmSize
        diskSizeGB: workerVmDiskSize
        subnetId: workerSubnetId
        count: workerCount
        encryptionAtHost: workerEncryptionAtHost
      }
    ]
    apiserverProfile: {
      visibility: apiServerVisibility
    }
    ingressProfiles: [
      {
        name: 'default'
        visibility: ingressVisibility
      }
    ]
  }
  dependsOn: [
    clusterVnetName_resource
  ]
}

Развертывание шаблона azuredeploy.json

Шаблон azuredeploy.json используется для развертывания кластера Azure Red Hat OpenShift. Требуются следующие параметры:

Замечание

domain Для параметра укажите префикс домена, который будет использоваться в составе автоматически созданного DNS-имени для консоли OpenShift и серверов API. Этот префикс также используется в составе имени группы ресурсов, созданной для размещения виртуальных машин кластера.

Недвижимость Описание Допустимые параметры Значение по умолчанию
domain Префикс домена для кластера. никакой
pullSecret Секретный ключ для загрузки, который вы получили на веб-сайте Red Hat OpenShift Cluster Manager.
clusterName Имя кластера.
aadClientId Идентификатор приложения (GUID) клиентского приложения Microsoft Entra.
aadObjectId Идентификатор объекта (GUID) субъекта службы для клиентского приложения Microsoft Entra.
aadClientSecret Секрет клиента для субъекта-службы клиентского приложения Microsoft Entra в виде защищенной строки.
rpObjectId Идентификатор объекта (GUID) субъекта-службы поставщика ресурсов.

Приведенные ниже параметры шаблона имеют значения по умолчанию. Их можно указать, но они не требуются явным образом.

Недвижимость Описание Допустимые параметры Значение по умолчанию
location Расположение нового кластера. Это местоположение может совпадать с регионом группы ресурсов или отличаться от него. Истус
clusterVnetName Имя виртуальной сети для кластера. aro-vnet
clusterVnetCidr Адресное пространство виртуальной сети в нотации маршрутизации без классов (Inter-Domain) (CIDR). 10.100.0.0/15
workerSubnetCidr Адресное пространство подсети рабочего узла в нотации CIDR. 10.100.70.0/23
masterSubnetCidr Адресное пространство подсети узла уровня управления в нотации CIDR. 10.100.76.0/24
masterVmSize Тип/размер виртуальной машины узла управляющей плоскости. Standard_D8s_v3
workerVmSize Тип или размер виртуальной машины рабочего узла. Standard_D4s_v3
workerVmDiskSize Размер диска рабочего узла в гигабайтах. 128
workerCount Количество рабочих узлов. 3
podCidr Адресное пространство подов в формате CIDR. 10.128.0.0/14
serviceCidr Адресное пространство службы в нотации CIDR. 172.30.0.0/16
tags Хэш-таблица тегов ресурсов. @{env = 'Dev'; dept = 'Ops'}
apiServerVisibility Видимость сервера API (Public или Private). Публика
ingressVisibility Видимость входящего трафика (вход) (Public или Private). Публика

В следующих разделах приведены инструкции с помощью PowerShell или Azure CLI.

Шаги в PowerShell

Выполните следующие действия, если вы используете PowerShell.

Перед началом работы — PowerShell

Перед выполнением команд, приведённых в этой статье, может потребоваться выполнить Connect-AzAccount. Прежде чем продолжить, проверьте, есть ли у вас подключение к Azure. Чтобы проверить наличие подключения, выполните проверку Get-AzContext наличия доступа к активной подписке Azure.

Замечание

Этот шаблон использует текст pull-secret, полученный с веб-сайта Red Hat OpenShift Cluster Manager. Прежде чем продолжить, убедитесь, что у вас есть pull-secret, сохранённый локально под именем pull-secret.txt.

$rhosPullSecret= Get-Content .\pull-secret.txt -Raw # the pull secret text that was obtained from the Red Hat OpenShift Cluster Manager website

Определите следующие параметры как переменные среды — PowerShell

$resourceGroup="aro-rg"       # the new resource group for the cluster
$location="eastus"         # the location of the new cluster
$domain="mydomain"           # the domain prefix for the cluster
$aroClusterName="cluster"    # the name of the cluster

Регистрация необходимых поставщиков ресурсов — PowerShell

Зарегистрируйте в подписке следующие поставщики ресурсов: Microsoft.RedHatOpenShiftи Microsoft.ComputeMicrosoft.StorageMicrosoft.Authorization.

Register-AzResourceProvider -ProviderNamespace Microsoft.RedHatOpenShift
Register-AzResourceProvider -ProviderNamespace Microsoft.Compute
Register-AzResourceProvider -ProviderNamespace Microsoft.Storage
Register-AzResourceProvider -ProviderNamespace Microsoft.Authorization

Создание новой группы ресурсов — PowerShell

New-AzResourceGroup -Name $resourceGroup -Location $location

Создание субъекта-службы и назначение ролей — PowerShell

$suffix=Get-Random # random suffix for the Service Principal
$spDisplayName="sp-$resourceGroup-$suffix"
$azureADAppSp = New-AzADServicePrincipal -DisplayName $spDisplayName -Role Contributor

New-AzRoleAssignment -ObjectId $azureADAppSp.Id -RoleDefinitionName 'User Access Administrator' -ResourceGroupName $resourceGroup -ObjectType 'ServicePrincipal'
New-AzRoleAssignment -ObJectId $azureADAppSp.Id -RoleDefinitionName 'Contributor' -ResourceGroupName $resourceGroup -ObjectType 'ServicePrincipal'

Получение пароля субъекта-службы — PowerShell

$aadClientSecretDigest = ConvertTo-SecureString -String $azureADAppSp.PasswordCredentials.SecretText -AsPlainText -Force

Получение субъекта-службы для поставщика ресурсов OpenShift — PowerShell

$rpOpenShift =  Get-AzADServicePrincipal -DisplayName 'Azure Red Hat OpenShift RP' | Select-Object -ExpandProperty Id -Property Id -First 1

Проверьте параметры перед развертыванием кластера — PowerShell

# setup the parameters for the deployment
$templateParams = @{
    domain = $domain
    clusterName = $aroClusterName
    location = $location
    aadClientId = $azureADAppSp.AppId
    aadObjectId = $azureADAppSp.Id
    aadClientSecret = $aadClientSecretDigest
    rpObjectId = $rpOpenShift.Id
    pullSecret = $rhosPullSecret
}

Write-Verbose (ConvertTo-Json $templateParams) -Verbose

Развертывание кластера Azure Red Hat OpenShift с помощью шаблона ARM — PowerShell

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroup @templateParams `
    -TemplateFile azuredeploy.json

Подключитесь к вашему кластеру

Чтобы подключиться к новому кластеру, ознакомьтесь с инструкциями в статье "Подключение к кластеру Azure Red Hat OpenShift 4".

Очистка ресурсов — PowerShell

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

Remove-AzResourceGroup -Name $resourceGroup -Force

Инструкции для Azure CLI

Выполните следующие действия, если вы используете Azure CLI.

Перед началом - Azure CLI

Перед выполнением команд из этой статьи может потребоваться выполнить az login. Проверьте, есть ли у вас подключение к Azure, прежде чем продолжить. Чтобы проверить наличие подключения, запустите az account list и убедитесь, что у вас есть доступ к активной подписке Azure.

Замечание

Этот шаблон будет использовать текст секретного ключа pull, полученный на веб-сайте Red Hat OpenShift Cluster Manager. Прежде чем продолжить, убедитесь, что этот секрет сохранён локально как pull-secret.txt.

PULL_SECRET=$(cat pull-secret.txt)    # the pull secret text

Определите следующие параметры как переменные среды — Azure CLI

RESOURCEGROUP=aro-rg            # the new resource group for the cluster
LOCATION=eastus                 # the location of the new cluster
DOMAIN=mydomain                 # the domain prefix for the cluster
ARO_CLUSTER_NAME=aro-cluster    # the name of the cluster

Регистрация необходимых поставщиков ресурсов в Azure CLI

Зарегистрируйте в подписке следующие поставщики ресурсов: Microsoft.RedHatOpenShiftи Microsoft.ComputeMicrosoft.StorageMicrosoft.Authorization.

az provider register --namespace 'Microsoft.RedHatOpenShift' --wait
az provider register --namespace 'Microsoft.Compute' --wait
az provider register --namespace 'Microsoft.Storage' --wait
az provider register --namespace 'Microsoft.Authorization' --wait

Создание новой группы ресурсов — Azure CLI

az group create --name $RESOURCEGROUP --location $LOCATION

Создание субъекта-службы для нового приложения Microsoft Entra

  • Azure CLI (Интерфейс командной строки для Azure)
az ad sp create-for-rbac --name "sp-$RG_NAME-${RANDOM}" > app-service-principal.json
SP_CLIENT_ID=$(jq -r '.appId' app-service-principal.json)
SP_CLIENT_SECRET=$(jq -r '.password' app-service-principal.json)
SP_OBJECT_ID=$(az ad sp show --id $SP_CLIENT_ID | jq -r '.id')

Назначение роли участника новому субъекту-службе Azure CLI

az role assignment create \
    --role 'User Access Administrator' \
    --assignee-object-id $SP_OBJECT_ID \
    --scope $SCOPE \
    --assignee-principal-type 'ServicePrincipal'

az role assignment create \
    --role 'Contributor' \
    --assignee-object-id $SP_OBJECT_ID \
    --scope $SCOPE \
    --assignee-principal-type 'ServicePrincipal'

Получение идентификатора объекта субъекта-службы для поставщика ресурсов OpenShift с помощью Azure CLI

ARO_RP_SP_OBJECT_ID=$(az ad sp list --display-name "Azure Red Hat OpenShift RP" --query [0].id -o tsv)

Развертывание кластера — Azure CLI

az deployment group create \
    --name aroDeployment \
    --resource-group $RESOURCEGROUP \
    --template-file azuredeploy.json \
    --parameters location=$LOCATION \
    --parameters domain=$DOMAIN \
    --parameters pullSecret=$PULL_SECRET \
    --parameters clusterName=$ARO_CLUSTER_NAME \
    --parameters aadClientId=$SP_CLIENT_ID \
    --parameters aadObjectId=$SP_OBJECT_ID \
    --parameters aadClientSecret=$SP_CLIENT_SECRET \
    --parameters rpObjectId=$ARO_RP_SP_OBJECT_ID
az deployment group create \
    --name aroDeployment \
    --resource-group $RESOURCEGROUP \
    --template-file azuredeploy.bicep \
    --parameters location=$LOCATION \
    --parameters domain=$DOMAIN \
    --parameters pullSecret=$PULL_SECRET \
    --parameters clusterName=$ARO_CLUSTER_NAME \
    --parameters aadClientId=$SP_CLIENT_ID \
    --parameters aadObjectId=$SP_OBJECT_ID \
    --parameters aadClientSecret=$SP_CLIENT_SECRET \
    --parameters rpObjectId=$ARO_RP_SP_OBJECT_ID

Подключение к кластеру — Azure CLI

Чтобы подключиться к новому кластеру, ознакомьтесь с инструкциями в статье "Подключение к кластеру Azure Red Hat OpenShift 4".

Очистка ресурсов — Azure CLI

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

az aro delete --resource-group $RESOURCEGROUP --name $CLUSTER

Подсказка

Есть проблемы? Сообщите нам на сайте GitHub, открыв проблему в репозитории Azure Red Hat Openshift.

Дальнейшие шаги

Из этой статьи вы узнали, как создать кластер Azure Red Hat OpenShift под управлением OpenShift 4 с помощью шаблонов ARM и Bicep.

Перейдите к следующей статье, чтобы узнать, как настроить кластер для проверки подлинности с помощью идентификатора Microsoft Entra.