Klaster OKD 4.19 (OpenShift) na Proxmox 9- Bastion

Spis treść

Przygotowanie maszyny wirtualnej Bastion

Maszyna bastion posłuży nam do następujących celów:

  • przygotowania plików instalacyjnych do postawienia klastra i wrzucenia ich na maszynę proxy.okdlab.local
  • zarządzania klastrem po jego instalacji
  • tworzenia projektów OpenShift i zarządzanie nimi

Obraz systemu Fedora Server 43 jest do pobrania z tego linku https://fedoraproject.org/server/download.
Po przegraniu na isostore Proxmoxa możemy rozpocząć instalację systemu.

Tworzymy nową maszynę wirtualną o id 4030 i nazwie bastion z podanymi parametrami:

  • Machine : q35, Qemu Agent (włączone)
  • 128 GB HDD, SCSI VirtIO Single, Cache: Write Back
  • 4 vCPU – 1 x Sockets , Type: Host
  • 4 GB RAM , Balloning Device (włączone)
  • Bridge: vmbr4, Model: VirtIO

\

Podajemy nazwę hosta: bastion.okdlab.local

  • ip 192.168.40.30 / 24, brama: 192.168.40.1
  • dns: 192.168.40.10, 192.168.8.1
  • sufix domeny: okdlab.local

Ustawiamy hasło dla root-a.
Tworzymy także nowego użytkownika: bastuser

Wybieramy w Software selection: Guest Agent

Upewniamy się co do:

  • ustawień sieci
  • ustawień kont root+bastuser
  • ustawień lokalizacji i czasu
  • wybranego oprogramowania

Kroki po instalacji

logujemy się na maszynie bastion jako bastuser i przeprowadzamy wszelkie administracyjne operacje przez sudo.

Instalacja środowiska graficznego Xfce

W dalszych etapach konfiguracji klastra konieczne będzie skorzystanie z przeglądarki www uruchomionej na maszynie bastion z bezpośrednim dostępem do klastra. Więcej informacji o samym Xfce https://fedoraproject.org/wiki/Xfce

sudo dnf install @xfce-desktop-environment
# automatyczne uruchomienie środowiska graficznego
sudo systemctl set-default graphical.target
# włączenie dostępu zdalnego przez protokół rdp np. ze stacji Windows
sudo dnf install -y xrdp tigervnc-server
sudo systemctl enable xrdp --now
# zezwolenie na połączenia na porcie 3389
sudo firewall-cmd --permanent --add-port=3389/tcp
sudo firewall-cmd --reload
# przygotowanie automatycznego uruchamiania sesji Xfce dla aktualnego użytkownika
vim ~/startwm.sh
#!/bin/sh
dbus-launch --exit-with-session /usr/bin/startxfce4
# nadanie uprawnień
sudo chmod 755 ~/startwm.sh
sudo reboot

W razie problemów z połączeniem zajrzeć do logów

sudo tail -f /var/log/xrdp.log
sudo tail -f /var/log/xrdp-sesman.log

Jeśli połączenie przez protokół rdp działa poprawnie to instalujemy przeglądarkę chromium.
Więcej informacji o instalacji chrome w systemie Fedora https://docs.fedoraproject.org/en-US/quick-docs/installing-chromium-or-google-chrome-browsers/

sudo dnf install chromium

Pobranie instalatora i klienta OpenShift

Aktualne wersje instalatora oraz klienta OpenShift znajdują się tutaj https://github.com/okd-project/okd/releases/

cd /home/bastuser/Downloads
# pobranie wersji 4.19
wget https://github.com/okd-project/okd/releases/download/4.19.0-okd-scos.9/openshift-install-linux-4.19.0-okd-scos.9.tar.gz
wget https://github.com/okd-project/okd/releases/download/4.19.0-okd-scos.9/openshift-client-linux-4.19.0-okd-scos.9.tar.gz

