Share via


Schnellstart: Bereitstellen eines Azure Red Hat OpenShift-Clusters mithilfe einer Azure Resource Manager-Vorlage oder einer Bicep-Datei

In dieser Schnellstartanleitung wird beschrieben, wie Sie entweder eine Azure Resource Manager-Vorlage (ARM-Vorlage) oder eine Bicep-Datei verwenden, um einen Azure Red Hat OpenShift-Cluster zu erstellen. Sie können den Azure Red Hat OpenShift-Cluster entweder mit PowerShell oder der Azure-Befehlszeilenschnittstelle (Command-Line Interface, AZURE CLI) bereitstellen.

Eine Azure Resource Manager-Vorlage ist eine JSON-Datei (JavaScript Object Notation), die die Infrastruktur und die Konfiguration für Ihr Projekt definiert. Die Vorlage verwendet eine deklarative Syntax. Sie beschreiben Ihre geplante Bereitstellung, ohne die Abfolge der Programmierbefehle zu schreiben, mit denen die Bereitstellung erstellt wird.

Bicep ist eine domänenspezifische Sprache (DSL), die deklarative Syntax zum Bereitstellen von Azure-Ressourcen verwendet. In einer Bicep-Datei definieren Sie die Infrastruktur, die Sie in Azure bereitstellen möchten, und verwenden diese Datei dann während des gesamten Entwicklungslebenszyklus, um Ihre Infrastruktur wiederholt zu implementieren. Ihre Ressourcen werden auf einheitliche Weise bereitgestellt.

Voraussetzungen

Erstellen einer ARM-Vorlage oder Bicep-Datei

Wählen Sie entweder eine Azure Resource Manager-Vorlage (ARM-Vorlage) oder eine Azure Bicep-Datei aus. Nun können Sie die Vorlage entweder über die Azure-Befehlszeile (azure-cli) oder über PowerShell bereitstellen.

Erstellen einer ARM-Vorlage

Das folgende Beispiel zeigt, wie Ihre ARM-Vorlage aussehen sollte, wenn sie für Ihren Azure RedHat OpenShift-Cluster konfiguriert ist.

Die Vorlage definiert drei Azure-Ressourcen:

Weitere Beispiele für Azure Red Hat OpenShift-Vorlagen finden Sie auf der Red Hat OpenShift-Website.

Speichern Sie das folgende Beispiel als azuredeploy.bicep:

{
    "$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')]"
         }
    }
}

Erstellen einer Bicep-Datei

Das folgende Beispiel zeigt, wie Ihre Azure Bicep-Datei aussehen sollte, wenn sie für Ihren Azure RedHat OpenShift-Cluster konfiguriert ist.

Die Bicep-Datei definiert drei Azure-Ressourcen:

Weitere Azure Red Hat OpenShift-Vorlagen finden Sie auf der Red Hat OpenShift-Website.

Erstellen Sie die folgende Bicep-Datei, die die Definition für den Azure Red Hat OpenShift-Cluster enthält. Das folgende Beispiel zeigt, wie Ihre konfigurierte Bicep-Datei aussehen sollte.

Speichern Sie die folgende Datei als 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
  ]
}

Bereitstellen der Vorlage „azuredeploy.json“

Dieser Abschnitt enthält Informationen zum Bereitstellen der Vorlage „azuredeploy.json“.

Parameter von „azuredeploy.json“

Die Vorlage „azuredeploy.json“ wird zum Bereitstellen eines Azure Red Hat OpenShift-Clusters verwendet. Die folgenden Parameter sind erforderlich.

Hinweis

Geben Sie für den Parameter domain das Domänenpräfix an, das für OpenShift-Konsolen- und API-Server als Teil des automatisch generierten DNS-Namens verwendet wird. Dieses Präfix wird auch als Teil des Namens der Ressourcengruppe verwendet, die zum Hosten der Cluster-VMs erstellt wird.

