Niko Akhmalul Ananto
Niko Akhmalul Ananto
Published on 2025-09-24 / 149 Visits
2
0

Install single node OKD (SNO) di atas Libvirt

OKD adalah distribusi komunitas dari Kubernetes yang menjadi upstream untuk Red Hat OpenShift. OKD menggunakan Fedora CoreOS (atau Super CoreOS/SCOS pada versi terbaru) sebagai sistem operasinya, dengan manajemen cluster berbasis Kubernetes, CRI-O, dan Operator Framework.

Spesifikasi

Untuk menjalankan single node OKD, VM minimal menggunakan spesifikasi berikut:

  • CPU: 4 core

  • RAM: 16 GB

  • Disk: 300 GB

Prasyarat

Sebelum mulai instalasi, pastikan sudah memenuhi:

  • Administration host: disini saya pakai Ubuntu 24.04 dengan Libvirt + KVM terpasang.

  • Preserved IP dari DHCP server untuk VM OKD (IP harus statis).

  • DNS record untuk komunikasi dengan API OKD (api, api-int, *.apps).

  • Akun RedHat untuk mengambil pull secret dari console.redhat.com.

Setup DNS & DHCP Server

Pada tahapan ini kita akan membuat network pada dengan libvirt untuk mapping IP DHCP Static* dan DNS Record OKD, untuk dnsmasq kita menggunakan default dnsmasq yang ada pada libvirt.

*IP Dynamic yang sudah dimapping segment-nya.

Buat Network OKD

# Paste pada terminal
cat <<EOF>net-okd.xml
<network xmlns:dnsmasq='http://libvirt.org/schemas/network/dnsmasq/1.0'>
  <name>net-okd</name>
  <forward mode='route'/>
  <bridge name='virnet1' stp='on' delay='0'/>
  <mtu size='9000'/>
  <domain name='lab.local' localOnly='yes'/>
  <dns enable='yes'/>
  <ip family='ipv4' address='192.168.33.1' prefix='24'>
    <dhcp>
      <range start='192.168.33.2' end='192.168.33.254'/>
      <host mac='52:54:00:1a:9b:01' name='sno-okd' ip='192.168.33.10'/>
    </dhcp>
  </ip>
  <dnsmasq:options>
    <dnsmasq:option value='host-record=api.sno-okd.lab.local,192.168.33.10'/>
    <dnsmasq:option value='host-record=api-int.sno-okd.lab.local,192.168.33.10'/>
    <dnsmasq:option value='host-record=bootstrap.sno-okd.lab.local,192.168.33.10'/>
    <dnsmasq:option value='address=/.apps.sno-okd.lab.local/192.168.33.10'/>
    <dnsmasq:option value='host-record=sno-okd.lab.local,192.168.33.10'/>
    <dnsmasq:option value='dhcp-option=6,192.168.33.1,1.1.1.1,8.8.8.8'/>	  
  </dnsmasq:options>
</network>
EOF

Define Network

Setelah membuat file xml yang berisi konfigurasi network untuk libvirt, selanjutnya kita harus define network tersebut agar libvirt dapat mengenal network tersebut lalu start networknya

# Define network kedalam sistem libvirt
virsh net-define net-okd.xml

# Start Network dan set Autostart
virsh net-start net-okd
virsh net-autostart net-okd

Verifikasi Network

Selanjutnya verifikasi network yang sebelumnya telah dibuat dan coba untuk test dns yang dipasang

nslookup api.sno-okd.lab.local 192.168.33.1
nslookup 192.168.33.10 192.168.33.1

okd dns

Unduh Package yang Dibutuhkan

Pada tahap ini kita akan mengunduh package yang dibutuhkan untuk instalasi:

  • openshift-client (oc, kubectl) → digunakan untuk mengelola cluster OKD.

  • openshift-install → installer OKD.

  • coreos-installer → tool untuk membuat ISO FCOS/SCOS dengan ignition data.

# Pilih versi OKD untuk dipasang. Bisa disesuaikan dengan selera dan tingkat kestabilan
export OKD_VERSION=4.20.0-okd-scos.0