# rozpakowanie archiwum
tar -zxvf openshift-client-linux-4.19.0-okd-scos.9.tar.gz
tar -zxvf openshift-install-linux-4.19.0-okd-scos.9.tar.gz
# skopiowanie binarek do właściwego katalogu
sudo mv kubectl oc openshift-install /usr/local/bin/
# sprawdzenie wersji
bastuser@bastion:~/Downloads$ oc version
Client Version: 4.19.0-okd-scos.9
Kustomize Version: v5.5.0
bastuser@bastion:~/Downloads$ openshift-install version
openshift-install 4.19.0-okd-scos.9
built from commit 249d7428c51fe85cabdab6394c4aed86fc24d398
release image quay.io/okd/scos-release@sha256:20214869bfa5d34e673939c1a3c2a061e8d4040b75e6a75110a07e21eb3f9cc6
release architecture multi
default architecture amd64

Przygotowanie klucza SSH

ssh-keygen

W definicji manifestu Klastra install-config.yaml będziemy używali klucza publicznego z pliku .ssh/id_ed25519.pub

Pobranie pullsecret.txt z RedHat

Logujemy się na portalu https://console.redhat.com/openshift/create/local i pobieramy pull secret.

Przygotowanie manifestu Kubernetes dla klastra OKD

# tworzymy katalog dla plików roboczych
mkdir -p /home/bastuser/install_dir/
# tworzymy konfigurację dla manifestu Kubernetes
nano /home/bastuser/install_dir/install-config.yaml

W pole sshKey należy wkleić zawartość /home/bastuser/.ssh/id_ed25519.pub
W pole pullSecret należy wkleić dokładnie całą zawartość pullsecret

apiVersion: v1
baseDomain: okdlab.local
metadata:
  name: testcluster
platform:
  none: {}
pullSecret: '{"auths":{"cloud.openshift.com":{"auth":"b3BxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdVTlVEOQ==","email":"[email protected]"},"quay.io":{"auth":"b3BxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdVTlVEOQ==","email":"[email protected]"},"registry.connect.redhat.com":{"auth":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxx==","email":"[email protected]"},"registry.redhat.io":{"auth":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==","email":"[email protected]"}}}'
sshKey: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDGy5Fc6Dl8m3cezP5nNOq2jHPTyNJFJdeY+AQ7awOqP [email protected]'
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
networking:
  clusterNetwork:
  - cidr: 10.128.0.0/14
    hostPrefix: 23
  networkType: OVNKubernetes
  serviceNetwork:
  - 172.30.0.0/16
fips: false

Wykonujemy kopię powyższego pliku, gdyby była potrzeba powtórzenia tworzenia manifestu.

cp /home/bastuser/install_dir/install-config.yaml /home/bastuser/install_dir/install-config.yaml.bak

Tworzymy manifest Kubernetes

cd /home/bastuser
openshift-install create manifests --dir=install_dir/

Przygotowanie konfiguracji ignitions

Należy wyłączyć scheduling dla podów na workerach czyli maszynach wirtualnych control-plane-x

cd /home/bastuser
sed -i 's/mastersSchedulable: true/mastersSchedulable: False/' install_dir/manifests/cluster-scheduler-02-config.yml

Teraz można przygotować konfigurację ignitions

cd /home/bastuser
openshift-install create ignition-configs --dir=install_dir/

Katalog install_dir powinien wyglądać mniejwięcej tak.

OpenShift, ignition-configs odnoszą się do plików konfiguracyjnych Ignition używanych podczas wdrażania i inicjalizacji klastrów OpenShift, szczególnie w OpenShift Container Platform 4.x. Ignition to narzędzie provisioningowe używane przez CoreOS (obecnie Fedora CoreOS i RHEL CoreOS), które są systemami operacyjnymi zaprojektowanymi specjalnie dla środowisk kontenerowych.

Te pliki konfiguracyjne Ignition odgrywają kluczową rolę w automatyzacji konfiguracji i konfiguracji węzłów klastra podczas procesu instalacji.

Kluczowe punkty dotyczące Ignition-Configs

Cel:

Ignition-configs definiują sposób konfiguracji węzłów w klastrze OpenShift (np. bootstrap, płaszczyzna sterowania i węzły obliczeniowe) podczas uruchamiania.
Określają działania, takie jak konfiguracja pamięci masowej, konfiguracja sieci, zapisywanie plików i stosowanie konfiguracji systemd.
Generowane przez instalator:

Podczas procesu instalacji OpenShift narzędzie openshift-install generuje pliki konfiguracyjne Ignition na podstawie określonych ustawień klastra.

