Freigeben über


Bereitstellen von Infrastrukturknoten in einem Azure Red Hat OpenShift (ARO)-Cluster

Mit ARO können Sie Infrastrukturcomputersätze erstellen, auf denen nur Infrastrukturkomponenten wie der Standard-Router, die integrierte Containerregistrierung und die Komponenten für Cluster-Metriken und -Überwachung laufen. Diese Infrastrukturcomputer verursachen keine OpenShift-Kosten; sie verursachen nur Azure Compute-Kosten.

In einer Produktionsbereitstellung wird empfohlen, drei Computersätze für Infrastrukturkomponenten bereitzustellen. Jeder dieser Knoten kann in verschiedenen Verfügbarkeitszonen bereitgestellt werden, um die Verfügbarkeit zu erhöhen. Für diese Art von Konfiguration sind drei unterschiedliche Computersätze erforderlich; einer für jede Verfügbarkeitszone. Anleitungen zur Größenanpassung von Infrastrukturknoten finden Sie unter Empfohlene Infrastrukturpraktiken.

Qualifizierte Workloads

Die folgenden Infrastrukturarbeitslasten enthalten keine Azure Red Hat OpenShift-Workerabonnements:

  • Kubernetes und Azure Red Hat OpenShift-Steuerungsebenendienste, die auf Masters ausgeführt werden

  • Der Standardrouter

  • Die integrierte Containerimageregistrierung

  • Der HAProxy-basierte Eingangsdatencontroller

  • Die Sammlung von Clustermetriken oder der Überwachungsdienst, einschließlich Komponenten für die Überwachung benutzerdefinierter Projekte

  • Cluster-aggregierte Protokollierung

Wichtig

Die Ausführung anderer als der vorgesehenen Workloads auf den Infrastrukturknoten kann sich auf die Vereinbarung zum Servicelevel (SLA) und die Stabilität des Clusters auswirken.

Voraussetzungen

Damit Azure-VMs, die einem ARO-Cluster hinzugefügt werden, als Infrastrukturknoten (im Gegensatz zu weiteren Workerknoten) anerkannt werden und keine OpenShift-Gebühr erhoben wird, müssen die folgenden Kriterien erfüllt sein:

  • Die Knoten dürfen nur einem der folgenden Instanztypen angehören:

    • Standard_E4s_v5
    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E4as_v5
    • Standard_E8as_v5
    • Standard_E16as_v5
  • Es dürfen nicht mehr als drei Knoten vorhanden sein. Für jeden weiteren Knoten wird eine OpenShift-Gebühr erhoben.

  • Die Knoten müssen über ein Azure-Tag mit node_role: infra verfügen

  • Es sind nur Workloads erlaubt, die für Infrastrukturknoten bestimmt sind. Alle anderen Workloads würden diese als Workerknoten betrachten und somit der Gebühr unterliegen. Dies kann auch die SLA ungültig machen und die Stabilität des Clusters gefährden.

Erstellen von Infrastrukturcomputersätzen

  1. Verwenden Sie die Vorlage unten, um die Manifestdefinition für Ihren Infrastruktur-Computersatz zu erstellen.

  2. Ersetzen Sie alle Felder zwischen „<>“ durch Ihre spezifischen Werte.

    Ersetzen Sie beispielsweise location: <REGION> durch location: westus2.

  3. Hilfe zum Ausfüllen der erforderlichen Werte finden Sie unter Befehle und Werte.

  4. Erstellen Sie den Computersatz mit dem folgenden Befehl: oc create -f <machine-set-filename.yaml>

  5. Führen Sie den folgenden Befehl aus, um die Erstellung des Computersatzes zu überprüfen: oc get machineset -n openshift-machine-api

    Die Ausgabe des Überprüfungsbefehls sollte in etwa wie unten aussehen:

    NAME                            DESIRED     CURRENT  READY   AVAILABLE   AGE
    ok0608-vkxvw-infra-westus21     1           1        1       1           165M
    ok0608-vkxvw-worker-westus21    1           1        1       1           4H24M
    ok0608-vkxvw-worker-westus22    1           1        1       1           4H24M 
    ok0608-vkxvw-worker-westus23    1           1        1       1           4H24M
    

Manifestdefinitionsvorlage

Verwenden Sie die folgende Vorlage im obigen Verfahren, um die Manifestdefinition für Ihren Infrastruktur-Computersatz zu erstellen:

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <INFRASTRUCTURE_ID> 
    machine.openshift.io/cluster-api-machine-role: infra 
    machine.openshift.io/cluster-api-machine-type: infra 
  name: <INFRASTRUCTURE_ID>-infra-<REGION><ZONE>
  namespace: openshift-machine-api
