본문 바로가기
Linux/OpenShift

RHOCP Installation (9) - OCP 클러스터 설치

by LILO 2023. 7. 25.
반응형

INTRO

RHOCP 설치를 위한 모든 설정 준비는 완료되었고 Bootstrap을 설치하고 아래의 네모 박스 안에 있는 RHOCP 클러스터의 노드인 Master node, Worker node를 설치하는 단계입니다.

 

 

아래의 사진은 앞에서 작업했던 Install config의 생성하고 그 기반으로 Ignition을 생성하여 그 정보를 Boostrap, Control Plane, Compute node 설치시 사용하는 것을 그림으로 표현하였습니다.

자세한 내용은 아래의 링크를 참고바랍니다.

 

Installation overview | Installing | OpenShift Container Platform 4.13

×

docs.openshift.com

https://docs.openshift.com/container-platform/4.13/installing/index.html

 

 

 

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를 이용하여 아래의 부팅 화면에 진입합니다.

RHCOS 부팅 화면

설치할 Disk를 확인하기 위해 "# sudo -i"를 이용하여 root 유저로 스위칭한 후 Disk를 확인합니다.

아래의 OS에서는 "/dev/sda"라고 보이는 것을 확인할 수 있습니다.

Disk 확인

RHCOS 4.X는 RHEL 8.X OS 기반이기 때문에 NetworkManager를 이용하여 네트워크 설정을 해야됩니다.(nmcli, nmtui)

NetworkManager를 이용한 네트워크 설정시 참고할 자료가 필요하실 경우 아래의 글을 참고하시면 됩니다.

 

Linux) RHEL 8.X 네트워크 설정

INTRO RHEL 7.X에서는 NetworkManager와 network-scripts가 동시에 데몬으로 존재했지만 RHEL 8.X에서는 NetworkManager만 기본으로 설치되어있습니다. 즉, Red Hat에서는 NetworkManager로 네트워크 설정하는 것을 권고

lilo.tistory.com

이 글에서는 어떠한 네트워크를 설정하였는지 보여드리기 위해 nmtui로 진행하였습니다.

RHCOS 네트워크 설정 (nmtui)
네트워크 설정 확인

네트워크 설정이 완료되면 새로운 세션으로 로그인할 경우 역방향 DNS로 설정되어 있고 NetworKManager를 사용하고 있을 경우 Hostname이 자동으로 해당 IP에 대한 DNS로 변경됩니다.

Hostname 변경 확인

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이 삭제되지 않습니다.

 

How to remove worker role from master in Red Hat OpenShift Container Platform 4.x? - Red Hat Customer Portal

On bare metal installations, master nodes feature both master and worker roles. How to remove worker role from master in Red Hat OpenShift Container Platform 4.x?

access.redhat.com

 

마지막으로 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" 파일의 내용

이는 임시적으로 사용한 계정이기 때문에 별도의 관리를 위해 계정 생성이 필요합니다.

계정 생성에 대한 내용은 추후에 공유드리겠습니다. 

반응형