ARO를 사용하면 인프라 컴퓨터 집합을 사용하여 기본 라우터, 통합 컨테이너 레지스트리 및 클러스터 메트릭 및 모니터링을 위한 구성 요소와 같은 인프라 구성 요소만 호스트하는 컴퓨터를 만들 수 있습니다. 이러한 인프라 머신에는 OpenShift 비용이 발생하지 않습니다. Azure Compute 비용만 발생합니다.
프로덕션 배포에서는 인프라 구성 요소를 보유하도록 3개의 컴퓨터 세트를 배포하는 것이 좋습니다. 이러한 각 노드를 다른 가용성 영역에 배포하여 가용성을 높일 수 있습니다. 이 유형의 구성에는 세 가지 컴퓨터 집합이 필요합니다. 각 가용성 영역에 대해 하나씩. 인프라 노드 크기 조정 지침은 권장 인프라 사례를 참조하세요.
정규화된 워크로드
다음 인프라 워크로드에는 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
노드는 최대 3개까지만 있을 수 있습니다. 추가 노드에는 OpenShift 요금이 청구됩니다.
노드에는 node_role Azure 태그가 있어야 합니다. 인프라
인프라 노드에 지정된 워크로드만 허용됩니다. 다른 모든 워크로드는 이러한 작업자 노드로 간주되므로 요금이 부과됩니다. 또한 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}'
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"}]}}'
레지스트리 운영자가 새 인프라 노드에서 파드를 시작하는지 확인합니다.
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