본문으로 바로가기
반응형

본 가이드는 RHOCP 4.8.5에 RHCOS 4.8.2 기준으로 작성되어있습니다.

버전이 올라가면서 해당 방법은 변경될 수 있습니다. 아래 예제는 Bastion는 그냥 두고 PXE 서버를 구성해서 기 구성된 RHOCP Cluster에 worker 노드를 Join 시키는 방법입니다.

Bastion, bootstrap 등 초기 설치하는 설명을 포함하진 않습니다.

해당 방법을 통해 bootstrap / master / worker 노드를 PXE를 통해서 구성할 수 있습니다.

 

아래 예는 기 구축된 Cluster 에 worker 노드를 추가 하기 위한 방법이며, 내용에는 bootstrap, master 노드의 정보가 포함되어있습니다.

 

1. 준비 환경

KVM의 VM을 생성함

4 vCPU / 8G Mem / 50GB

1 NIC 

RHEL 8.2

RHOCP 4.8.5

RHCOS 4.8.2

xinetd를 설치하긴 했으나, httpd만 사용

 

 

2. SELINUX 및 방화벽 비 활성화

[root@rhocp-pxe ~]# setenforce 0

또는

[root@rhocp-pxe ocp]# vi /etc/selinux/config

SELINUX=disabled


한 후 노드 재부팅

 

 

3. PXE 서버를 위한 필요 패키지 설치

[root@rhocp-pxe ~]# dnf install -y dnsmasq wget tcpdump syslinux httpd tftp-server

 

 

4. dnsmasq 설치 및 구성

[root@rhocp-pxe ~]# cp /etc/dnsmasq.conf /etc/dnsmasq.conf.default

[root@rhocp-pxe ~]# vi /etc/dnsmasq.conf

interface=ens3,lo

#bind-interfaces
domain=test

# DHCP range-leases
# 멀티 Network Pool 사용시 아래 내용 처럼 두 개의 네트워크 풀을 설정
dhcp-range= ens3,xx.xx.xx.200,xx.xx.xx.209,255.255.255.0,1h
dhcp-range= ens3,yy.yy.yy.200,yy.yy.yy.209,255.255.255.0,1h

# 특정 호스트의 고정 IP를 할당할 경우 아래와 같이 설정
#dhcp-range= ens3,yy.yy.yy.0,static
#dhcp-range= ens3,xx.xx.xx.0,static
dhcp-host= e4:43:4b:b5:1b:8c,yy.yy.yy.202


# PXE
dhcp-boot=pxelinux.0,pxeserver,xx.xx.xx.250

# Gateway
dhcp-option=3,xx.xx.xx.1
dhcp-option=3,yy.yy.yy.1


# DNS
dhcp-option=6,xx.xx.xx.1,8.8.8.8
dhcp-option=6,yy.yy.yy.1,8.8.8.8
server=8.8.8.8

# Broadcast Address (if 24 subnet = 224)
dhcp-option=224,yy.yy.yy.255

# NTP Server
dhcp-option=42,xx.xx.xx.250

pxe-prompt="Press F8 for menu.", 60
pxe-service=x86PC, "Install RHCOS 4.8.5 from network server xx.xx.xx.250", pxelinux
enable-tftp
tftp-root=/var/lib/tftpboot

 

 

5. SYSLINUX 부트 로더로 복사

[root@rhocp-pxe ~]# cp -r /usr/share/syslinux/* /var/lib/tftpboot

 

 

6. PXE 서버 구성 파일 설정

본 예제에서는 worker노드에 대한 부분을 참고해야하며, 아래 내용중 bootstrap과 master 노드의 IP 변경 그리고 메뉴 추가를 통해 사용자가 PXE를 통해서 Cluster를 구성할 수도 있습니다.

[root@rhocp-pxe ~]# mkdir /var/lib/tftpboot/pxelinux.cfg

[root@rhocp-pxe ~]# vi /var/lib/tftpboot/pxelinux.cfg/default

