[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
...

참고 자료

chhanz's profile image

chhanz

2021-01-26

Read more posts by this author