빠른 시작: Azure Resource Manager 템플릿 또는 Bicep 파일을 사용하여 Azure Red Hat OpenShift 클러스터 배포
이 문서에서는 ARM 템플릿(Azure Resource Manager 템플릿) 또는 Bicep을 사용하여 Azure Red Hat OpenShift 클러스터를 만드는 방법을 설명합니다. PowerShell 또는 Azure CLI(Azure 명령줄 인터페이스)를 사용하여 Azure Red Hat OpenShift 클러스터를 배포할 수 있습니다.
Azure Resource Manager 템플릿은 프로젝트에 대한 인프라 및 구성을 정의하는 JSON(JavaScript Object Notation) 파일입니다. 이 템플릿은 선언적 구문을 사용합니다. 배포를 만들기 위한 프로그래밍 명령의 시퀀스를 작성하지 않고 의도하는 배포를 설명합니다.
Bicep은 선언적 구문을 사용하여 Azure 리소스를 배포하는 DSL(도메인 특정 언어)입니다. Bicep 파일에서 Azure에 배포하려는 인프라를 정의한 다음, 개발 수명 주기 내내 해당 파일을 사용하여 인프라를 반복적으로 배포합니다. 리소스는 일관된 방식으로 배포됩니다.
필수 조건
활성 구독이 있는 Azure 계정이 필요합니다. 계정이 아직 없는 경우 체험 계정을 만들 수 있습니다.
사용자 액세스 관리자 및 기여자 역할을 할당하는 기능입니다. 이 기능이 부족한 경우 Microsoft Entra 관리자에게 문의하여 역할을 관리합니다.
Red Hat 계정입니다. 계정이 없으면 계정을 등록해야 합니다.
Azure Red Hat OpenShift 클러스터의 풀 비밀입니다. Red Hat OpenShift Cluster Manager 웹 사이트에서 풀 비밀 파일을 다운로드합니다.
Azure PowerShell 코드를 로컬에서 실행하려면 Azure PowerShell을 사용합니다.
Azure CLI 코드를 로컬로 실행하려는 경우:
- Bash 셸(예: Windows용 Git에 포함된 Git Bash)
- Azure CLI
ARM 템플릿 또는 Bicep 파일 만들기
ARM 템플릿(Azure Resource Manager 템플릿) 또는 Azure Bicep 파일을 선택합니다. 그런 다음 Azure 명령줄(azure-cli) 또는 PowerShell을 사용하여 템플릿을 배포할 수 있습니다.
ARM 템플릿 만들기
다음 예에서는 Azure RedHat OpenShift 클러스터에 대해 구성된 경우 ARM 템플릿이 어떻게 표시되는지 보여 줍니다.
템플릿은 세 가지 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": {
"decription": "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 Red Hat OpenShift 클러스터에 대해 구성된 경우 Azure Bicep 파일이 어떻게 표시되는지 보여 줍니다.
Bicep 파일은 세 가지 Azure 리소스를 정의합니다.
- Microsoft.Network/virtualNetworks
- Microsoft.Network/virtualNetworks/providers/roleAssignments
- Microsoft.RedHatOpenShift/OpenShiftClusters
더 많은 Azure Red Hat OpenShift 템플릿은 Red Hat OpenShift 웹 사이트에서 찾을 수 있습니다.
Azure Red Hat OpenShift 클러스터에 대한 정의를 포함하는 다음 Bicep 파일을 만듭니다. 다음 예에서는 구성 시 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
매개 변수에 대해 OpenShift 콘솔 및 API 서버에 대해 자동 생성된 DNS 이름의 일부로 사용될 도메인 접두사를 지정합니다. 이 접두사는 클러스터 VM을 호스트하기 위해 만들어진 리소스 그룹 이름의 일부로도 사용됩니다.
속성 | 설명 | 유효한 옵션 | 기본값 |
---|---|---|---|
domain |
클러스터의 도메인 접두사입니다. | 없음 | |
pullSecret |
Red Hat OpenShift Cluster Manager 웹 사이트에서 얻은 풀 비밀입니다. | ||
clusterName |
클러스터의 이름입니다. | ||
aadClientId |
Microsoft Entra 클라이언트 애플리케이션의 애플리케이션 ID(GUID)입니다. | ||
aadObjectId |
Microsoft Entra 클라이언트 애플리케이션에 대한 서비스 주체의 개체 ID(GUID)입니다. | ||
aadClientSecret |
Microsoft Entra 클라이언트 애플리케이션에 대한 서비스 주체의 클라이언트 암호(보안 문자열)입니다. | ||
rpObjectId |
리소스 공급자 서비스 주체의 개체 ID(GUID)입니다. |
아래 템플릿 매개 변수에는 기본값이 있습니다. 지정할 수 있지만 명시적으로 필요하지는 않습니다.
속성 | 설명 | 유효한 옵션 | 기본값 |
---|---|---|---|
location |
새 ARO 클러스터의 위치입니다. 이 위치는 리소스 그룹 지역과 동일하거나 다를 수 있습니다. | eastus | |
clusterVnetName |
ARO 클러스터의 가상 네트워크 이름입니다. | aro-vnet | |
clusterVnetCidr |
CIDR(Classless Inter-Domain Routing) 표기법의 ARO 가상 네트워크 주소 공간입니다. | 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 |
작업자 노드의 디스크 크기(GB)입니다. | 128 | |
workerCount |
작업자 노드 수. | 3 | |
podCidr |
CIDR 표기법으로 된 Pod의 주소 공간입니다. | 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
ARM 템플릿을 사용하여 Azure Red Hat OpenShift 클러스터 배포 - 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 리소스 공급자에 대한 서비스 주체 개체 ID 가져오기 - 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
팁
문제가 있나요? ARO(Azure Red Hat Openshift) 리포지토리에서 문제를 열어 GitHub에서 알려 주세요.
다음 단계
이 문서에서 ARM 템플릿과 Bicep을 모두 사용하여 OpenShift 4를 실행하는 Azure Red Hat OpenShift 클러스터를 만드는 방법을 알아보았습니다.
Microsoft Entra ID를 사용하여 인증을 위해 클러스터를 구성하는 방법을 알아보려면 다음 문서로 이동합니다.