curl -L https://github.com/okd-project/okd/releases/download/$OKD_VERSION/openshift-client-linux-$OKD_VERSION.tar.gz -o oc.tar.gz
curl -L https://github.com/okd-project/okd/releases/download/$OKD_VERSION/openshift-install-linux-$OKD_VERSION.tar.gz -o openshift-install-linux.tar.gz
curl -L https://mirror.openshift.com/pub/openshift-v4/clients/coreos-installer/latest/coreos-installer -o coreos-installer

tar zxf oc.tar.gz
tar zxvf openshift-install-linux.tar.gz

chmod +x oc openshift-install coreos-installer

Download Fedora CoreOS/Super CoreOS live ISO:

export ARCH=x86_64
export ISO_URL=$(./openshift-install coreos print-stream-json| jq -r ".architectures[\"$ARCH\"].artifacts.metal.formats.iso.disk.location")

curl -L $ISO_URL -o fcos-live.iso

Membuat Live ISO Installer

Untuk membuat OKD Single Node pada libvirt. Kita harus membuat Live ISO Installer, file ISO ini yang akan kita gunakan untuk deploy cluster OKD tersebut. Tapi sebelum kita membuat Live ISO, kita harus menambah konfigurasi Ignition kedalam master ISO tersebut.

Konfigurasi Ignition

Ignition adalah tool yang dibuat oleh Fedora Project untuk memberitahu jika ISO tersebut berisi OKD didalamnya, jadi Fedora CoreOS yang akan dipasang akan dituning untuk kestabilan dan manipulasi host untuk OKD. Baik dari manipulasi disk, konfigurasi, dll. Untuk detailnya bisa dilihat pada website OKD.

cat <<EOF>install-config.yaml
apiVersion: v1
baseDomain: lab.local         #domain okd
compute:
- name: worker
  replicas: 0 
controlPlane:
  name: master
  replicas: 1 
metadata:
  name: sno-okd               # hostname vm
networking: 
  clusterNetwork:
  - cidr: 10.128.0.0/14       # network default for pod
    hostPrefix: 23
  machineNetwork:
  - cidr: 192.168.33.0/24     # network from ip address vm
  networkType: OVNKubernetes
  serviceNetwork:
  - 172.30.0.0/16             # network service pod
platform:
  none: {}
bootstrapInPlace:
  installationDisk: /dev/vda
pullSecret: '<pull_secret>'  
sshKey: |
  <ssh_key>                    # pubkey host
EOF

mkdir sno-okd
cp install-config.yaml sno-okd/

# Generate Konfigurasi OKD
./openshift-install --dir=sno-okd create single-node-ignition-config

Build Live ISO

Setelah generate konfigurasi OKD, kita akan menggabungkan CoreOS dari Fedora dengan Ignition yang sebelumnya sudah dibuat.

./coreos-installer iso ignition embed -fi sno-okd/bootstrap-in-place-for-live-iso.ign -o fcos-sno-okd-installer.iso fcos-live.iso

mv fcos-sno-okd-installer.iso /var/lib/libvirt/images/

Membuat VM OKD

Sebelum buat vmnya, kita harus siapkan disk yang sudah diconvert menjadi QCOW2, tujuannya agar mengalokasikan disk untuk vm OKD dan nama disk tidak random.

Format Disk ke QCOW2

Untuk command atau perintah untuk convert Disk menjadi format QCOW2, bisa ikuti perintah berikut

qemu-img create -f qcow2 -o preallocation=off \
/var/lib/libvirt/images/sno-okd-sda.qcow2 300G

Buat VM OKD

Setelah disk kita buat, selanjutnya mari kita buat vm untuk OKD single node dengan ISO yang sebelumnya sudah dibuat. Untuk spesifikasi memory dan cpu bisa disesuaikan dengan spesifikasi yang diinginkan.

