Klaster OKD 4.19 (OpenShift) na Proxmox 9 – PostgreSQL baza danych dla aplikacji OpenShift

Opis klastra OKD OpenShift 4.19

Opis klastra OKD można znaleźć we wpisie https://itadmin.vblog.ovh/klaster-okd-4-19-openshift-na-proxmox-9-opis-instalacjii-konfiguracji/

Rola maszyny database-1 w klastrze OKD OpenShift 4.19

Maszyna database-1 będzie pełniła rolę silnika bazo danowego dla aplikacji OpenShift na klastrze OKD 4.19.

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

Przygotowanie maszyny wirtualnej database-1 (4025) w Proxmox 9 GUI

Minimalne wymagania PostgreSQL to 1 procesor / 2 GB RAM. Na potrzeby homelab i aplikacji OpenShift zdefiniowana parametry:

  • 2 x vCPU
  • 4 GB vRAM
  • 32 GB vHDD

W oknie instalatora podajemy parametry:

  • ipv4 192.168.40.25/24 , brama 192.168.40.1 , dns: 192.168.40.10 , search domains: okdlab.local
  • włączamy konto roota
  • wybieramy minimalny zestaw narzędzie w Software Selection (Fedora Custom Operating System)
  • installation destination domyślnie
  • time & date Europe/Warsaw

Przygotowanie maszyny wirtualnej database-1 do pracy po zakończeniu instalacji

Po zakończonej instalacji, przed instalacją PostgreSQL warto odpowiednio przygotować maszynę database-1 do pracy wg. opisu na stronie:

Instalacja i konfiguracja PostgreSQL na maszynie database-1

# Instalacja PostgreSQL na Fedora Server 43
sudo dnf update -y
sudo dnf install -y postgresql-server postgresql-contrib

# Na rodzinie Red Hat/Fedora instalacja zwykle nie inicjalizuje bazy automatycznie
sudo postgresql-setup --initdb
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager

Ustaw listen_addresses (czyli: na czym PostgreSQL ma nasłuchiwać)
sudo nano /var/lib/pgsql/data/postgresql.conf

listen_addresses = '*'
port = 5432

Ustaw reguły dostępu w pg_hba.conf (najważniejszy etap bezpieczeństwa), Na dole sekcja # LAN klastra.
sudo nano /var/lib/pgsql/data/pg_hba.conf7

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

# LAN klastra
host    all             all             192.168.40.0/24         scram-sha-256

Konfiguracja firewall i SELinux

# Restart PostgreSQL po zmianach
sudo systemctl restart postgresql
sudo systemctl status postgresql --no-page

# Sprawdź, czy słucha na porcie:
ss -lntp | grep 54

# Otwórz port w firewalld (Fedora firewall)
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --reload

# SELinux
sudo semanage port -a -t postgresql_port_t -p tcp 5433

Więcej przydatnych informacji:

Fedora Docs – Setting up PostgreSQL Database Server:
https://docs.fedoraproject.org/en-US/fedora-server/services/postgresql-setup/

Fedora Docs – Quick Docs PostgreSQL:
https://docs.fedoraproject.org/en-US/quick-docs/postgresql/

PostgreSQL docs – pg_hba.conf:
https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

Firewalld docs – open a port/service:
https://firewalld.org/documentation/howto/open-a-port-or-service.html

Przykładowa baza danych dba_users

Założenie bazy dba_users i tabeli users.

[root@database-1 ~]# sudo -iu postgres psql

-- 1) baza danych
CREATE DATABASE dba_users;

-- 2) przełącz się na nową bazę
 \c dba_users
You are now connected to database "dba_users" as user "postgres".

-- 3) tabela users
 CREATE TABLE public.users (
  user_id       int GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  user_name     varchar(64) NOT NULL,
  user_email    varchar(64) NOT NULL,
  user_created  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  user_age      int
);

-- (opcjonalnie) unikalny email (częsta praktyka)
CREATE UNIQUE INDEX users_user_email_uq ON public.users (user_email);

-- szybki test
INSERT INTO public.users (user_name, user_email, user_age)
VALUES ('Jan Kowalski', '[email protected]', 30);

--- podgląd danych
SELECT * FROM public.users;

--- lista wszystkich baz danych
\l
                                                     List of databases
   Name    |  Owner   | Encoding | Locale Provider |   Collate   |    Ctype    | Locale | ICU Rules |   Access privileges
-----------+----------+----------+-----------------+-------------+-------------+--------+-----------+-----------------------
 dba_users | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |        |           |
 postgres  | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |        |           |
 template0 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |        |           | =c/postgres          +
           |          |          |                 |             |             |        |           | postgres=CTc/postgres
 template1 | postgres | UTF8     | libc            | en_US.UTF-8 | en_US.UTF-8 |        |           | =c/postgres          +
           |          |          |                 |             |             |        |           | postgres=CTc/postgres

Nadanie wybranych uprawnień użytkownikowi usr_editor do bazy dba_users

sudo -iu postgres psql

-- 1) utwórz użytkownika z hasłem
CREATE ROLE usr_editor
  WITH LOGIN
  PASSWORD '1234abcd!';

-- 2) (zalecane) ogranicz go do tylko tej bazy:
-- pozwól się łączyć do bazy dba_users
GRANT CONNECT ON DATABASE dba_users TO usr_editor;

-- 3) przejdź do bazy, bo uprawnienia do tabel nadaje się "w kontekście bazy"
\c dba_users

-- 4) pozwól korzystać ze schematu public (bez tego często nie zadziała dostęp do tabel)
GRANT USAGE ON SCHEMA public TO usr_editor;

-- 5) CRUD na tabeli users (bez DROP/ALTER/TRUNCATE itd.)
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE public.users TO usr_editor;

-- 6) jeśli kiedykolwiek użyjesz SERIAL albo sekwencje: dla IDENTITY zwykle nie musisz,
-- ale bywa przydatne jawne przyznanie uprawnień do sekwencji (nie zaszkodzi):
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO usr_editor;

Weryfikacja połączenia zdalnego z bazą danych dba_users

Poniższy przykład instalacji postgresql dotyczy Fedora Server 43.

sudo dnf install -y postgresql

[bastuser@bastion ~]$ psql -h 192.168.40.25 -U usr_editor -d dba_users
Password for user usr_editor:
psql (18.1)
Type "help" for help.

dba_users=> SELECT * FROM users;
 user_id |  user_name   |   user_email    |        user_created        | user_age
---------+--------------+-----------------+----------------------------+----------
       1 | Jan Kowalski | [email protected] | 2026-02-12 19:40:26.315788 |       30
(1 row)

Powiązane projekty OpenShift i aplikacje