Sdílet prostřednictvím


Nasazení uzlů infrastruktury v clusteru Azure Red Hat OpenShift (ARO)

ARO umožňuje použít sady počítačů infrastruktury k vytvoření počítačů, které hostují pouze komponenty infrastruktury, jako je výchozí směrovač, integrovaný registr kontejneru a komponenty pro metriky clusteru a monitorování. U těchto počítačů infrastruktury se neúčtují náklady na OpenShift; účtují se jim pouze náklady na výpočetní prostředky Azure.

V produkčním nasazení se doporučuje nasadit tři sady počítačů pro uložení komponent infrastruktury. Každý z těchto uzlů je možné nasadit do různých zón dostupnosti, aby se zvýšila dostupnost. Tento typ konfigurace vyžaduje tři různé sady počítačů; jednu pro každou zónu dostupnosti. Pokyny k určení velikosti uzlů infrastruktury najdete v tématu Doporučené postupy infrastruktury.

Kvalifikované úlohy

U následujících úloh infrastruktury se neúčtují předplatná pracovních procesů Azure Red Hat OpenShift:

  • Služby řídicí roviny Kubernetes a Azure Red Hat OpenShift, které běží na hlavních úrovních

  • Výchozí směrovač

  • Registr integrovaných imagí kontejneru

  • Kontroler příchozího přenosu dat založený na HAProxy

  • Shromažďování metrik clusteru nebo monitorovací služba, včetně komponent pro monitorování projektů definovaných uživatelem

  • Protokolování agregované clusterem

Důležité

Spouštění úloh jiných než určených druhů na uzlech infrastruktury může mít vliv na smlouvu SLA (Service Level Agreement) a stabilitu clusteru.

Než začnete

Aby se virtuální počítače Azure přidané do clusteru ARO rozpoznaly jako uzly infrastruktury (na rozdíl od více pracovních uzlů) a nebyly účtovány poplatky za OpenShift, musí být splněna následující kritéria:

  • Uzly musí být pouze jedním z následujících typů instancí:

    • Standard_E4s_v5
    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E4as_v5
    • Standard_E8as_v5
    • Standard_E16as_v5
  • Nesmí existovat více než tři uzly. Za všechny další uzly se účtují poplatky za OpenShift.

  • Uzly musí mít značku Azure node_role: infra

  • Jsou povoleny pouze úlohy určené pro uzly infrastruktury. Všechny ostatní úlohy by tyto pracovní uzly považovaly za poplatky. Tato smlouva může také zneplatnit smlouvu SLA a ohrozit stabilitu clusteru.

Vytváření sad počítačů infrastruktury

  1. Pomocí následující šablony vytvořte definici manifestu pro sadu počítačů infrastruktury.

  2. Nahraďte všechna pole mezi "<>" vašimi konkrétními hodnotami.

    Například nahraďte location: <REGION> ho location: westus2

  3. Nápovědu k vyplnění požadovaných hodnot najdete v tématu Příkazy a hodnoty.

  4. Vytvořte sadu počítačů pomocí následujícího příkazu: oc create -f <machine-set-filename.yaml>

  5. Spuštěním následujícího příkazu ověřte vytvoření sady počítačů: oc get machineset -n openshift-machine-api

    Výstup ověřovacího příkazu by měl vypadat nějak takto:

    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
    

Šablona definice manifestu

Pomocí následující šablony v postupu výše vytvořte definici manifestu pro sadu počítačů infrastruktury:

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

Příkazy a hodnoty

Níže jsou uvedeny některé běžné příkazy a hodnoty, které se používají při vytváření a spouštění šablony.

Výpis všech sad počítačů:

oc get machineset -n openshift-machine-api

Získejte podrobnosti o konkrétní sadě počítačů:

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

Skupina prostředků clusteru:

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

Skupina síťových prostředků:

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

ID infrastruktury:

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

Oblast:

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

Skladová položka:

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

Podsíť:

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

Verze:

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

Virtuální síť:

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

Přesun úloh do nových uzlů infrastruktury

Pomocí následujících pokynů přesuňte úlohy infrastruktury do dříve vytvořených uzlů infrastruktury.

Příchozí přenos dat

Tento postup použijte pro všechny další kontrolery příchozího přenosu dat, které můžete mít v clusteru.

Poznámka:

Pokud má vaše aplikace velmi vysoké požadavky na prostředky příchozího přenosu dat, může být lepší je rozložit mezi pracovní uzly nebo sadu vyhrazených počítačů.

  1. nodePlacement Nastavte hodnotu na ingresscontroller node-role.kubernetes.io/infra hodnotu a zvětšete replicas tak, aby odpovídala počtu uzlů infrastruktury:

    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. Ověřte, že operátor kontroleru příchozího přenosu dat spouští pody na nových uzlech infrastruktury:

    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>
    

Registr

  1. Nastavte v nodePlacement registru: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. Ověřte, že operátor registru spouští pody na nových uzlech infrastruktury:

    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>
    

Monitorování clusteru

  1. Nakonfigurujte zásobník monitorování clusteru tak, aby používal uzly infrastruktury.

    Poznámka:

    Tím se přepíší všechna další přizpůsobení zásobníku monitorování clusteru, takže před spuštěním příkazu můžete chtít sloučit stávající vlastní nastavení.

    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. Ověřte, že operátor monitorování OpenShift spouští pody na nových uzlech infrastruktury. Všimněte si, že některé uzly (například prometheus-operator) zůstanou na hlavních uzlech.

    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. Povolte spouštění podů DNS na uzlech infrastruktury.

    oc edit dns.operator/default
    
    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
    name: default
    spec:
    nodePlacement:
      tolerations:
      - operator: Exists
    
  2. Ověřte, že jsou pody DNS naplánované na všechny uzly infrastruktury.

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