在兩台實體機上以 KVM/QEMU 部署生產級 OKD 4.4 叢集
Bare metal OpenShift-upstream cluster for learning & lab use
Internet
│
[pfSense] WAN: <home-network> / LAN: 192.168.1.1
│
├── 192.168.1.0/24 (OKD VLAN)
│ ├── [services] 192.168.1.210 DNS · HAProxy · Apache · NFS
│ ├── [bootstrap] 192.168.1.200 Fedora CoreOS
│ ├── [master1-3] 192.168.1.201-203
│ └── [worker1-2] 192.168.1.204-205
pfSense DHCP → MAC 靜態對應 → 固定 IP| Node | Role | OS | vCPU | RAM | Storage | IP |
|---|---|---|---|---|---|---|
bootstrap | Bootstrap | Fedora CoreOS | 4 | 16G | 120G | 192.168.1.200 |
master1 | Master | Fedora CoreOS | 4 | 16G | 120G | 192.168.1.201 |
master2 | Master | Fedora CoreOS | 4 | 16G | 120G | 192.168.1.202 |
master3 | Master | Fedora CoreOS | 4 | 16G | 120G | 192.168.1.203 |
worker1 | Worker | Fedora CoreOS | 2 | 8G | 120G | 192.168.1.204 |
worker2 | Worker | Fedora CoreOS | 2 | 8G | 120G | 192.168.1.205 |
services | DNS/LB/NFS | CentOS 7 | 2 | 2G | 20+100G | 192.168.1.210 |
pfsense | Router | FreeBSD | 2 | 1G | 8G | WAN / 192.168.1.1 |
下載所有需要的安裝媒體與 OKD 工具
在兩台實體機(okd1/okd2)設定 SSH key 登入、時區統一、確認外網連線。透過 XQuartz + X11 Forwarding 在本機操作遠端 virt-manager 建立 VM。
建立 pfSense VM(雙網卡:WAN + LAN)。設定 DHCP Static Mapping 確保各節點取得固定 IP;NAT Port Forward 8080/22/6443/443/80 至 services VM。
安裝 DNS(BIND)、HAProxy、Apache(port 8080)、NFS(100G partition)。時區需與 KVM 主機一致,否則 openshift-installer 產生的 TLS cert 會有問題。
設定 install-config.yaml(填入 pull secret + SSH pubkey),產生 manifests,修改 mastersSchedulable: false,產生 ignition configs,複製到 Apache web root。
依序啟動 bootstrap → master1-3 → worker1-2。每台 VM 開機按 TAB 輸入 coreos.inst.* 參數指向 Apache 上的 ignition URL 與 FCOS image URL。
建立 Image Registry PV(NFS 100Gi)、設定 HTPasswd 認證、監控儲存(Prometheus/Alertmanager),登入 Web Console 驗收。
coreos.inst.install_dev=/dev/sda coreos.inst.image_url=http://192.168.1.210:8080/okd4/fcos.raw.xz coreos.inst.ignition_url=http://192.168.1.210:8080/okd4/bootstrap.ign
openshift-install --dir=install_dir/ \ wait-for-bootstrap-complete \ --log-level=debug
export KUBECONFIG=~/install_dir/auth/kubeconfig
oc get csr -ojson | \
jq -r '.items[] |
select(.status == {}) |
.metadata.name' | \
xargs oc adm certificate approveoc get nodes # 全部 Ready oc get clusteroperators # AVAILABLE: True
# non-privileged nginx for OpenShift FROM nginx:stable RUN chmod g+rwx \ /var/cache/nginx \ /var/run \ /var/log/nginx # OKD 不允許監聽 privileged port RUN sed -i.bak \ 's/listen\(.*\)80;/listen 8081;/' \ /etc/nginx/conf.d/default.conf EXPOSE 8081
# 建立應用 oc new-app \ jimc1682000/okd4-nginx # expose service oc expose svc/okd4-nginx # 查看路由 oc get route okd4-nginx # 進入 pod oc exec -it \ $(oc get pod -l app=okd4-nginx \ -o name) -- /bin/sh
Services VM 時區必須與 KVM host 完全一致,否則 openshift-installer 產生的 TLS cert 時間有誤,bootstrap 永遠無法完成。
CentOS 7 的 HAProxy 重啟時會觸發 NetworkManager 重置網路,需停用 NM 改用靜態 ifcfg 設定。
Worker node 加入需簽署兩輪 CSR:第一輪是 openshift-machine-config-operator 的,第二輪才是 worker 本身。
openshift-install 產生 manifests 後會自動刪除 install-config.yaml,務必在執行前先備份。
OKD pod 以任意 UID 執行,nginx 需從 port 80 改為 8081+ 並開放 /var/cache/nginx 等目錄的 group 寫入。
wait-for-bootstrap-complete 顯示 complete 後,需立刻從 HAProxy cfg 移除 bootstrap backend 再重啟,否則 API 健康檢查會持續失敗。