[OpenShift] Matchbox 를 이용하여 OpenShift 배포서버 구성
OpenShift / OKD 4 version 이 되면서 일반 Linux (RHEL/CentOS) 가 아닌 CoreOS (RHCOS/Fedora CoreOS) 를 사용하면서 OpenShift 설치 방법이 많이 달라졌습니다.
OpenShift 설치를 위해 ignition, kernel image, initramfs, rootfs 등의 배포 관리가 필요합니다.
OpenShift Document 에서는 httpd 및 pxe 를 이용하여 배포를 하도록 하지만 matchbox
를 이용하면 향후 운영에도 편리한 배포가 가능합니다.
matchbox
란?
matchbox
의 주요 기능은 MAC 주소 기반으로 OpenShift 설치에 필요한 파일을 제공하는 오픈소스 솔루션입니다.
matchbox
설치
설치는 아래와 같이 컨테이너를 이용하여 설치를 진행합니다.
이번 테스트는 DHCP 서버에 matchbox
를 같이 구동하여 DHCP 에서 IP 할당이 되면 배포에 필요한 파일을 matchbox
에서 가져오도록 구현하였습니다.
Podman 설치
[root@infra ~]# yum -y install podman
matchbox
설치
[root@infra ~]# wget https://github.com/poseidon/matchbox/releases/download/v0.8.0/matchbox-v0.8.0-linux-amd64.tar.gz
[root@infra ~]# tar xzvf matchbox-v0.8.0-linux-amd64.tar.gz
참고) version 은 차이가 있을수도 있습니다.
최신 버전 확인 : https://matchbox.psdn.io/
[root@infra ~]# mkdir /etc/matchbox
[root@infra ~]# export SAN=DNS.1:$(hostname),IP.1:10.50.2.52
[root@infra ~]# cd /root/matchbox-v0.8.0-linux-amd64/scripts/tls
[root@infra tls]# ./cert-gen
...
X509v3 Subject Alternative Name:
DNS:dhcp.okd.chhanz.com, IP Address:10.50.2.52
...
[root@infra tls]# cp ca.crt server.crt server.key /etc/matchbox
위와 같이 배포 서버 인증서를 생성합니다. cert-gen
라는 인증서 스크립트를 제공하고 있으니 사용하면 됩니다.
https://github.com/poseidon/matchbox/blob/master/docs/deployment.md#installation
matchbox
실행
[root@infra ~]# podman run --net=host -d --rm -v /var/lib/matchbox:/var/lib/matchbox \
-v /etc/matchbox:/etc/matchbox quay.io/poseidon/matchbox:latest \
-address=0.0.0.0:8080 -rpc-address=0.0.0.0:8081 -log-level=debug
[root@infra ~]# curl 127.0.0.1:8080
matchbox
위와 같이 curl 을 이용하여 matchbox 라고 나오면 정상적으로 실행이 된 것 입니다.
OpenShift 배포 파일 추가
아래 경로에 ignition, kernel image, initramfs, rootfs 등을 추가하고 profile 을 작성합니다.
[root@infra matchbox]# pwd
/var/lib/matchbox
[root@infra matchbox]# tree
.
|-- assets
| |-- fedora-coreos-32.20201018.3.0-live-initramfs.x86_64.img
| |-- fedora-coreos-32.20201018.3.0-live-kernel-x86_64
| |-- fedora-coreos-32.20201018.3.0-live-rootfs.x86_64.img
| |-- fedora-coreos-32.20201018.3.0-metal.x86_64.raw.xz
| |-- fedora-coreos-32.20201018.3.0-metal.x86_64.raw.xz.sig
| |-- fedora-coreos-32.20201104.3.0-live-initramfs.x86_64.img
| |-- fedora-coreos-32.20201104.3.0-live-kernel-x86_64
| |-- fedora-coreos-32.20201104.3.0-live-rootfs.x86_64.img
| |-- fedora-coreos-32.20201104.3.0-metal.x86_64.raw.xz.sig
|-- groups
| |-- bootstrap.json
| |-- master1.json
| |-- master2.json
| |-- master3.json
| |-- worker.json
|-- ignition
| |-- bootstrap.ign
| |-- master.ign
| |-- worker.ign
|-- profiles
|-- bootstrap.json
|-- master.json
|-- worker.json
위와 같이 assets
경로에는 설치에 필요한 initramfs, kernel, rootfs 를 위치합니다.
[root@infra matchbox]# cat groups/bootstrap.json
{
"id": "bootstrap-1",
"name": "bootstrap-1",
"profile": "bootstrap",
"selector": {
"mac": "00:30:57:81:c9:10"
}
}
[root@infra matchbox]# cat groups/master1.json
{
"id": "master-1",
"name": "master-1",
"profile": "master",
"selector": {
"mac": "00:30:57:81:c9:11"
}
}
[root@infra matchbox]#
위와 같이 groups
은 각 node 의 MAC 주소를 작성하고 어떤 profile 을 사용할지 지정합니다.
[root@infra matchbox]# ls -la ignition/
total 300
drwxr-xr-x 2 root root 63 Nov 30 16:34 .
drwxr-xr-x 6 root root 66 Jan 26 15:55 ..
-rw-r----- 1 root root 295606 Dec 1 14:17 bootstrap.ign
-rw-r----- 1 root root 1716 Dec 1 14:17 master.ign
-rw-r----- 1 root root 1716 Dec 1 14:17 worker.ign
[root@infra matchbox]#
ignition
파일은 openshift-install
에서 생성된 ignition
파일을 위치합니다.
[root@infra matchbox]# cat profiles/master.json
{
"id": "master",
"name": "master",
"ignition_id": "master.ign",
"boot": {
"kernel": "/assets/fedora-coreos-32.20201018.3.0-live-kernel-x86_64",
"initrd": [
"/assets/fedora-coreos-32.20201018.3.0-live-initramfs.x86_64.img"
],
"args": [
"coreos.inst=yes",
"coreos.inst.install_dev=vda",
"coreos.live.rootfs_url=http://infra.okd.chhanz.com:8080/assets/fedora-coreos-32.20201018.3.0-live-rootfs.x86_64.img",
"coreos.inst.ignition_url=http://infra.okd.chhanz.com:8080/ignition?mac=${mac:hexhyp}"
]
}
}
위와 같이 MAC 주소에 맞는 profile을 matchbox
가 자동으로 iPXE 를 이용하여 제공합니다.
matchbox
구동
아래와 같이 PXE Boot 를 통해 해당 MAC 을 사용하는 Node 는 profile 에 설정 되어 있는 boot arg 를 이용하여 boot 를 진행하고 자동으로 OpenShift 설치가 진행됩니다.
matchbox
log
...
time="2020-12-01T05:51:08Z" level=info msg="HTTP GET /boot.ipxe"
time="2020-12-01T05:51:08Z" level=info msg="HTTP GET /ipxe?uuid=65136bfd-fd35-4289-b6f1-acec191e20f4&mac=00-30-57-81-c9-14&domain=chhanz.com&hostname=w1.okd.chhanz.com&serial="
time="2020-12-01T05:51:08Z" level=debug msg="Matched an iPXE config" labels="map[domain:chhanz.com hostname:w1.okd.chhanz.com mac:00:30:57:81:c9:14 serial: uuid:65136bfd-fd35-4289-b6f1-acec191e20f4]" profile=worker
...
dhcpd
서버 설정
dhcpd 를 이용하여 ipxe boot 제공 방법은 아래와 같이 dhcpd.conf
에 내용을 추가하면 됩니다.
...
next-server 20.0.0.1;
filename "http://20.0.0.1:8080/boot.ipxe"; << matchbox address
...