Eigenschaft BESCHREIBUNG Gültige Optionen Standardwert
domain Das Domänenpräfix für den Cluster. Keine
pullSecret Das Pull-Geheimnis, das Sie von der Red Hat OpenShift Cluster Manager-Website erhalten haben.
clusterName Der Name des Clusters.
aadClientId Die Anwendungs-ID (eine GUID) einer Microsoft Entra-Clientanwendung.
aadObjectId Die Objekt-ID (eine GUID) des Dienstprinzipals für die Microsoft Entra-Clientanwendung.
aadClientSecret Das Clientgeheimnis des Dienstprinzipals für die Microsoft Entra-Clientanwendung als sichere Zeichenfolge.
rpObjectId Die Objekt-ID (eine GUID) des Ressourcenanbieter-Dienstprinzipals.

Die folgenden Vorlagenparameter besitzen Standardwerte. Sie können angegeben werden, sind aber nicht explizit erforderlich.

Eigenschaft BESCHREIBUNG Gültige Optionen Standardwert
location Der Speicherort des neuen ARO-Clusters. Der Standort kann mit dem Standort der Ressourcengruppe identisch sein oder sich davon unterscheiden. eastus
clusterVnetName Der Name des virtuellen Netzwerks für den ARO-Cluster. aro-vnet
clusterVnetCidr Der Adressraum des virtuellen ARO-Netzwerks in CIDR-Notation (Classless Inter-Domain Routing, klassenloses domänenübergreifendes Routing). 10.100.0.0/15
workerSubnetCidr Der Adressraum des Workerknotensubnetzes in CIDR-Notation. 10.100.70.0/23
masterSubnetCidr Der Adressraum des Knotensubnetzes der Steuerungsebene in CIDR-Notation. 10.100.76.0/24
masterVmSize Der VM-Typ/-Größe des Steuerungsebenenknotens. Standard_D8s_v3
workerVmSize Der VM-Typ/-Größe des Workerknotens. Standard_D4s_v3
workerVmDiskSize Die Datenträgergröße des Workerknotens in Gigabyte. 128
workerCount Die Anzahl Workerknoten: 3
podCidr Der Adressraum der Pods in CIDR-Notation. 10.128.0.0/14
serviceCidr Der Adressraum des Diensts in CIDR-Notation. 172.30.0.0/16
tags Eine Hashtabelle mit Ressourcentags. @{env = 'Dev'; dept = 'Ops'}
apiServerVisibility Die Sichtbarkeit des API-Servers (Public oder Private). Öffentlich
ingressVisibility Die Eingangssichtbarkeit (oderPublicPrivate). Öffentlich

Die folgenden Abschnitte enthalten Anweisungen zur Verwendung von PowerShell oder Azure CLI.

PowerShell-Schritte

Führen Sie die folgenden Schritte aus, wenn Sie PowerShell verwenden.

Bevor Sie beginnen– PowerShell

Vor dem Ausführen der Befehle in dieser Schnellstartanleitung müssen Sie möglicherweise Connect-AzAccount ausführen. Überprüfen Sie, ob eine Verbindung mit Azure besteht, bevor Sie fortfahren. Führen Sie hierzu Get-AzContext aus, um zu überprüfen, ob Sie Zugriff auf ein aktives Azure-Abonnement haben.

Hinweis

Diese Vorlage verwendet den Text des Pull-Geheimnisses, das Sie von der Red Hat OpenShift Cluster Manager-Website erhalten haben. Bevor Sie fortfahren, stellen Sie sicher, dass das Pull-Geheimnis lokal als pull-secret.txt gespeichert ist.

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

Definieren der folgenden Parameter als Umgebungsvariablen – 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

Registrieren der erforderlichen Ressourcenanbieter – PowerShell

Registrieren Sie die folgenden Ressourcenanbieter in Ihrem Abonnement: Microsoft.RedHatOpenShift, Microsoft.Compute und Microsoft.StorageMicrosoft.Authorization.

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