virt-install \
  --name sno-okd \
  --memory 16384 \ # satuan bit 16GB=16384bit
  --vcpus 4 \
  --disk path=/var/lib/libvirt/images/sno-okd-sda.qcow2,device=disk,bus=virtio \ #lokasi disk
  --network network=net-okd,mac=52:54:00:1a:9b:01 \
  --boot cdrom,hd,menu=on \
  --cdrom /var/lib/libvirt/images/fcos-sno-okd-installer.iso \ #lokasi ISO
  --os-variant fedora-coreos-stable \
  --graphics vnc \
  --noautoconsole \
  --boot loader=/usr/share/OVMF/OVMF_CODE_4M.fd,loader.readonly=yes,loader.type=pflash,loader.secure=no \
  --import  

Proses Instalasi

Setelah VM berjalan, cek apakah VM sudah aktif dan bisa diakses:

ping -c4 192.168.33.10 # IP yang sebelumnya disetting pada konfigurasi OKD

# Memasukkan gateway network OKD kedalam resolv.conf 
echo 'nameserver 192.168.33.1' | tee -a /etc/resolv.conf
ping -c4 sno-okd.lab.local

Pantau proses bootstrap dan instalasi:

./openshift-install --dir=sno-okd wait-for bootstrap-complete
./openshift-install --dir=sno-okd wait-for install-complete

Pada terminal lain, pantau log VM:

ssh -l core sno-okd.lab.local
sudo journalctl -f

okd log

Pasca Instalasi

1. Akses CLI OKD

Setelah cluster sudah ready, gunakan oc dan kubectl untuk verifikasi.

# check all operators and pod
export KUBECONFIG=$(pwd)/sno-okd/auth/kubeconfig

install oc /usr/local/bin
install kubectl /usr/local/bin

oc get nodes -o wide
oc get clusteroperators

okd node was ready

2. Akses Dashboard OKD

Import ingress-ca ke browser agar bisa mengakses web console dengan HTTPS valid.

oc get secret router-ca -n openshift-ingress-operator \
 -o jsonpath='{.data.tls\.crt}' | base64 -d > ingress-ca.crt

Cara import certificate di Firefox:

  1. Buka about:preferences#privacy

  2. Scroll ke bawah → Certificates → klik View Certificates

  3. Tab Authorities → klik Import

  4. Tambahkan file ingress-ca.crt

  5. Centang:
    - Trust this CA to identify websites
    - Trust this CA to identify email users

  6. Klik OK

Buka url https://console-openshift-console.apps.sno-okd.lab.local/

Credential:

- user: kubeadmin

- password: (ada di file sno-okd/auth/kubeadmin-password)

insert cert okd dashboard

okd dashboard

catatan: user kubeadmin adalah temporary administrative user, jadi harus segera buat baru.

3. Buat User Administrative Baru

Buat user baru dengan HTPasswd untuk akses administratif.

apt install apache2-utils -y
touch user-creds
htpasswd -Bb user-creds devops (password)
oc create secret generic htpasswd-secret \
  --from-file=htpasswd=user-creds \
  -n openshift-config
oc edit oauth cluster
---
spec:
  identityProviders:
  - name: htpasswd_provider
    mappingMethod: claim
    type: HTPasswd
    htpasswd:
      fileData:
        name: htpasswd-secret

oc adm policy add-cluster-role-to-user cluster-admin devops
oc get clusterrolebindings/cluster-admin-0
oc describe clusterrolebindings/cluster-admin-0

export API_CERT=$(oc get secret  loadbalancer-serving-signer \
                    -n openshift-kube-apiserver-operator \
                    -o jsonpath='{.data.tls\.crt}' | base64 -d)
export INGRESS_CERT=$(oc get secret router-ca \
                        -n openshift-ingress-operator \
                        -o jsonpath='{.data.tls\.crt}' | base64 -d)

mkdir ~/.kube
cat <<EOF > $(pwd)/.kube/ca-bundle.crt
$API_CERT
$INGRESS_CERT
EOF

unset KUBECONFIG

oc login --server=api.sno-okd.lab.local:6443 \
  --certificate-authority=$(pwd)/.kube/ca-bundle.crt \
  -u devops -p (password)

oc whoami
kubectl config get-contexts

Setelah itu login kembali dengan user baru di dashboard.

Referensi

https://docs.okd.io/latest/installing/installing_sno/install-sno-installing-sno.html


Comment