spec:
  replicas: 1
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <INFRASTRUCTURE_ID>
      machine.openshift.io/cluster-api-machineset: <INFRASTRUCTURE_ID>-infra-<REGION><ZONE>
  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: <INFRASTRUCTURE_ID>
        machine.openshift.io/cluster-api-machine-role: infra 
        machine.openshift.io/cluster-api-machine-type: infra 
        machine.openshift.io/cluster-api-machineset: <INFRASTRUCTURE_ID>-infra-<REGION><ZONE>
    spec:
      metadata:
        creationTimestamp: null
        labels:
          machine.openshift.io/cluster-api-machineset: <OPTIONAL: Specify the machine set name to enable the use of availability sets. This setting only applies to new compute machines.> 
          node-role.kubernetes.io/infra: ''
      providerSpec:
        value:
          apiVersion: azureproviderconfig.openshift.io/v1beta1
          credentialsSecret:
            name: azure-cloud-credentials
            namespace: openshift-machine-api
          image: 
            offer: aro4
            publisher: azureopenshift
            sku: <SKU>
            version: <VERSION>
          kind: AzureMachineProviderSpec
          location: <REGION>
          metadata:
            creationTimestamp: null
          natRule: null
          networkResourceGroup: <NETWORK_RESOURCE_GROUP>
          osDisk:
            diskSizeGB: 128
            managedDisk:
              storageAccountType: Premium_LRS
            osType: Linux
          publicIP: false
          resourceGroup: <CLUSTER_RESOURCE_GROUP>
          tags:
            node_role: infra
          subnet: <SUBNET_NAME>   
          userDataSecret:
            name: worker-user-data 
          vmSize: <Standard_E4s_v5, Standard_E8s_v5, Standard_E16s_v5>
          vnet: <VNET_NAME> 
          zone: <ZONE>
      taints: 
      - key: node-role.kubernetes.io/infra
        effect: NoSchedule

Befehle und Werte

Nachfolgend finden Sie einige gängige Befehle/Werte, die beim Erstellen und Ausführen der Vorlage verwendet werden.

Alle Computersätze auflisten:

oc get machineset -n openshift-machine-api

Abrufen von Details für einen bestimmten Computersatz:

oc get machineset <machineset_name> -n openshift-machine-api -o yaml

Clusterressourcengruppe:

oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}'

Netzwerkressourcengruppe:

oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.networkResourceGroupName}'

Infrastruktur-ID:

oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'

Region:

oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.location}'

SKU:

oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.image.sku}'

Subnetz:

oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}'

Version:

oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.image.version}'

Vnet:

oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}'

Verschieben von Workloads auf die neuen Infrastrukturknoten

Verwenden Sie die nachstehenden Anweisungen, um Ihre Infrastrukturworkloads auf die zuvor erstellten Infrastrukturknoten zu verschieben.

Eingehende Daten

Verwenden Sie dieses Verfahren für alle zusätzlichen Eingangsdatencontroller, die Sie möglicherweise im Cluster haben.

Hinweis

Wenn Ihre Anwendung sehr hohe Eingangsressourcenanforderungen aufweist, ist es möglicherweise besser, diese über Arbeitsknoten oder einen dedizierten Computersatz zu verteilen.

  1. Legen Sie nodePlacement für ingresscontroller auf node-role.kubernetes.io/infra fest, und erhöhen Sie replicas so, dass es der Anzahl der Infrastrukturknoten entspricht:

    oc patch -n openshift-ingress-operator ingresscontroller default --type=merge  \
     -p='{"spec":{"replicas":3,"nodePlacement":{"nodeSelector":{"matchLabels":{"node-role.kubernetes.io/infra":""}},"tolerations":[{"effect":"NoSchedule","key":"node-role.kubernetes.io/infra","operator":"Exists"}]}}}'
    
  2. Überprüfen Sie, ob der Eingangsdatencontroller-Operator Pods auf den neuen Infrastrukturknoten startet:

    oc -n openshift-ingress get pods -o wide
    
    NAME                              READY   STATUS        RESTARTS   AGE   IP         NODE                                                    NOMINATED NODE   READINESS GATES
    router-default-69f58645b7-6xkvh   1/1     Running       0          66s   10.129.6.6    cz-cluster-hsmtw-infra-aro-machinesets-eastus-3-l6dqw   <none>           <none>
    router-default-69f58645b7-vttqz   1/1     Running       0          66s   10.131.4.6    cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r   <none>           <none>
    router-default-6cb5ccf9f5-xjgcp   1/1     Terminating   0          23h   10.131.0.11   cz-cluster-hsmtw-worker-eastus2-xj9qx                   <none>           <none>
    

