Microsoft Azure Red Hat OpenShift 可讓您使用基礎結構機器集來建立僅裝載基礎結構元件的機器,例如預設路由器、整合式容器登錄,以及叢集計量和監視的元件。 這些基礎結構機器不會產生 OpenShift 成本;它們只會產生 Azure 計算成本。
在生產部署中,建議您部署三個機器集來保存基礎結構元件。 每個節點都可以部署到不同的可用性區域,以提高可用性。 這種類型的組態需要三組不同的機器組成;每個可用性區域各一組。 如需基礎結構節點大小調整指引,請參閱 建議的基礎結構做法。
符合條件的工作負載
下列基礎結構工作負載不包含 Azure Red Hat OpenShift 工作節點的訂閱:
在主控制節點上執行的 Kubernetes 和 Azure Red Hat OpenShift 控制平面服務
預設路由器
整合式容器映像登錄
基於 HAProxy 的入口控制器
叢集計量集合或監視服務,包括監視使用者定義專案的元件
叢集彙總記錄
這很重要
在基礎結構節點上執行指定種類以外的工作負載可能會影響服務等級協定 (SLA) 和叢集的穩定性。
先決條件
若要將新增至叢集的 Azure 虛擬機辨識為基礎結構節點,而不是背景工作節點,且不收取 OpenShift 費用,必須符合下列準則:
節點僅能是下列實例類型之一:
- Standard_E4s_v5
- Standard_E8s_v5
- Standard_E16s_v5
- Standard_E4as_v5
- Standard_E8as_v5
- Standard_E16as_v5
不能超過三個節點。 任何額外的節點會收取 OpenShift 費用。
節點必須具有 Azure 標籤
node_role: 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: <VNET_NAME>
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}'
虛擬網路:
oc get machineset <machineset_name> -n openshift-machine-api -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}'
將工作負載移至新的基礎結構節點
使用下列指示,將基礎結構工作負載移至先前建立的基礎結構節點。
入口(通道)
針對您在叢集中可能擁有的任何其他輸入控制器使用此程式。 如果您的應用程式需要高網路流量資源,最好將其分散到工作節點或專用機器集。
將
nodePlacement設定為ingresscontroller並調整node-role.kubernetes.io/infra以符合基礎設施節點的數量: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"}]}}}'驗證 Ingress 控制器營運商是否正在新的基礎架構節點上啟動 Pods:
oc -n openshift-ingress get pods -o wideNAME 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 wideNAME 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 wideNAME 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/defaultapiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: nodePlacement: tolerations: - operator: Exists確認 DNS Pod 已排程到所有
infra節點上。oc get ds/dns-default -n openshift-dnsNAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE dns-default 7 7 7 7 7 kubernetes.io/os=linux 35d
相關內容
若要升級叢集,請參閱 升級 Azure Red Hat OpenShift 叢集。