Erstellen der neuen Ressourcengruppe – PowerShell

New-AzResourceGroup -Name $resourceGroup -Location $location

Erstellen eines neuen Dienstprinzipals und Zuweisen von Rollen – 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'

Abrufen des Dienstprinzipalkennworts – PowerShell

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

Abrufen des Dienstprinzipals für den OpenShift-Ressourcenanbieter – PowerShell

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

Überprüfen der Parameter vor der Bereitstellung des Clusters – 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

Bereitstellen des Azure Red Hat OpenShift-Clusters mithilfe der ARM-Vorlage – PowerShell

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

Herstellen einer Clusterverbindung

Um eine Verbindung mit dem neuen Cluster herzustellen, schauen Sie sich die Schritte in Herstellen einer Verbindung mit einem Azure Red Hat OpenShift 4-Cluster an.

Bereinigen von Ressourcen – PowerShell

Wenn Sie fertig sind, führen Sie den folgenden Befehl aus, um Ihre Ressourcengruppe zusammen mit allen in diesem Tutorial erstellten Ressourcen zu löschen.

Remove-AzResourceGroup -Name $resourceGroup -Force

Schritte mit der Azure-Befehlszeilenschnittstelle

Führen Sie die folgenden Schritte aus, wenn Sie die Azure CLI verwenden.

Bevor Sie beginnen – Azure CLI

Vor dem Ausführen der Befehle in dieser Schnellstartanleitung müssen Sie möglicherweise az login ausführen. Überprüfen Sie, ob eine Verbindung mit Azure besteht, bevor Sie fortfahren. Führen Sie hierzu az account list aus, um zu überprüfen, ob Sie Zugriff auf ein aktives Azure-Abonnement haben.

Hinweis

Diese Vorlage verwendet den Text des Pull-Geheimnisses, das Sie von der Red Hat OpenShift Cluster Manager-Website erhalten haben. Bevor Sie fortfahren, stellen Sie sicher, dass dieses Geheimnis lokal als pull-secret.txt gespeichert ist.

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

Definieren der folgenden Parameter als Umgebungsvariablen – 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

Registrieren der erforderlichen Ressourcenanbieter – Azure CLI

Registrieren Sie die folgenden Ressourcenanbieter in Ihrem Abonnement: Microsoft.RedHatOpenShift, Microsoft.Compute und Microsoft.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

Erstellen der neuen Ressourcengruppe – Azure CLI

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

Erstellen eines Dienstprinzipal für die neue Microsoft Entra-Anwendung

  • 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')

Dem neuen Dienstprinzipal die Rolle Mitwirkender zuweisen – 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'

Abrufen der Objekt-ID des Dienstprinzipals für den OpenShift-Ressourcenanbieter – Azure CLI

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

Bereitstellen des Clusters – Azure CLI

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

Herstellen einer Verbindung zu Ihrem Cluster – Azure CLI

Um eine Verbindung mit dem neuen Cluster herzustellen, schauen Sie sich die Schritte in Herstellen einer Verbindung mit einem Azure Red Hat OpenShift 4-Cluster an.

Bereinigen von Ressourcen – Azure CLI

Wenn Sie fertig sind, führen Sie den folgenden Befehl aus, um Ihre Ressourcengruppe zusammen mit allen in diesem Tutorial erstellten Ressourcen zu löschen.

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

Tipp

Treten Probleme auf? Informieren Sie uns über GitHub, indem Sie ein Issue im Repository „Azure Red Hat Openshift (ARO)“ öffnen.

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie mithilfe von ARM-Vorlagen und Bicep-Dateien einen Azure Red Hat OpenShift-Cluster erstellen, auf dem OpenShift 4 ausgeführt wird.

Im nächsten Artikel erfahren Sie, wie Sie den Cluster für die Authentifizierung mithilfe von Microsoft Entra ID konfigurieren können.