Краткое руководство. Развертывание кластера Azure Red Hat OpenShift с помощью шаблона Resource Manager Azure или файла Bicep
В этой статье описывается, как использовать шаблон Azure Resource Manager (шаблон ARM) или Bicep для создания кластера Azure Red Hat OpenShift. Кластер 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
Учетная запись Azure с активной подпиской. Если ее нет, можно создать учетную запись бесплатно.
Возможность назначать роли администратора и участника доступа пользователей. Если у вас нет этой возможности, обратитесь к администратору Microsoft Entra для управления ролями.
Учетная запись Red Hat. Если у вас нет, вам придется зарегистрировать учетную запись.
Секрет извлечения для кластера Azure Red Hat OpenShift. Скачайте файл секрета извлечения с веб-сайта 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:
- Microsoft.Network/virtualNetworks;
- Microsoft.Network/virtualNetworks/providers/roleAssignments
- Microsoft.RedHatOpenShift/OpenShiftClusters
Дополнительные примеры шаблонов 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 ARO vNet"
}
},
"clusterVnetCidr": {
"type": "string",
"defaultValue": "10.100.0.0/15",
"metadata": {
"description": "ARO 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')]"
},
"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('contribRole')]",
"principalId":"[parameters('rpObjectId')]"
}
},
{
"type": "Microsoft.RedHatOpenShift/OpenShiftClusters",
"apiVersion": "2020-04-30",
"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')), '2020-04-30')]"
},
"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:
- Microsoft.Network/virtualNetworks;
- Microsoft.Network/virtualNetworks/providers/roleAssignments
- Microsoft.RedHatOpenShift/OpenShiftClusters
Дополнительные шаблоны 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 ARO vNet')
param clusterVnetName string = 'aro-vnet'
@description('ARO 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 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, contributorRoleDefinitionId)
scope: clusterVnetName_resource
properties: {
roleDefinitionId: contributorRoleDefinitionId
principalId: rpObjectId
principalType: 'ServicePrincipal'
}
}
resource clusterName_resource 'Microsoft.RedHatOpenShift/OpenShiftClusters@2023-04-01' = {
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. Этот префикс также используется в составе имени группы ресурсов, созданной для размещения виртуальных машин кластера.
Свойство | Description | Допустимые параметры | Значение по умолчанию |
---|---|---|---|
domain |
Префикс домена для кластера. | ничего | |
pullSecret |
Секрет извлечения, полученный на веб-сайте Red Hat OpenShift Cluster Manager. | ||
clusterName |
Имя кластера. | ||
aadClientId |
Идентификатор приложения (GUID) клиентского приложения Microsoft Entra. | ||
aadObjectId |
Идентификатор объекта (GUID) субъекта-службы для клиентского приложения Microsoft Entra. | ||
aadClientSecret |
Секрет клиента субъекта-службы для клиентского приложения Microsoft Entra в качестве безопасной строки. | ||
rpObjectId |
Идентификатор объекта (GUID) субъекта-службы поставщика ресурсов. |
Приведенные ниже параметры шаблона имеют значения по умолчанию. Их можно указать, но они не требуются явным образом.
Свойство | Description | Допустимые параметры | Значение по умолчанию |
---|---|---|---|
location |
Расположение нового кластера ARO. Это расположение может быть таким же, как и в регионе группы ресурсов. | eastus | |
clusterVnetName |
Имя виртуальной сети для кластера ARO. | aro-vnet | |
clusterVnetCidr |
Адресное пространство виртуальной сети ARO в нотации маршрутизации без классов между доменами (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 |
Адресное пространство модулей pod в нотации 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.
Примечание.
Этот шаблон использует текст секрета извлечения, полученный на веб-сайте Red Hat OpenShift Cluster Manager. Прежде чем продолжить, убедитесь, что у вас есть секрет извлечения, сохраненный локально 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 ARO cluster
$domain="mydomain" # the domain prefix for the cluster
$aroClusterName="cluster" # the name of the cluster
Регистрация необходимых поставщиков ресурсов — PowerShell
Зарегистрируйте в подписке следующие поставщики ресурсов: Microsoft.RedHatOpenShift
и Microsoft.Compute
Microsoft.Storage
Microsoft.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.
Примечание.
Этот шаблон будет использовать текст секрета извлечения, полученный на веб-сайте 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.Compute
Microsoft.Storage
Microsoft.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
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 (ARO).
Следующие шаги
Из этой статьи вы узнали, как создать кластер Azure Red Hat OpenShift под управлением OpenShift 4 с помощью шаблонов ARM и Bicep.
Перейдите к следующей статье, чтобы узнать, как настроить кластер для проверки подлинности с помощью идентификатора Microsoft Entra.