Menyebarkan simpul infrastruktur di kluster Azure Red Hat OpenShift (ARO)

ARO memungkinkan Anda menggunakan set komputer infrastruktur untuk membuat komputer yang hanya menghosting komponen infrastruktur, seperti router default, registri kontainer terintegrasi, dan komponen untuk metrik dan pemantauan kluster. Komputer infrastruktur ini tidak dikenakan biaya OpenShift; mereka hanya dikenakan biaya Azure Compute.

Dalam penyebaran produksi, disarankan agar Anda menyebarkan tiga set komputer untuk menyimpan komponen infrastruktur. Masing-masing simpul ini dapat disebarkan ke zona ketersediaan yang berbeda untuk meningkatkan ketersediaan. Jenis konfigurasi ini memerlukan tiga set komputer yang berbeda; satu untuk setiap zona ketersediaan. Untuk panduan ukuran simpul infrastruktur, lihat Praktik infrastruktur yang direkomendasikan.

Beban kerja yang memenuhi syarat

Beban kerja infrastruktur berikut tidak dikenakan langganan pekerja Azure Red Hat OpenShift:

  • Layanan sarana kontrol Kubernetes dan Azure Red Hat OpenShift yang berjalan pada master

  • Router default

  • Registri gambar kontainer terintegrasi

  • Pengontrol Ingress berbasis HAProxy

  • Kumpulan metrik kluster, atau layanan pemantauan, termasuk komponen untuk memantau proyek yang ditentukan pengguna

  • Pengelogan agregat kluster

Penting

Menjalankan beban kerja selain jenis yang ditunjuk pada simpul infrastruktur dapat memengaruhi Perjanjian Tingkat Layanan (SLA) dan stabilitas kluster.

Sebelum Anda mulai

Agar Azure VM ditambahkan ke kluster ARO untuk dikenali sebagai simpul infrastruktur (dibandingkan dengan lebih banyak simpul pekerja) dan tidak dikenakan biaya OpenShift, kriteria berikut harus dipenuhi:

  • Simpul harus menjadi salah satu jenis instans berikut saja:

    • Standard_E4s_v5
    • Standard_E8s_v5
    • Standard_E16s_v5
    • Standard_E4as_v5
    • Standard_E8as_v5
    • Standard_E16as_v5
  • Tidak boleh ada lebih dari tiga simpul. Setiap simpul tambahan dikenakan biaya OpenShift.

  • Simpul harus memiliki tag Azure node_role : infra

  • Hanya beban kerja yang ditunjuk untuk simpul infrastruktur yang diizinkan. Semua beban kerja lainnya akan dianggap sebagai simpul pekerja ini dan dengan demikian dikenakan biaya. Ini juga dapat membatalkan SLA dan membahayakan stabilitas kluster.

Membuat set komputer infrastruktur

  1. Gunakan templat di bawah ini untuk membuat definisi manifes untuk set komputer infrastruktur Anda.

  2. Ganti semua bidang di antara "<>" dengan nilai spesifik Anda.

    Misalnya, ganti location: <REGION> dengan location: westus2

  3. Untuk bantuan mengisi nilai yang diperlukan, lihat Perintah dan nilai.

  4. Buat set komputer dengan perintah berikut: oc create -f <machine-set-filename.yaml>

  5. Untuk memverifikasi pembuatan set komputer, jalankan perintah berikut: oc get machineset -n openshift-machine-api

    Output perintah verifikasi akan terlihat mirip dengan di bawah ini:

    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
    

Templat definisi manifes

Gunakan templat berikut dalam prosedur di atas untuk membuat definisi manifes untuk set komputer infrastruktur Anda:

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

Perintah dan nilai

Di bawah ini adalah beberapa perintah/nilai umum yang digunakan saat membuat dan menjalankan templat.

Mencantumkan semua set mesin:

oc get machineset -n openshift-machine-api

Dapatkan detail untuk set komputer tertentu:

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

Grup sumber daya kluster:

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

Grup sumber daya jaringan:

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

ID Infrastruktur:

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

Wilayah:

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

Versi:

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

Memindahkan beban kerja ke simpul infrastruktur baru

Gunakan instruksi di bawah ini untuk memindahkan beban kerja infrastruktur Anda ke simpul infrastruktur yang dibuat sebelumnya.

Ingress

Gunakan prosedur ini untuk pengontrol ingress tambahan yang mungkin Anda miliki di kluster.

Catatan

Jika aplikasi Anda memiliki persyaratan sumber daya ingress yang sangat tinggi, mungkin lebih baik untuk menyebarkannya di seluruh simpul pekerja atau set komputer khusus.

  1. Atur nodePlacement pada ke ingresscontrollernode-role.kubernetes.io/infra dan tingkatkan replicas agar sesuai dengan jumlah simpul infrastruktur:

    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. Verifikasi bahwa Operator Pengontrol Ingress memulai pod pada node infrastruktur baru:

    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>
    

Registri

  1. Atur nodePlacement pada registri ke 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. Verifikasi bahwa Operator Registri memulai pod pada simpul infrastruktur baru:

    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>
    

Pemantauan klaster

  1. Konfigurasikan tumpukan pemantauan kluster untuk menggunakan simpul infrastruktur.

    Catatan

    Ini akan mengambil alih kustomisasi lain ke tumpukan pemantauan kluster, jadi Anda mungkin ingin menggabungkan kustomisasi yang ada sebelum menjalankan perintah.

    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. Verifikasi bahwa Operator Pemantauan OpenShift memulai pod pada simpul infrastruktur baru. Perhatikan bahwa beberapa simpul (seperti prometheus-operator) akan tetap berada di simpul master.

    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. Izinkan pod DNS berjalan pada simpul infrastruktur.

    oc edit dns.operator/default
    
    apiVersion: operator.openshift.io/v1
    kind: DNS
    metadata:
    name: default
    spec:
    nodePlacement:
      tolerations:
      - operator: Exists
    
  2. Verifikasi bahwa pod DNS dijadwalkan ke semua simpul infra.

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