Infrastructuurknooppunten implementeren in een ARO-cluster (Azure Red Hat OpenShift)
Met ARO kunt u infrastructuurcomputersets gebruiken om machines te maken die alleen onderdelen van de infrastructuur hosten, zoals de standaardrouter, het geïntegreerde containerregister en de onderdelen voor metrische gegevens en bewaking van clusters. Voor deze infrastructuurmachines worden geen OpenShift-kosten in rekening gebracht; Er worden alleen Azure Compute-kosten in rekening gebracht.
In een productie-implementatie is het raadzaam om drie machinesets te implementeren voor het opslaan van infrastructuuronderdelen. Elk van deze knooppunten kan worden geïmplementeerd in verschillende beschikbaarheidszones om de beschikbaarheid te verhogen. Voor dit type configuratie zijn drie verschillende machinesets vereist; één voor elke beschikbaarheidszone. Zie Aanbevolen infrastructuurprocedures voor richtlijnen voor het aanpassen van de grootte van infrastructuurknooppunten.
Gekwalificeerde workloads
De volgende infrastructuurworkloads hebben geen Azure Red Hat OpenShift-werkabonnementen:
Kubernetes- en Azure Red Hat OpenShift-besturingsvlakservices die worden uitgevoerd op masters
De standaardrouter
Het geïntegreerde containerinstallatiekopieënregister
De controller voor inkomend verkeer op basis van HAProxy
De verzameling metrische gegevens van het cluster of de bewakingsservice, inclusief onderdelen voor het bewaken van door de gebruiker gedefinieerde projecten
Samengevoegde logboekregistratie van clusters
Belangrijk
Het uitvoeren van andere werkbelastingen dan de aangewezen soorten op de infrastructuurknooppunten kan van invloed zijn op de SLA (Service Level Agreement) en de stabiliteit van het cluster.
Voordat u begint
Om azure-VM's die zijn toegevoegd aan een ARO-cluster te kunnen worden herkend als infrastructuurknooppunten (in tegenstelling tot meer werkknooppunten) en geen OpenShift-kosten in rekening te brengen, moeten aan de volgende criteria worden voldaan:
De knooppunten moeten alleen een van de volgende exemplaartypen zijn:
- Standard_E4s_v5
- Standard_E8s_v5
- Standard_E16s_v5
- Standard_E4as_v5
- Standard_E8as_v5
- Standard_E16as_v5
Er kunnen niet meer dan drie knooppunten zijn. Voor eventuele extra knooppunten worden kosten in rekening gebracht voor OpenShift.
De knooppunten moeten een Azure-tag van node_role hebben: infra
Alleen workloads die zijn aangewezen voor infrastructuurknooppunten, zijn toegestaan. Alle andere workloads zouden deze werkknooppunten zien en dus onderhevig zijn aan de vergoeding. Dit kan ook de SLA ongeldig maken en de stabiliteit van het cluster in gevaar brengen.
Infrastructuurmachinesets maken
Gebruik de onderstaande sjabloon om de manifestdefinitie voor uw infrastructuurcomputerset te maken.
Vervang alle velden tussen '<>' door uw specifieke waarden.
Vervang bijvoorbeeld door
location: <REGION>
location: westus2
Zie Opdrachten en waarden voor hulp bij het invullen van de vereiste waarden.
Maak de machineset met de volgende opdracht:
oc create -f <machine-set-filename.yaml>
Voer de volgende opdracht uit om te controleren of de computerset is gemaakt:
oc get machineset -n openshift-machine-api
De uitvoer van de verificatieopdracht moet er ongeveer als volgt uitzien:
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
Sjabloon voor manifestdefinitie
Gebruik de volgende sjabloon in de bovenstaande procedure om de manifestdefinitie voor uw infrastructuurcomputerset te maken:
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
Opdrachten en waarden
Hieronder ziet u enkele algemene opdrachten/waarden die worden gebruikt bij het maken en uitvoeren van de sjabloon.
Alle machinesets weergeven:
oc get machineset -n openshift-machine-api
Details voor een specifieke machineset ophalen:
oc get machineset <machineset_name> -n openshift-machine-api -o yaml
Clusterresourcegroep:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}'
Netwerkresourcegroep:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.networkResourceGroupName}'
Infrastructuur-id:
oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
Regio:
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}'
Versie:
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}'
Workloads verplaatsen naar de nieuwe infrastructuurknooppunten
Gebruik de onderstaande instructies om uw infrastructuurworkloads te verplaatsen naar de eerder gemaakte infrastructuurknooppunten.
Inkomend verkeer
Gebruik deze procedure voor eventuele extra toegangsbeheerobjectcontrollers die u mogelijk in het cluster hebt.
Notitie
Als uw toepassing zeer hoge resourcevereisten voor inkomend verkeer heeft, is het misschien beter om ze te verdelen over werkknooppunten of een toegewezen computerset.
Stel de
nodePlacement
instellingen in opnode-role.kubernetes.io/infra
eningresscontroller
verhoog de waarde zodat dezereplicas
overeenkomt met het aantal infrastructuurknooppunten: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"}]}}}'
Controleer of de ingangscontrolleroperator pods start op de nieuwe infrastructuurknooppunten:
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>
Register
Stel het
nodePlacement
in het registernode-role.kubernetes.io/infra
in op: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"}]}}'
Controleer of de registeroperator pods start op de nieuwe infrastructuurknooppunten:
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>
Clusterbewaking
Configureer de clusterbewakingsstack om de infrastructuurknooppunten te gebruiken.
Notitie
Hierdoor worden eventuele andere aanpassingen in de clusterbewakingsstack overschreven, dus u kunt uw bestaande aanpassingen samenvoegen voordat u de opdracht uitvoert.
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
Controleer of de OpenShift Monitoring Operator pods start op de nieuwe infrastructuurknooppunten. Houd er rekening mee dat sommige knooppunten (zoals
prometheus-operator
) op hoofdknooppunten blijven staan.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
Toestaan dat de DNS-pods worden uitgevoerd op de infrastructuurknooppunten.
oc edit dns.operator/default
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: nodePlacement: tolerations: - operator: Exists
Controleer of DNS-pods zijn gepland op alle infraknooppunten.
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