default menu.c32
prompt 0
timeout 1000
menu title ###HHHHH PXE Boot Menu ###HHHHH

label 1
    menu label ^1 - Boot from bootstrap.ign
    KERNEL http://xx.xx.xx.250:8080/ocp/rhcos-live-kernel-x86_64
    APPEND ignition.platform=metal initrd=http://xx.xx.xx.250:8080/ocp/rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://xx.xx.xx.250:8080/ocp/rhcos-live-rootfs.x86_64.img  coreos.inst.install_dev=/dev/vda coreos.inst.insecure coreos.inst.image_url=http://xx.xx.xx.250:8080/ocp/rhcos.tar.gz coreos.inst.ignition_url=http://xx.xx.xx.250:8080/ign/bootstrap.ign ip=xx.xx.xx.205::xx.xx.xx.1:255.255.255.0:rhocp-sdn-bootstrap.sa.test.com:ens3:none nameserver=xx.xx.xx.18

label 2
    menu label ^2 - Boot from master.ign
    KERNEL http://xx.xx.xx.250:8080/ocp/rhcos-live-kernel-x86_64
    APPEND ignition.platform=metal initrd=http://xx.xx.xx.250:8080/ocp/rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://xx.xx.xx.250:8080/ocp/rhcos-live-rootfs.x86_64.img  coreos.inst.install_dev=/dev/vda coreos.inst.insecure coreos.inst.image_url=http://xx.xx.xx.250:8080/ocp/rhcos.tar.gz coreos.inst.ignition_url=http://xx.xx.xx.250:8080/ign/master.ign ip=xx.xx.xx.205::xx.xx.xx.1:255.255.255.0:rhocp-sdn-master1.sa.test.com:ens3:none nameserver=xx.xx.xx.18

label 3
    menu label ^3 - Boot from worker.ign
    KERNEL http://xx.xx.xx.250:8080/ocp/rhcos-live-kernel-x86_64
    APPEND ignition.platform=metal initrd=http://xx.xx.xx.250:8080/ocp/rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://xx.xx.xx.250:8080/ocp/rhcos-live-rootfs.x86_64.img  coreos.inst.install_dev=/dev/vda coreos.inst.insecure coreos.inst.image_url=http://xx.xx.xx.250:8080/ocp/rhcos.tar.gz coreos.inst.ignition_url=http://xx.xx.xx.250:8080/ign/worker.ign ip=xx.xx.xx.205::xx.xx.xx.1:255.255.255.0:rhocp-sdn-worker5.sa.test.com:ens3:none nameserver=xx.xx.xx.18

 

 

7. httpd 구성

기 구성에 사용한 ign (ignition 파일)과 rhocp 설치 이미지들을 다운받거나 기 구성한 bastion에서 파일을 복사합니다.

아래와 같은 파일들이 있어야합니다. 

rhcos.tar.gz 는 설정파일을 간단히 이름만 변경하였습니다. (rhcos-4.8.2-x86_64-metal.x86_64.raw.gz -> rhcos.tar.gz)

[root@rhocp-pxe ~]# mkdir -p /var/www/html/ign

[root@rhocp-pxe ~]# mkdir -p /var/www/html/ocp

[root@rhocp-pxe html]# ls ign/
111.ign  bootstrap.ign  master.ign  worker.ign

[root@rhocp-pxe html]# ls ocp/
rhcos-installer-kernel-x86_64  rhcos-installer-rootfs.x86_64.img  rhcos-live-initramfs.x86_64.img  rhcos-live-kernel-x86_64  rhcos-live-rootfs.x86_64.img  rhcos.tar.gz

[root@rhocp-pxe html]# vi /etc/httpd/conf/httpd.conf
Listen 8080

[root@rhocp-pxe html]# systemctl restart httpd

 

 

8. worker VM 생성

PXE 부팅 및 테스트를 위해 worker VM을 생성하고 PXE 부팅 설정을 합니다.

 

 

9. PXE Boot

boot 메뉴를 선택한 후 PXE 를 선택합니다.

 

 

10. PXE Boot

