Udostępnij za pośrednictwem


Wdrażanie węzłów infrastruktury w klastrze usługi Azure Red Hat OpenShift (ARO)

Usługa ARO umożliwia używanie zestawów maszyn infrastruktury do tworzenia maszyn, które hostuje tylko składniki infrastruktury hosta, takie jak router domyślny, zintegrowany rejestr kontenerów i składniki metryk klastra i monitorowania. Te maszyny infrastruktury nie generują kosztów platformy OpenShift; generują tylko koszty obliczeń platformy Azure.

W ramach wdrożenia produkcyjnego zaleca się wdrożenie trzech zestawów maszyn w celu przechowywania składników infrastruktury. Każdy z tych węzłów można wdrożyć w różnych strefach dostępności w celu zwiększenia dostępności. Ten typ konfiguracji wymaga trzech różnych zestawów maszyn; jeden dla każdej strefy dostępności. Aby uzyskać wskazówki dotyczące określania rozmiaru węzła infrastruktury, zobacz Zalecane rozwiązania dotyczące infrastruktury.

Kwalifikowane obciążenia

Następujące obciążenia infrastruktury nie powodują naliczania subskrypcji procesów roboczych usługi Azure Red Hat OpenShift:

  • Usługi płaszczyzny sterowania Kubernetes i Azure Red Hat OpenShift działające na wzorcach

  • Router domyślny

  • Zintegrowany rejestr obrazów kontenera

  • Kontroler ruchu przychodzącego opartego na haproxy

  • Kolekcja metryk klastra lub usługa monitorowania, w tym składniki do monitorowania projektów zdefiniowanych przez użytkownika

  • Rejestrowanie zagregowane w klastrze

Ważne

Uruchamianie obciążeń innych niż wyznaczone rodzaje węzłów infrastruktury może mieć wpływ na umowę dotyczącą poziomu usług (SLA) i stabilność klastra.

Zanim rozpoczniesz

Aby maszyny wirtualne platformy Azure dodane do klastra ARO zostały rozpoznane jako węzły infrastruktury (w przeciwieństwie do większej liczby węzłów roboczych) i nie są naliczane opłaty za platformę OpenShift, należy spełnić następujące kryteria:

  • Węzły muszą być tylko jednym z następujących typów wystąpień:

    • Standard_E4s_v5
    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E4as_v5
    • Standard_E8as_v5
    • Standard_E16as_v5
  • Nie może istnieć więcej niż trzy węzły. Opłaty za dodatkowe węzły są naliczane za usługę OpenShift.

  • Węzły muszą mieć tag platformy Azure node_role: infra

  • Dozwolone są tylko obciążenia przeznaczone dla węzłów infrastruktury. Wszystkie inne obciążenia uznają te węzły robocze, a tym samym podlegają opłatom. Może to również unieważnić umowę SLA i naruszyć stabilność klastra.

Tworzenie zestawów maszyn infrastruktury

  1. Użyj poniższego szablonu, aby utworzyć definicję manifestu dla zestawu maszyn infrastruktury.

  2. Zastąp wszystkie pola między "<>" określonymi wartościami.

    Na przykład zastąp ciąg location: <REGION> ciągiem location: westus2

  3. Aby uzyskać pomoc dotyczącą wypełniania wymaganych wartości, zobacz Polecenia i wartości.

  4. Utwórz zestaw maszyn za pomocą następującego polecenia: oc create -f <machine-set-filename.yaml>

  5. Aby sprawdzić tworzenie zestawu maszyn, uruchom następujące polecenie: oc get machineset -n openshift-machine-api

    Dane wyjściowe polecenia weryfikacji powinny wyglądać podobnie do poniższych:

    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
    

Szablon definicji manifestu

Użyj następującego szablonu w powyższej procedurze, aby utworzyć definicję manifestu dla zestawu maszyn 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

Polecenia i wartości

Poniżej przedstawiono niektóre typowe polecenia/wartości używane podczas tworzenia i wykonywania szablonu.

Wyświetl listę wszystkich zestawów maszyn:

oc get machineset -n openshift-machine-api

Uzyskaj szczegółowe informacje dotyczące określonego zestawu maszyn:

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

Grupa zasobów klastra:

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

Sieciowa grupa zasobów:

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

Identyfikator infrastruktury:

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

Podsieć:

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

Sieć wirtualna:

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

Przenoszenie obciążeń do nowych węzłów infrastruktury

Skorzystaj z poniższych instrukcji, aby przenieść obciążenia infrastruktury do utworzonych wcześniej węzłów infrastruktury.

Ruch przychodzący

Użyj tej procedury dla wszystkich dodatkowych kontrolerów ruchu przychodzącego, które mogą znajdować się w klastrze.

Uwaga

Jeśli aplikacja ma bardzo wysokie wymagania dotyczące zasobów ruchu przychodzącego, lepszym rozwiązaniem może być rozłożenie ich między węzły robocze lub dedykowany zestaw maszyn.

  1. nodePlacement Ustaw parametr na wartość ingresscontroller node-role.kubernetes.io/infra i zwiększ wartość replicas , aby dopasować liczbę węzłów 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. Sprawdź, czy operator kontrolera ruchu przychodzącego uruchamia zasobniki w nowych węzłach 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>
    

Rejestr

  1. nodePlacement Ustaw właściwość w rejestrze na wartość 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. Sprawdź, czy operator rejestru uruchamia zasobniki w nowych węzłach 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>
    

Monitorowanie klastrów

  1. Skonfiguruj stos monitorowania klastra do korzystania z węzłów infrastruktury.

    Uwaga

    Spowoduje to zastąpienie wszelkich innych dostosowań stosu monitorowania klastra, dlatego przed uruchomieniem polecenia możesz scalić istniejące dostosowania.

    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. Sprawdź, czy operator monitorowania OpenShift uruchamia zasobniki w nowych węzłach infrastruktury. Należy pamiętać, że niektóre węzły (takie jak prometheus-operator) pozostaną w węzłach głównych.

    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. Zezwalaj zasobnikom DNS na uruchamianie w węzłach infrastruktury.

    oc edit dns.operator/default
    
    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
    name: default
    spec:
    nodePlacement:
      tolerations:
      - operator: Exists
    
  2. Sprawdź, czy zasobniki DNS są zaplanowane na wszystkich węzłach 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