Delen via


Infrastructuurknooppunten implementeren in een Azure Red Hat OpenShift-cluster

Met Microsoft Azure Red Hat OpenShift kunt u infrastructuurcomputersets gebruiken om machines te maken die alleen infrastructuuronderdelen hosten, zoals de standaardrouter, het geïntegreerde containerregister en de onderdelen voor metrische gegevens en bewaking van clusters. Voor deze infrastructuurmachines worden geen OpenShift-kosten in rekening gebracht; Er worden alleen Azure Compute-kosten in rekening gebracht.

In een productie-implementatie is het raadzaam om drie machinesets te implementeren voor het opslaan van infrastructuuronderdelen. Elk van deze knooppunten kan worden geïmplementeerd in verschillende beschikbaarheidszones om de beschikbaarheid te verhogen. Voor dit type configuratie zijn drie verschillende machinesets vereist; één voor elke beschikbaarheidszone. Zie Aanbevolen infrastructuurprocedures voor richtlijnen voor het aanpassen van de grootte van infrastructuurknooppunten.

Gekwalificeerde werklasten

De volgende infrastructuurtaken vereisen geen Azure Red Hat OpenShift-werknemersabonnementen:

  • Kubernetes- en Azure Red Hat OpenShift-besturingsvlakservices die worden uitgevoerd op masters

  • De standaardrouter

  • Het geïntegreerde containerafbeeldingenregister

  • De HAProxy-gebaseerde Ingress Controller

  • De verzameling metrische gegevens van het cluster of de bewakingsservice, inclusief onderdelen voor het bewaken van door de gebruiker gedefinieerde projecten

  • Samengevoegde logboekregistratie van clusters

Belangrijk

Het uitvoeren van andere werkbelastingen dan de aangewezen soorten op de infrastructuurknooppunten kan van invloed zijn op de SLA (Service Level Agreement) en de stabiliteit van het cluster.

Vereiste voorwaarden

Om virtuele Azure-machines die zijn toegevoegd aan een cluster te kunnen worden herkend als infrastructuurknooppunten, in plaats van werkknooppunten, en geen OpenShift-kosten in rekening te brengen, moeten aan de volgende criteria worden voldaan:

  • De knooppunten moeten alleen een van de volgende exemplaartypen zijn:

    • Standard_E4s_v5
    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E4as_v5
    • Standard_E8as_v5
    • Standard_E16as_v5
  • Er kunnen niet meer dan drie knooppunten zijn. Voor eventuele extra knooppunten worden kosten in rekening gebracht voor OpenShift.

  • De knooppunten moeten een Azure-tag hebben van node_role: infra

  • Alleen workloads die zijn aangewezen voor infrastructuurknooppunten, zijn toegestaan. Alle andere workloads maken gebruik van deze werkknooppunten en zijn onderworpen aan kosten. Deze aanduiding kan ook de SLA ongeldig maken en de stabiliteit van het cluster in gevaar brengen.

Infrastructuurmachinesets maken

  1. Gebruik de manifestdefinitiesjabloon om de manifestdefinitie voor uw infrastructuurcomputerset te maken.

  2. Vervang alle velden tussen punthaken (<>) door uw specifieke waarden.

    Vervang bijvoorbeeld location: <REGION> door location: westus2

  3. Zie Opdrachten en waarden om de vereiste waarden voor de manifestdefinitiesjabloon op te halen.

  4. Maak de machineset met de volgende opdracht: oc create -f <machine-set-filename.yaml>

  5. Voer de volgende opdracht uit om te verifieren of de machineset is aangemaakt: oc get machineset -n openshift-machine-api

    De uitvoer van de verificatieopdracht moet er ongeveer als volgt uitzien:

    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
    

Sjabloon voor manifestdefinitie

De volgende sjabloon is in de vorige procedure gebruikt om de manifestdefinitie voor uw infrastructuurcomputerset te maken.

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

Opdrachten en waarden

Hier volgen enkele algemene opdrachten en waarden die worden gebruikt om de sjabloon te maken en uit te voeren.

Alle machinesets weergeven:

oc get machineset -n openshift-machine-api

Details voor een specifieke machineset ophalen:

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

Clusterresourcegroep:

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

Netwerkresourcegroep:

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

Infrastructuur-id:

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

Regio:

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}'

Subnet:

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

Versie:

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

Virtueel netwerk:

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

Workloads verplaatsen naar de nieuwe knooppunten van de infrastructuur

Gebruik de volgende instructies om uw workloads voor de infrastructuur te verplaatsen naar de eerder gemaakte knooppunten voor de infrastructuur.

Ingang

Gebruik deze procedure voor andere ingress controllers die u mogelijk in het cluster hebt. Als uw toepassing hoge eisen stelt aan de ingress resources, is het wellicht beter om ze over werkknooppunten of een dedicated machineset te verdelen.

  1. Stel de nodePlacement op de ingresscontroller in op node-role.kubernetes.io/infra en verhoog de replicas zodat deze overeenkomt met het aantal infrastructuurknooppunten.

    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. Controleer of de Ingress Controller Operator pods opstart op de nieuwe infrastructuurknooppunten.

    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>
    

Registersysteem

  1. Stel het nodePlacement in het register in op node-role.kubernetes.io/infra:

    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. Controleer of de registeroperator pods start op de nieuwe infrastructuurknooppunten:

    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>
    

Clusterbewaking

  1. Configureer de clusterbewakingsstack om de infrastructuurknooppunten te gebruiken.

    Dit overschrijft eventuele andere aanpassingen aan de clusterbewakingsstack, dus u kunt uw bestaande aanpassingen samenvoegen voordat u de opdracht uitvoert.

    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. Controleer of de OpenShift Monitoring Operator de pods op de nieuwe infrastructuurknooppunten opstart. Houd er rekening mee dat sommige knooppunten, zoals prometheus-operator, op hoofdknooppunten blijven staan.

    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>
    

DNS (Domeinnaamsysteem)

  1. Toestaan dat de DNS-pods worden uitgevoerd op de infrastructuurknooppunten.

    oc edit dns.operator/default
    
    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
    name: default
    spec:
    nodePlacement:
      tolerations:
      - operator: Exists
    
  2. Controleer of DNS-pods zijn gepland op alle infra knooppunten.

    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
    

Zie Een Azure Red Hat OpenShift-cluster upgraden om uw cluster te upgraden.