F8 키를 선택합니다.

 

엔터를 입력합니다.

 

본 가이드에서는 PXE 부팅을 통한 worker 노드 추가임으로 3번 메뉴를 선택 후 엔터를 입력합니다.

 

PXE 부팅 후 정상적으로 RHOCS 부팅이 이루어진 것을 확인 할 수 있습니다.

이후에도 몇 번의 노드 재기동이 발생할 수 있습니다.

 

 

11. 신규 worker 노드 추가 전 rhocp 노드 정보 확인

[root@rhocp-sdn-bastion ~]#oc get node
NAME                           STATUS   ROLES    AGE    VERSION
rhocp-sdn-master1.sa.test.com   Ready    master   4d7h   v1.21.1+9807387
rhocp-sdn-master2.sa.test.com   Ready    master   4d7h   v1.21.1+9807387
rhocp-sdn-master3.sa.test.com   Ready    master   4d6h   v1.21.1+9807387
rhocp-sdn-worker1.sa.test.com   Ready    worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker2.sa.test.com   Ready    worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker3.sa.test.com   Ready    worker   4d5h   v1.21.1+9807387

 

 

12. 신규 노드의 인증서 서명 요청 승인

클러스터에 시스템을 추가하면 추가한 시스템별로 보류 중인 인증서 서명 요청(CSR)이 두 개씩 생성됩니다. 이러한 CSR이 승인되었는지 확인해야 하며, 필요한 경우 이를 직접 승인해야 합니다. 

[root@rhocp-sdn-bastion ~]#oc get csr
NAME        AGE     SIGNERNAME                                    REQUESTOR                                                                   CONDITION
csr-55d24   3m43s   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Pending

[root@rhocp-sdn-bastion ~]#oc adm certificate approve csr-55d24
certificatesigningrequest.certificates.k8s.io/csr-55d24 approved

[root@rhocp-sdn-bastion ~]#oc get csr
NAME        AGE     SIGNERNAME                                    REQUESTOR                                                                   CONDITION
csr-55d24   6m41s   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-operator:node-bootstrapper   Approved,Issued

 

13. Worker 노드 Join 확인

인증서 서명 확인 이후에 node 정보를 통해 기존 클러스터에 신규 노드가 Join되었는지 확인합니다. Not Ready일 경우 조금 기다리면 Ready가 됩니다. 

[root@rhocp-sdn-bastion ~]#oc get node
NAME                           STATUS     ROLES    AGE    VERSION
rhocp-sdn-master1.sa.test.com   Ready      master   4d7h   v1.21.1+9807387
rhocp-sdn-master2.sa.test.com   Ready      master   4d7h   v1.21.1+9807387
rhocp-sdn-master3.sa.test.com   Ready      master   4d6h   v1.21.1+9807387
rhocp-sdn-worker1.sa.test.com   Ready      worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker2.sa.test.com   Ready      worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker3.sa.test.com   Ready      worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker5.sa.test.com   NotReady   worker   18s    v1.21.1+9807387


[root@rhocp-sdn-bastion ~]#oc get node
NAME                           STATUS   ROLES    AGE    VERSION
rhocp-sdn-master1.sa.test.com   Ready    master   4d7h   v1.21.1+9807387
rhocp-sdn-master2.sa.test.com   Ready    master   4d7h   v1.21.1+9807387
rhocp-sdn-master3.sa.test.com   Ready    master   4d6h   v1.21.1+9807387
rhocp-sdn-worker1.sa.test.com   Ready    worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker2.sa.test.com   Ready    worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker3.sa.test.com   Ready    worker   4d5h   v1.21.1+9807387
rhocp-sdn-worker5.sa.test.com   Ready    worker   82s    v1.21.1+9807387

 

 

14. bastion에서 신규 추가된 worker에 접속 및 컨테이너 확인

PXE를 통해 추가 된 신규 worker 노드에 접속 후 컨테이너 상태를 확인합니다.

 

 

 

 

 

728x90