INTRO
RHOCP 설치를 위한 모든 설정 준비는 완료되었고 Bootstrap을 설치하고 아래의 네모 박스 안에 있는 RHOCP 클러스터의 노드인 Master node, Worker node를 설치하는 단계입니다.
아래의 사진은 앞에서 작업했던 Install config의 생성하고 그 기반으로 Ignition을 생성하여 그 정보를 Boostrap, Control Plane, Compute node 설치시 사용하는 것을 그림으로 표현하였습니다.
자세한 내용은 아래의 링크를 참고바랍니다.
RHCOS(RedHat CoreOS) 설치
아래의 글에서는 RHCOS 4.13.0으로 진행하였으며 ISO 다운로드는 아래의 링크에서 진행하면 됩니다.
설치 방법은 부팅 화면에서 파라미터를 추가하는 방법이 아닌 "coreos-installer" 명령을 이용하여 진행할 예정입니다.
https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/
Bootstrap 서버 설치를 하는 단계입니다. 설치 단계는 Master, Worker node 설치시에는 생략할 예정입니다.
RHCOS Live ISO를 이용하여 아래의 부팅 화면에 진입합니다.
설치할 Disk를 확인하기 위해 "# sudo -i"를 이용하여 root 유저로 스위칭한 후 Disk를 확인합니다.
아래의 OS에서는 "/dev/sda"라고 보이는 것을 확인할 수 있습니다.
RHCOS 4.X는 RHEL 8.X OS 기반이기 때문에 NetworkManager를 이용하여 네트워크 설정을 해야됩니다.(nmcli, nmtui)
NetworkManager를 이용한 네트워크 설정시 참고할 자료가 필요하실 경우 아래의 글을 참고하시면 됩니다.
이 글에서는 어떠한 네트워크를 설정하였는지 보여드리기 위해 nmtui로 진행하였습니다.
네트워크 설정이 완료되면 새로운 세션으로 로그인할 경우 역방향 DNS로 설정되어 있고 NetworKManager를 사용하고 있을 경우 Hostname이 자동으로 해당 IP에 대한 DNS로 변경됩니다.
Bootstrap 정보를 담은 CoreOS를 설치합니다.
Install Complete가 출력되면 정상적으로 Ignition 파일을 받아와서 정보를 저장하였고 Network 설정도 영구적으로 저장되어서 재부팅해도 설정이 없어지지 않습니다.
# coreos-installer install /dev/sda --insecure-ignition -I http://192.168.56.29:8080/ign/bootstrap.ign -n
모두 확인 하였으면 Bootstrap 서버 설치를 위해 재부팅을 진행합니다.
# reboot
Bootstrap 설치 확인
Bastion1 서버에서 "openshift-install" 명령어를 통해 bootstrap이 정상적으로 설치되고 있는지 확인합니다.
API up이 된 것을 확인하고 boostrapping to complete를 확인합니다.
만약 이 단계에서 API up이 되지 않는다면 Insatll-config.yaml, Ignition, DNS, HAProxy, Boostrap 네트워크 등을 확인하기 바랍니다.
# openshift-install --dir=/root/ocp/config wait-for bootstrap-complete --log-level=info
INFO Waiting up to 20m0s (until 4:40PM) for the Kubernetes API at https://api.ocp4.example.com:6443...
INFO API v1.26.5+7d22122 up
INFO Waiting up to 30m0s (until 4:51PM) for bootstrapping to complete...
☞ Bootstrap 설치가 정상적으로 되지 않는데 원인 찾기도 힘들 때 boostrap 서버에 직접 접속하여 bootkube 데몬의 로그를 확인하면 빠르게 확인이 가능합니다
[core@bootstrap ~]$ journalctl -b -f -u release-image.service -u bootkube.service
Jul 25 07:30:26 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_cr-scc-restricted.yaml" clusterroles.v1.rbac.authorization.k8s.io/system:openshift:scc:restricted -n
Jul 25 07:30:27 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_crb-systemauthenticated-scc-restricted-v2.yaml" clusterrolebindings.v1.rbac.authorization.k8s.io/system:openshift:scc:restricted-v2 -n
Jul 25 07:30:27 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_scc-anyuid.yaml" securitycontextconstraints.v1.security.openshift.io/anyuid -n
Jul 25 07:30:28 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_scc-hostaccess.yaml" securitycontextconstraints.v1.security.openshift.io/hostaccess -n
Jul 25 07:30:28 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_scc-hostmount-anyuid.yaml" securitycontextconstraints.v1.security.openshift.io/hostmount-anyuid -n
Jul 25 07:30:28 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_scc-hostnetwork-v2.yaml" securitycontextconstraints.v1.security.openshift.io/hostnetwork-v2 -n
Jul 25 07:30:29 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_scc-hostnetwork.yaml" securitycontextconstraints.v1.security.openshift.io/hostnetwork -n
Jul 25 07:30:29 bootstrap.ocp4.example.com bootkube.sh[5264]: Created "0000_20_kube-apiserver-operator_00_scc-nonroot-v2.yaml" securitycontextconstraints.v1.security.openshift.io/nonroot-v2 -n
Control plane node 설치
OC 명령어를 사용하기 위해 KUBECONFIG에 대한 설정을 bash_profile에 작성합니다.
# vi /root/.bash_profile
..(생략)
export KUBECONFIG=/root/ocp/config/auth/kubeconfig
# source /root/.bash_profile
위의 RHCOS 설치방법과 동일하게 설치하면됩니다. 설치 방법은 생략하고 결과만 확인하겠습니다.
노드의 상태를 확인하기 위해 Bastion1 서버에서 아래의 명령을 수행합니다.
# oc get node
NAME STATUS ROLES AGE VERSION
master1.ocp4.example.com Ready control-plane,master,worker 24m v1.26.5+7d22122
master2.ocp4.example.com Ready control-plane,master,worker 24m v1.26.5+7d22122
master3.ocp4.example.com Ready control-plane,master,worker 2m57s v1.26.5+7d22122
이러한 경우는 거의 없지만 모든 설정이 정상적인데 특정 node가 목록에 노드 목록에 나타나지 않을 경우 CSR의 상태가 Pending 상태인지 확인이 필요합니다. 확인되면 Approve하는 작업을 합니다.
# oc get csr
NAME AGE SIGNERNAME REQUESTOR REQUESTEDDURATION CONDITION
csr-522m2 21m kubernetes.io/kubelet-serving system:node:master1.ocp4.example.com <none> Approved,Issued
csr-hgkj8 7m6s kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Pending
csr-m5c6t 22m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Approved,Issued
csr-njbjn 21m kubernetes.io/kubelet-serving system:node:master2.ocp4.example.com <none> Approved,Issued
csr-rf9j4 21m kubernetes.io/kube-apiserver-client-kubelet system:serviceaccount:openshift-machine-config-operator:node-bootstrapper <none> Approved,Issued
system:openshift:openshift-authenticator-6ddvq 13m kubernetes.io/kube-apiserver-client system:serviceaccount:openshift-authentication-operator:authentication-operator <none> Approved,Issued
system:openshift:openshift-monitoring-fb99c 12m kubernetes.io/kube-apiserver-client system:serviceaccount:openshift-monitoring:cluster-monitoring-operator <none> Approved,Issued
<Pending 상태인 CSR을 모두 Approve>
# for i in `oc get csr |grep Pending | awk '{print $1;}'`; do oc adm certificate approve $i; done
certificatesigningrequest.certificates.k8s.io/csr-hgkj8 approved
# oc get no
NAME STATUS ROLES AGE VERSION
master1.ocp4.example.com Ready control-plane,master,worker 24m v1.26.5+7d22122
master2.ocp4.example.com Ready control-plane,master,worker 24m v1.26.5+7d22122
master3.ocp4.example.com Ready control-plane,master,worker 2m57s v1.26.5+7d22122
이전에 Bootstrap 서버를 설치할 때 사용한 명령어를 다시 실행하여 Master node가 정상적으로 설치되었는지 확인합니다.
아래와 같이 Boostrap resource를 삭제해도 된다는 로그가 출력되면 Bootstrap VM을 삭제합니다.
# openshift-install --dir=/root/ocp/config wait-for bootstrap-complete --log-level=info
INFO Waiting up to 20m0s (until 5:35PM) for the Kubernetes API at https://api.ocp4.example.com:6443...
INFO API v1.26.5+7d22122 up
INFO Waiting up to 30m0s (until 5:45PM) for bootstrapping to complete...
INFO It is now safe to remove the bootstrap resources
INFO Time elapsed: 0s
Worker(Compute) node 설치
위의 RHCOS 설치방법과 동일하게 설치하면됩니다. 설치 방법은 생략하고 결과만 확인하겠습니다.
노드의 상태를 확인하기 위해 Bastion1 서버에서 아래의 명령을 수행합니다.
# oc get no
NAME STATUS ROLES AGE VERSION
master1.ocp4.example.com Ready control-plane,master,worker 40m v1.26.5+7d22122
master2.ocp4.example.com Ready control-plane,master,worker 40m v1.26.5+7d22122
master3.ocp4.example.com Ready control-plane,master,worker 19m v1.26.5+7d22122
worker1.ocp4.example.com Ready worker 3m58s v1.26.5+7d22122
worker2.ocp4.example.com Ready worker 3m58s v1.26.5+7d22122
Compute node가 목록에 노드 목록에 나타나지 않을 경우 CSR의 상태가 Pending 상태인지 확인이 필요합니다. 확인되면 Approve하는 작업을 합니다.
# for i in `oc get csr |grep Pending | awk '{print $1;}'`; do oc adm certificate approve $i; done
Control plane(master) node에 worker ROLES 삭제
Control plane node에 ROLES에 worker가 있을 경우 Control plane node에도 Pod가 배포되기 때문에 worker ROLES를 삭제하는 작업을 합니다.
Master node의 정식 표기는 Control plane이지만 APP 배포시 control-plane ROLE을 사용하지 않을 예정이므로 control-plane ROLES로 같이 삭제합니다.
# oc get no
NAME STATUS ROLES AGE VERSION
master1.ocp4.example.com Ready control-plane,master,worker 40m v1.26.5+7d22122
master2.ocp4.example.com Ready control-plane,master,worker 40m v1.26.5+7d22122
master3.ocp4.example.com Ready control-plane,master,worker 19m v1.26.5+7d22122
worker1.ocp4.example.com Ready worker 3m58s v1.26.5+7d22122
worker2.ocp4.example.com Ready worker 3m58s v1.26.5+7d22122
<Control plane node에 control-plane ROLES 삭제>
# oc label node master1.ocp4.example.com node-role.kubernetes.io/control-plane-
# oc label node master2.ocp4.example.com node-role.kubernetes.io/control-plane-
# oc label node master3.ocp4.example.com node-role.kubernetes.io/control-plane-
<Control plane node에 worker ROLES 삭제>
# oc patch schedulers.config.openshift.io/cluster --type merge -p '{"spec":{"mastersSchedulable":false}}'
Q: label의 role 삭제 명령어를 수행하였는데 worker ROLES가 삭제 되지 않아요.
☞ 스케줄 설정에 mastersSchedulable이 true로 설정되어 있으면 worker role이 자동으로 부여되는데 mastersSchedulable를 false로 변경하는 작업을 하지 않는 이상 worker role이 삭제되지 않습니다.
마지막으로 Cluster Operator의 상태를 확인합니다.
AVAILABLE의 상태가 모두 True이면 정상 상태입니다. PROGRESSING의 상태가 True일 경우에는 해당되는 Operator가 어떠한 작업 진행을 하고있는 단계로 작업이 끝날 때까지 기다려야합니다.
# oc get co
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
authentication 4.13.4 True False False 27m
baremetal 4.13.4 True False False 51m
cloud-controller-manager 4.13.4 True False False 60m
cloud-credential 4.13.4 True False False 71m
cluster-autoscaler 4.13.4 True False False 52m
config-operator 4.13.4 True False False 53m
console 4.13.4 True False False 31m
control-plane-machine-set 4.13.4 True False False 53m
csi-snapshot-controller 4.13.4 True False False 53m
dns 4.13.4 True False False 51m
etcd 4.13.4 True False False 51m
image-registry 4.13.4 True False False 46m
ingress 4.13.4 True False False 44m
insights 4.13.4 True False False 41m
kube-apiserver 4.13.4 True False False 42m
kube-controller-manager 4.13.4 True False False 49m
kube-scheduler 4.13.4 True False False 49m
kube-storage-version-migrator 4.13.4 True False False 53m
machine-api 4.13.4 True False False 53m
machine-approver 4.13.4 True False False 52m
machine-config 4.13.4 True False False 49m
marketplace 4.13.4 True False False 51m
monitoring 4.13.4 True False False 42m
network 4.13.4 True False False 52m
node-tuning 4.13.4 True False False 51m
openshift-apiserver 4.13.4 True False False 22m
openshift-controller-manager 4.13.4 True False False 44m
openshift-samples 4.13.4 True False False 40m
operator-lifecycle-manager 4.13.4 True False False 53m
operator-lifecycle-manager-catalog 4.13.4 True False False 53m
operator-lifecycle-manager-packageserver 4.13.4 True False False 46m
service-ca 4.13.4 True False False 53m
storage 4.13.4 True False False 53m
OpenShift Web Console 접속
같은 대역대에 있다면 DNS를 OCP DNS로 변경하여 접속이 가능하겠지만 거의 모든 환경이 그렇지 않기 때문에 윈도우 기준으로는 "C:\Windows\System32\drivers\etc\etc\hosts" 리눅스 기준으로는 "/etc/hosts"에 등록해야 됩니다.
CMD or Power Shell을 관리자 명령으로 실행
C:\> notepad C:\Windows\System32\drivers\etc\hosts
..(생략)
192.168.56.29 console-openshift-console.apps.ocp4.example.com
192.168.56.29 oauth-openshift.apps.ocp4.example.com
크롬이나 엣지를 통해 RHOCP 웹 콘솔에 접속합니다.
계정을 별도로 만들기 전에 접속할 수 있는 계정은 "kubeadmin"입니다.
- Username: kubeadmin
- password: "# cat /root/ocp/config/auth/kubeadmin-password" 파일의 내용
이는 임시적으로 사용한 계정이기 때문에 별도의 관리를 위해 계정 생성이 필요합니다.
계정 생성에 대한 내용은 추후에 공유드리겠습니다.
'Linux > OpenShift' 카테고리의 다른 글
RHOCP) OpenShift ID Provider 생성 및 kubeadmin 계정 제거 (0) | 2023.07.26 |
---|---|
RHOCP) RBAC이란? (Rules, Roles 포함) (0) | 2023.07.26 |
RHOCP Installation (8) - Install Config 및 Ignition 파일 생성 (0) | 2023.07.25 |
RHOCP Installation (7) - Cluster Image Mirroring (0) | 2023.07.24 |
RHOCP Installation (6) - HAProxy + KeepAlived 이중화 구성 (0) | 2023.07.23 |