Dela via


Distribuera infrastrukturnoder i ett Azure Red Hat OpenShift-kluster (ARO)

Med ARO kan du använda infrastrukturdatoruppsättningar för att skapa datorer som endast är värdar för infrastrukturkomponenter, till exempel standardroutern, det integrerade containerregistret och komponenterna för klustermått och övervakning. Dessa infrastrukturdatorer medför inte OpenShift-kostnader. de medför endast Azure Compute-kostnader.

I en produktionsdistribution rekommenderar vi att du distribuerar tre datoruppsättningar för att lagra infrastrukturkomponenter. Var och en av dessa noder kan distribueras till olika tillgänglighetszoner för att öka tillgängligheten. Den här typen av konfiguration kräver tre olika datoruppsättningar. en för varje tillgänglighetszon. Vägledning för storleksändring av infrastrukturnoder finns i Rekommenderade infrastrukturmetoder.

Kvalificerade arbetsbelastningar

Följande infrastrukturarbetsbelastningar medför inte Azure Red Hat OpenShift-arbetsprenumerationer:

  • Kubernetes- och Azure Red Hat OpenShift-kontrollplanstjänster som körs på huvudservrar

  • Standardrouter

  • Det integrerade containeravbildningsregistret

  • DEN HAProxy-baserade ingresskontrollanten

  • Klustermåttsamlingen eller övervakningstjänsten, inklusive komponenter för övervakning av användardefinierade projekt

  • Klusteraggregerad loggning

Viktigt!

Om du kör andra arbetsbelastningar än de avsedda typerna på infrastrukturnoderna kan det påverka serviceavtalet (SLA) och klustrets stabilitet.

Innan du börjar

För att virtuella Azure-datorer som läggs till i ett ARO-kluster ska kunna identifieras som infrastrukturnoder (till skillnad från fler arbetsnoder) och inte debiteras en OpenShift-avgift måste följande kriterier uppfyllas:

  • Noderna måste endast vara en av följande instanstyper:

    • Standard_E4s_v5
    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E4as_v5
    • Standard_E8as_v5
    • Standard_E16as_v5
  • Det får inte finnas fler än tre noder. Eventuella ytterligare noder debiteras en OpenShift-avgift.

  • Noderna måste ha en Azure-tagg med node_role: infra

  • Endast arbetsbelastningar som är avsedda för infrastrukturnoder tillåts. Alla andra arbetsbelastningar skulle anse dessa arbetsnoder och därmed omfattas av avgiften. Detta kan också göra serviceavtalet ogiltigt och äventyra klustrets stabilitet.

Skapa infrastrukturdatoruppsättningar

  1. Använd mallen nedan för att skapa manifestdefinitionen för din infrastrukturdatoruppsättning.

  2. Ersätt alla fält mellan "<>" med dina specifika värden.

    Ersätt till exempel location: <REGION> med location: westus2

  3. Information om hur du fyller i nödvändiga värden finns i Kommandon och värden.

  4. Skapa datoruppsättningen med följande kommando: oc create -f <machine-set-filename.yaml>

  5. Kontrollera att datoruppsättningen har skapats genom att köra följande kommando: oc get machineset -n openshift-machine-api

    Utdata från verifieringskommandot bör se ut ungefär så här:

    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
    

Mall för manifestdefinition

Använd följande mall i proceduren ovan för att skapa manifestdefinitionen för din infrastrukturdatoruppsättning:

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: aro-vnet 
          zone: <ZONE>
      taints: 
      - key: node-role.kubernetes.io/infra
        effect: NoSchedule

Kommandon och värden

Nedan visas några vanliga kommandon/värden som används när du skapar och kör mallen.

Visa en lista över alla datoruppsättningar:

oc get machineset -n openshift-machine-api

Hämta information om en specifik datoruppsättning:

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

Klusterresursgrupp:

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

Nätverksresursgrupp:

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

Undernät:

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

Flytta arbetsbelastningar till de nya infrastrukturnoderna

Följ anvisningarna nedan om du vill flytta dina infrastrukturarbetsbelastningar till de infrastrukturnoder som skapades tidigare.

Ingress

Använd den här proceduren för eventuella ytterligare ingresskontrollanter som du kan ha i klustret.

Kommentar

Om ditt program har mycket höga krav på inkommande resurser kan det vara bättre att sprida dem över arbetsnoder eller en dedikerad datoruppsättning.

  1. nodePlacement Ange på ingresscontroller till node-role.kubernetes.io/infra och öka replicas för att matcha antalet infrastrukturnoder:

    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. Kontrollera att ingressstyrenhetsoperatorn startar poddar på de nya infrastrukturnoderna:

    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>
    

Register

  1. nodePlacement Ange i registret till 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. Kontrollera att registeroperatören startar poddar på de nya infrastrukturnoderna:

    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>
    

Klusterövervakning

  1. Konfigurera klusterövervakningsstacken så att den använder infrastrukturnoderna.

    Kommentar

    Detta åsidosätter alla andra anpassningar till klusterövervakningsstacken, så du kanske vill sammanfoga dina befintliga anpassningar innan du kör kommandot.

    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. Kontrollera att OpenShift Monitoring Operator startar poddar på de nya infrastrukturnoderna. Observera att vissa noder (till exempel prometheus-operator) kommer att finnas kvar på huvudnoder.

    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

  1. Tillåt att DNS-poddarna körs på infrastrukturnoderna.

    oc edit dns.operator/default
    
    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
    name: default
    spec:
    nodePlacement:
      tolerations:
      - operator: Exists
    
  2. Kontrollera att DNS-poddar schemaläggs till alla infranoder.

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