Trzy kluczowe pliki Ignition:

bootstrap.ign:
Służy do konfigurowania węzła bootstrap, który odgrywa kluczową rolę podczas początkowej konfiguracji klastra (np. bootstrapping płaszczyzny sterowania).
master.ign:
Służy do konfigurowania węzłów płaszczyzny sterowania (masterów), które zarządzają podstawowymi komponentami klastra i API.
worker.ign:
Służy do konfigurowania węzłów roboczych, które uruchamiają obciążenia aplikacji (pody).

Udostępnienie konfiguracji do instalacji klastra przez serwer www na maszynie proxy

Logujemy się z maszyny bastion na maszynę proxy i zakładamy katalog okd4 oraz kopiujemy pliki z katalogu install_dir

bastuser@bastion:

ssh [email protected] "mkdir -p /var/www/html/okd4"
scp -r /home/bastuser/install_dir/* [email protected]:/var/www/html/okd4/
ssh [email protected] "chown -R apache: /var/www/html/ && chmod -R 755 /var/www/html/"

# test dostepnosci plikow przez serwer www
bastuser@bastion:~/install_dir$ curl -s http://192.168.40.15:8080/okd4/metadata.json | jq '.'
{
  "clusterName": "testcluster",
  "clusterID": "d9799c84-bf73-4277-a359-0e72971ada93",
  "infraID": "testcluster-h8zp5",
  "featureSet": "",
  "customFeatureSet": null
}

Pobranie obrazu systemu CentosOS Stream 9 właściwego dla OKD 4.19 z https://cloud.centos.org/centos/scos/9/prod/streams/9.0.20250510-0/x86_64/ na maszynę proxy potrzebnego podczas instalacji maszyn klastra OKD.

ssh [email protected] "mkdir -p /var/www/html/okd4 && cd /var/www/html/okd4 && wget -O scos.raw.gz 'https://cloud.centos.org/centos/scos/9/prod/streams/9.0.20250510-0/x86_64/scos-9.0.20250510-0-metal.x86_64.raw.gz' && chown -R apache: /var/www/html/ && find /var/www/html -type d -exec chmod 755 {} \; && find /var/www/html -type f -exec chmod 644 {} \;"

Maszyna proxy jest teraz gotowa do serwowania plików instalacyjnych przez http potrzebnych do zbudowania klastra.

LPNazwa DNSAdres ipvCPUvRAMvHDDSystem OperacyjnyFunkcja
1dns1.okdlab.local192.168.40.1022 GB16 GBFedora Server 43DNS dla klastra
2proxy.okdlab.local192.168.40.1522 GB16 GBFedora Server 43HAProxy / Load balancer / instalacja
3storage.okdlab.local192.168.40.2022 GB16/64/128 GBFedora Server 43Storage NFS dla klastra, registry OpenShift
4database-1.okdlab.local192.168.40.2524 GB32 GBFedora Server 43Serwer baz danych PostgreSQL
5database-2.okdlab.local192.168.40.2624 GB32 GBFedora Server 43Serwer baz danych MariaDB
6bastion.okdlab.local192.168.40.3044 GB128 GBFedora Server 43Instalacja i zarządzanie klastrem OKD
7gitea.okdlab.local192.168.40.3548 GB256 GBFedora Server 43Gitea
8jenkins.okdlab.local192.168.40.37816 GB256 GBFedora Server 43Jenkins
9bootstrap.testcluster.okdlab.local192.168.40.50416 GB128 GBCentosOS Stream 9Bootstrap node
10control-plane-1.testcluster.okdlab.local192.168.40.51416 GB128 GBCentosOS Stream 9Master node
11control-plane-2.testcluster.okdlab.local192.168.40.52416 GB128 GBCentosOS Stream 9Master node
12control-plane-3.testcluster.okdlab.local192.168.40.53416 GB128 GBCentosOS Stream 9Master node
13compute-1.testcluster.okdlab.local192.168.40.61416 GB256 GBCentosOS Stream 9Worker node
14compute-2.testcluster.okdlab.local192.168.40.62416 GB256 GBCentosOS Stream 9Worker node
15compute-3.testcluster.okdlab.local192.168.40.63416 GB256 GBCentosOS Stream 9Worker node