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
Pomocí následující šablony vytvořte definici manifestu pro sadu počítačů infrastruktury.
Nahraďte všechna pole mezi "<>" vašimi konkrétními hodnotami.
Například nahraďte
location: <REGION>
holocation: westus2
Nápovědu k vyplnění požadovaných hodnot najdete v tématu Příkazy a hodnoty.
Vytvořte sadu počítačů pomocí následujícího příkazu:
oc create -f <machine-set-filename.yaml>
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čů.
nodePlacement
Nastavte hodnotu naingresscontroller
node-role.kubernetes.io/infra
hodnotu a zvětšetereplicas
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"}]}}}'
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
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"}]}}'
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
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
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
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
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