INTRO
이전의 RHOCP TB Architecture에서는 Infra node 별도로 구성하지 않고 클러스터 구축을 하였습니다.
RHOCP에서 Infra node는 Cluster Logging(EFK), Openshift Monitoring Stack, Image Registry Operator 등을 배포하여 OpenShift 클러스터에서 인프라적인 요소들을 관리하는데 사용되는 node입니다.
리소스적인 여유가 있는 환경이라면 Infra node를 별도로 구축하면 좋고 여유가 되지 않는다면 Infra적인 요소를 관리하는 APP들을 모두 Worker node나 Master node에 배포하여도 상관없습니다.
아래의 그림은 Infra node가 포함된 Architecture입니다.
RHOCP TB에 대한 최종적인 정보는 아래와 같습니다.
Machine | OS | CPU (vCPU) | RAM (GB) | Storage (GB) | Container Tool |
harbor | RHEL 8.8 | 2 | 4 | 100 + NFS | Docker |
bastion1 | RHEL 8.8 | 2 | 4 | 100 | Podman |
bastion2 | RHEL 8.8 | 2 | 4 | 100 | Podman |
master1 | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
master2 | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
master3 | RHCOS 4.13.0 | 4 | 16 | 100 | CRI-O |
worker1 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
worker2 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
infra1 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
infra2 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
infra3 | RHCOS 4.13.0 | 2 | 8 | 100 | CRI-O |
Infra node 구성 및 클러스터 Join
아래의 글에서 클러스터 Worker node 설치 및 Join하는 과정을 참고해주시면 됩니다.
Ingress Router 설정을 Compute node가 아닌 Infra node로 변경하기 위해 HAProxy 설정을 수정하고 Bastion2로 설정을 SCP를 이용해 전송합니다.
# vi /etc/haproxy/haproxy.cfg
..(생략)
# RHOCP Ingress Router for 443 port
listen ingress-router-443
bind *:443
mode tcp
balance source
server infra1 infra1.ocp4.example.com:443 check inter 1s
server infra2 infra2.ocp4.example.com:443 check inter 1s
server infra3 infra3.ocp4.example.com:443 check inter 1s
# RHOCP Ingress Router for 80 port
listen ingress-router-80
bind *:80
mode tcp
balance source
server infra1 infra1.ocp4.example.com:80 check inter 1s
server infra2 infra2.ocp4.example.com:80 check inter 1s
server infra3 infra3.ocp4.example.com:80 check inter 1s
# scp /etc/haproxy/haproxy.cfg bastion2:/etc/haproxy
수정된 내용을 반영합니다.
ssh 명령을 통해 bastion2번 서버를 대상으로 명령어를 수행합니다.
# systemctl restart haproxy
# ssh bastion2 "systemctl restart haproxy"
Infra node를 통한 Infra Workload 격리
처음에 Infra node를 구축하고 나면 아래와 같이 노드에 대한 role이 worker로 출력됩니다.
위에서 말씀드렸다 싶이 Infra node는 클러스터의 Infra적인 요소를 관리하는데 사용되기 때문에 리소스적인 여유가 있는 환경이라면 Infra node에 APP이 배포되지 않도록 격리할 필요가 있습니다.
# oc get node
NAME STATUS ROLES AGE VERSION
infra1.ocp4.example.com Ready worker 1h v1.26.5+7d22122
infra2.ocp4.example.com Ready worker 1h v1.26.5+7d22122
infra3.ocp4.example.com Ready worker 1h v1.26.5+7d22122
master1.ocp4.example.com Ready master 4d2h v1.26.5+7d22122
master2.ocp4.example.com Ready master 4d2h v1.26.5+7d22122
master3.ocp4.example.com Ready master 4d2h v1.26.5+7d22122
worker1.ocp4.example.com Ready worker 4d2h v1.26.5+7d22122
worker2.ocp4.example.com Ready worker 4d2h v1.26.5+7d22122
Infra node에 infra role을 정의하고 infra role 가진 node에 대해 taint를 걸어서 pod가 배포되지 않게 설정하는 작업이 필요합니다..
※ taint: 일반적인 방법으로 Pod를 배포할 수 없으며 toleration을 적용해야 배포할 수 있음
infra node로 사용할 node에 infra role을 정의합니다. 기존의 worker role은 제거하여야 합니다.
<infra role 추가>
# oc label node infra1.ocp4.example.com node-role.kubernetes.io/infra=
# oc label node infra2.ocp4.example.com node-role.kubernetes.io/infra=
# oc label node infra3.ocp4.example.com node-role.kubernetes.io/infra=
<worker role 제거>
# oc label node infra1.ocp4.example.com node-role.kubernetes.io/worker-
# oc label node infra2.ocp4.example.com node-role.kubernetes.io/worker-
# oc label node infra3.ocp4.example.com node-role.kubernetes.io/worker-
infra role을 가진 node에 일반적인 방법으로 pod가 배포될 수 없게 taint 설정을 합니다.
# oc adm taint nodes -l node-role.kubernetes.io/infra node-role.kubernetes.io/infra=reserved:NoSchedule node-role.kubernetes.io/infra=reserved:NoExecute
node/infra1.ocp4.example.com tainted
node/infra2.ocp4.example.com tainted
node/infra3.ocp4.example.com tainted
Router를 Infra node로 이동하기 위해 아래의 작업을 진행하여 아래의 설정을 추가합니다.
# oc patch ingresscontroller/default -n openshift-ingress-operator --type=merge -p '{"spec":{"nodePlacement": {"nodeSelector": {"matchLabels": {"node-role.kubernetes.io/infra": ""}},"tolerations": [{"effect":"NoSchedule","key": "node-role.kubernetes.io/infra","value": "reserved"},{"effect":"NoExecute","key": "node-role.kubernetes.io/infra","value": "reserved"}]}}}'
ingresscontroller.operator.openshift.io/default patched
Router의 Replica 수를 2개에서 3개로 변경합니다. (Infra node의 수가 3개)
oc patch ingresscontroller/default -n openshift-ingress-operator --type=merge -p '{"spec":{"replicas": 3}}'
Ingresscontroller에 대한 toleration를 infra node 대상으로 설정되었는지 확인하고 replica 복제 수가 3인지 확인합니다.
# oc get ingresscontroller default -n openshift-ingress-operator -o json |jq .spec
..(생략)
"nodePlacement": {
"nodeSelector": {
"matchLabels": {
"node-role.kubernetes.io/infra": ""
}
},
"tolerations": [
{
"effect": "NoSchedule",
"key": "node-role.kubernetes.io/infra",
"value": "reserved"
},
{
"effect": "NoExecute",
"key": "node-role.kubernetes.io/infra",
"value": "reserved"
}
]
},
"replicas": 3,
..(생략)
Infra node로 Openshift Monitoring Stack 이동하기
현재 클러스터 Monitoring Stack을 조회하기 위해 openshift-monitoring 네임스페이스에서 pod를 조회합니다.
prometheus, alertmanager, thanos 등의 pod가 worker에서 실행되고 있는것을 확인합니다.
# oc get pod -n openshift-monitoring -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
NAME STATUS NODE
alertmanager-main-0 Running worker1.ocp4.example.com
alertmanager-main-1 Running worker2.ocp4.example.com
cluster-monitoring-operator-5855ddbb88-cc277 Running master2.ocp4.example.com
kube-state-metrics-7878c7c5bf-8rr9d Running worker1.ocp4.example.com
node-exporter-b5c98 Running infra3.ocp4.example.com
node-exporter-b6vsd Running infra1.ocp4.example.com
node-exporter-cbntp Running infra2.ocp4.example.com
node-exporter-cwc7w Running master3.ocp4.example.com
node-exporter-fv6tp Running worker2.ocp4.example.com
node-exporter-k695h Running master1.ocp4.example.com
node-exporter-tztpg Running master2.ocp4.example.com
node-exporter-vpbwf Running worker1.ocp4.example.com
openshift-state-metrics-f786884ff-hwjzv Running worker2.ocp4.example.com
prometheus-adapter-78cf478d9d-fbdzp Running worker2.ocp4.example.com
prometheus-adapter-78cf478d9d-rtlgq Running worker1.ocp4.example.com
prometheus-k8s-0 Running worker1.ocp4.example.com
prometheus-k8s-1 Running worker2.ocp4.example.com
prometheus-operator-admission-webhook-5bccb5d8c-p7j4p Running worker1.ocp4.example.com
prometheus-operator-admission-webhook-5bccb5d8c-r7s5m Running worker2.ocp4.example.com
prometheus-operator-d6fc645d8-f4ld6 Running master3.ocp4.example.com
thanos-querier-7f6cb64654-lp7bw Running worker1.ocp4.example.com
thanos-querier-7f6cb64654-z95xk Running worker2.ocp4.example.com
Infra node로 이동하기 위해 아래의 configmap을 적용합니다.
infra node에 대한 taint를 설정하였기 때문에 아래와 같이 tolerations를 사용해야 pod가 정상적으로 배포됩니다.
# cat <<EOF> cluster-monitoring-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: cluster-monitoring-config
namespace: openshift-monitoring
data:
config.yaml: |+
alertmanagerMain:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
prometheusK8s:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
prometheusOperator:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
grafana:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
k8sPrometheusAdapter:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
kubeStateMetrics:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
telemeterClient:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
openshiftStateMetrics:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
thanosQuerier:
nodeSelector:
node-role.kubernetes.io/infra: ""
tolerations:
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoSchedule
- key: node-role.kubernetes.io/infra
value: reserved
effect: NoExecute
EOF
Configmap을 반영합니다.
# oc apply -f cluster-monitoring-cm.yaml
Openshift Monitoring Stack과 관련된 pod를 조회하고 infra node에 스케줄링되었는지 확인합니다.
(alertmanager, prometheus, openshiftStateMetrics, thanosQuerier, kubeStateMetrics)
node exporter는 모든 노드에서 정보를 수집하는 역할을 합니다.
# oc get pod -n openshift-monitoring -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
NAME STATUS NODE
alertmanager-main-0 Running infra1.ocp4.example.com
alertmanager-main-1 Running infra2.ocp4.example.com
cluster-monitoring-operator-5855ddbb88-cc277 Running master2.ocp4.example.com
kube-state-metrics-6879bfd87c-8qmvv Running infra1.ocp4.example.com
node-exporter-b5c98 Running infra3.ocp4.example.com
node-exporter-b6vsd Running infra1.ocp4.example.com
node-exporter-cbntp Running infra2.ocp4.example.com
node-exporter-cwc7w Running master3.ocp4.example.com
node-exporter-fv6tp Running worker2.ocp4.example.com
node-exporter-k695h Running master1.ocp4.example.com
node-exporter-tztpg Running master2.ocp4.example.com
node-exporter-vpbwf Running worker1.ocp4.example.com
openshift-state-metrics-6c75d4f9d5-8dbmp Running infra3.ocp4.example.com
prometheus-adapter-f8df8d4b4-42pfr Running infra2.ocp4.example.com
prometheus-adapter-f8df8d4b4-fhkjf Running infra3.ocp4.example.com
prometheus-k8s-0 Running infra3.ocp4.example.com
prometheus-k8s-1 Running infra1.ocp4.example.com
prometheus-operator-686ff8c7f9-tv8cc Running infra2.ocp4.example.com
prometheus-operator-admission-webhook-8698c45557-6sxjm Running infra2.ocp4.example.com
prometheus-operator-admission-webhook-8698c45557-8hf6f Running infra1.ocp4.example.com
thanos-querier-68dd4c76d4-9rsg9 Running infra1.ocp4.example.com
thanos-querier-68dd4c76d4-nhshr Running infra3.ocp4.example.com
최종적으로 Cluster Operator가 정상적인지 확인합니다.
# oc get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.13.4 True False False 6m38s
baremetal 4.13.4 True False False 4d4h
cloud-controller-manager 4.13.4 True False False 4d4h
cloud-credential 4.13.4 True False False 4d4h
cluster-autoscaler 4.13.4 True False False 4d4h
config-operator 4.13.4 True False False 4d4h
console 4.13.4 True False False 6m17s
control-plane-machine-set 4.13.4 True False False 4d4h
csi-snapshot-controller 4.13.4 True False False 4d4h
dns 4.13.4 True False False 4d4h
etcd 4.13.4 True False False 4d4h
image-registry 4.13.4 True False False 4d4h
ingress 4.13.4 True False False 2d20h
insights 4.13.4 True False False 4d4h
kube-apiserver 4.13.4 True False False 4d4h
kube-controller-manager 4.13.4 True False False 4d4h
kube-scheduler 4.13.4 True False False 4d4h
kube-storage-version-migrator 4.13.4 True False False 2d22h
machine-api 4.13.4 True False False 4d4h
machine-approver 4.13.4 True False False 4d4h
machine-config 4.13.4 True False False 4d4h
marketplace 4.13.4 True False False 4d4h
monitoring 4.13.4 True False False 4d4h
network 4.13.4 True False False 4d4h
node-tuning 4.13.4 True False False 4d4h
openshift-apiserver 4.13.4 True False False 19h
openshift-controller-manager 4.13.4 True False False 4d4h
openshift-samples 4.13.4 True False False 2d22h
operator-lifecycle-manager 4.13.4 True False False 4d4h
operator-lifecycle-manager-catalog 4.13.4 True False False 4d4h
operator-lifecycle-manager-packageserver 4.13.4 True False False 4d4h
service-ca 4.13.4 True False False 4d4h
storage 4.13.4 True False False 4d4h
'Linux > OpenShift' 카테고리의 다른 글
RHOCP) OpenShift Logging (1) - 개요 (0) | 2023.08.01 |
---|---|
RHOCP) OVN-Kubernetes Architecture (0) | 2023.07.31 |
RHOCP) Disconnected OperatorHub 구성 (0) | 2023.07.28 |
RHOCP) Machine Config를 이용한 Chrony 설정 (0) | 2023.07.26 |
RHOCP) Machine Config Operator (MCO) (0) | 2023.07.26 |