在 Azure Red Hat OpenShift (ARO) 叢集中部署基礎結構節點
ARO 可讓您使用基礎結構機器集合來建立僅裝載基礎結構元件的機器,例如預設路由器、整合式容器登錄,以及叢集計量和監視的元件。 這些基礎結構機器不會產生 OpenShift 成本;它們只會產生 Azure 計算成本。
在生產部署中,建議您部署三個機器集來保存基礎結構元件。 每個節點都可以部署到不同的可用性區域,以提高可用性。 這種類型的組態需要三個不同的機器集:每個可用性區域的一個。 如需基礎結構節點大小調整指引,請參閱 建議的基礎結構做法。
合格的工作負載
下列基礎結構工作負載不會產生 Azure Red Hat OpenShift 背景工作訂用帳戶:
在主機上執行的 Kubernetes 和 Azure Red Hat OpenShift 控制平面服務
預設路由器
整合式容器映像登錄
HAProxy 型輸入控制器
叢集計量集合或監視服務,包括監視使用者定義專案的元件
叢集彙總記錄
重要
在基礎結構節點上執行指定種類以外的工作負載可能會影響服務等級協定 (SLA) 和叢集的穩定性。
開始之前
若要將新增至 ARO 叢集的 Azure VM 辨識為基礎結構節點(而不是更多背景工作節點),且不收取 OpenShift 費用,必須符合下列準則:
節點必須是下列其中一個實例類型:
- Standard_E4s_v5
- Standard_E8s_v5
- Standard_E16s_v5
- Standard_E4as_v5
- Standard_E8as_v5
- Standard_E16as_v5
不能超過三個節點。 任何其他節點會收取 OpenShift 費用。
節點必須具有node_role的 Azure 標籤:infra
只允許針對基礎結構節點指定的工作負載。 所有其他工作負載都會將這些背景工作節點視為這些背景工作節點,因此會收取費用。 這也可能會使 SLA 失效,並危害叢集的穩定性。
建立基礎結構機器集
使用下列範本來建立基礎結構機器集的指令清單定義。
以您的特定值取代 「<>之間的所有欄位」。
例如,將 取代
location: <REGION>
為location: westus2
如需填寫必要值的協助,請參閱 命令和值。
使用下列指令建立電腦集:
oc create -f <machine-set-filename.yaml>
若要確認機器集的建立,請執行下列命令:
oc get machineset -n openshift-machine-api
驗證命令的輸出應該如下所示:
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
指令清單定義範本
使用上述程式中的下列範本,為您的基礎結構機器集建立指令清單定義:
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
命令和值
以下是建立和執行範本時所使用的一些常見命令/值。
列出所有機器集:
oc get machineset -n openshift-machine-api
取得特定電腦集的詳細資料:
oc get machineset <machineset_name> -n openshift-machine-api -o yaml
叢集資源群組:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.resourceGroupName}'
網路資源群組:
oc get infrastructure cluster -o jsonpath='{.status.platformStatus.azure.networkResourceGroupName}'
基礎結構識別碼:
oc get infrastructure cluster -o jsonpath='{.status.infrastructureName}'
區域:
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}'
子網路:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}'
版本:
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}'
將工作負載移至新的基礎結構節點
使用下列指示,將基礎結構工作負載移至先前建立的基礎結構節點。
輸入
針對您在叢集中可能擁有的任何其他輸入控制器,使用此程式。
注意
如果您的應用程式具有非常高的輸入資源需求,最好將它們分散到背景工作節點或專用機器集。
nodePlacement
將上的ingresscontroller
設定為node-role.kubernetes.io/infra
,並增加replicas
以符合基礎結構節點的數目: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"}]}}}'
確認輸入控制器操作員正在新的基礎結構節點上啟動 Pod:
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>
登錄
nodePlacement
將登入上的 設定為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"}]}}'
確認登入操作員正在新的基礎結構節點上啟動 Pod:
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>
叢集監視
設定叢集監視堆疊以使用基礎結構節點。
注意
這會覆寫叢集監視堆疊的任何其他自定義,因此您可能想要先合併現有的自定義專案,再執行 命令。
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
確認 OpenShift 監視操作員正在新的基礎結構節點上啟動 Pod。 請注意,某些節點 (例如
prometheus-operator
) 會保留在主要節點上。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
允許 DNS Pod 在基礎結構節點上執行。
oc edit dns.operator/default
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: nodePlacement: tolerations: - operator: Exists
確認 DNS Pod 已排程到所有基礎結構節點上。
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