Registrierung

  1. Legen Sie nodePlacement für die Registrierung auf node-role.kubernetes.io/infra fest:

    oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge \
    -p='{"spec":{"affinity":{"podAntiAffinity":{"preferredDuringSchedulingIgnoredDuringExecution":[{"podAffinityTerm":{"namespaces":["openshift-image-registry"],"topologyKey":"kubernetes.io/hostname"},"weight":100}]}},"logLevel":"Normal","managementState":"Managed","nodeSelector":{"node-role.kubernetes.io/infra":""},"tolerations":[{"effect":"NoSchedule","key":"node-role.kubernetes.io/infra","operator":"Exists"}]}}'
    
  2. Überprüfen Sie, ob der Registrierungsoperator Pods auf den neuen Infrastrukturknoten startet:

    oc -n openshift-image-registry get pods -l "docker-registry" -o wide
    
    NAME                              READY   STATUS    RESTARTS   AGE     IP           NODE                                                    NOMINATED NODE   READINESS GATES
    image-registry-84cbd76d5d-cfsw7   1/1     Running   0          3h46m   10.128.6.7   cz-cluster-hsmtw-infra-aro-machinesets-eastus-2-kljml   <none>           <none>
    image-registry-84cbd76d5d-p2jf9   1/1     Running   0          3h46m   10.129.6.7   cz-cluster-hsmtw-infra-aro-machinesets-eastus-3-l6dqw   <none>           <none>
    

Clusterüberwachung

  1. Konfigurieren Sie den Clusterüberwachungsstapel für die Verwendung der Infrastrukturknoten.

    Hinweis

    Dadurch werden alle anderen Anpassungen des Clusterüberwachungsstapels außer Kraft gesetzt, so dass Sie Ihre bestehenden Anpassungen zusammenführen sollten, bevor Sie den Befehl ausführen.

    cat << EOF | oc apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |+
        alertmanagerMain:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        prometheusK8s:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        prometheusOperator: {}
        grafana:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        k8sPrometheusAdapter:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        kubeStateMetrics:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        telemeterClient:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        openshiftStateMetrics:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
        thanosQuerier:
          nodeSelector:
            node-role.kubernetes.io/infra: ""
          tolerations:
            - effect: "NoSchedule"
              key: "node-role.kubernetes.io/infra"
              operator: "Exists"
    EOF
    
  2. Überprüfen Sie, ob der OpenShift Monitoring-Operator Pods auf den neuen Infrastrukturknoten startet. Beachten Sie, dass einige Knoten (z. B. prometheus-operator) auf Masterknoten verbleiben.

    oc -n openshift-monitoring get pods -o wide
    
    NAME                                           READY   STATUS    RESTARTS   AGE     IP            NODE                                                    NOMINATED NODE   READINESS GATES
    alertmanager-main-0                            6/6     Running   0          2m14s   10.128.6.11   cz-cluster-hsmtw-infra-aro-machinesets-eastus-2-kljml   <none>           <none>
    alertmanager-main-1                            6/6     Running   0          2m46s   10.131.4.11   cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r   <none>           <none>
    cluster-monitoring-operator-5bbfd998c6-m9w62   2/2     Running   0          28h     10.128.0.23   cz-cluster-hsmtw-master-1                               <none>           <none>
    grafana-599d4b948c-btlp2                       3/3     Running   0          2m48s   10.131.4.10   cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r   <none>           <none>
    kube-state-metrics-574c5bfdd7-f7fjk            3/3     Running   0          2m49s   10.131.4.8    cz-cluster-hsmtw-infra-aro-machinesets-eastus-1-vr56r   <none>           <none>
    

Domain Name System

  1. Erlauben Sie den DNS-Pods, auf den Infrastrukturknoten zu laufen.

    oc edit dns.operator/default
    
    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
    name: default
    spec:
    nodePlacement:
      tolerations:
      - operator: Exists
    
  2. Überprüfen Sie, ob DNS-Pods auf allen Infrastrukturknoten geplant sind.

oc get ds/dns-default -n openshift-dns
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
dns-default   7         7         7       7            7           kubernetes.io/os=linux   35d