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
Użyj poniższego szablonu, aby utworzyć definicję manifestu dla zestawu maszyn infrastruktury.
Zastąp wszystkie pola między "<>" określonymi wartościami.
Na przykład zastąp ciąg
location: <REGION>
ciągiemlocation: westus2
Aby uzyskać pomoc dotyczącą wypełniania wymaganych wartości, zobacz Polecenia i wartości.
Utwórz zestaw maszyn za pomocą następującego polecenia:
oc create -f <machine-set-filename.yaml>
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.
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"}]}}}'
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
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"}]}}'
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
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
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
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
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