1 2 3 4 5 作者:李晓辉 微信:Lxh_Chat 邮箱:xiaohui_li@foxmail.com 
角色 IP 主机名 CPU 内存 操作系统 OpenShift 版本 DHCP、NTP、DNS、HAProxy、TFTP、HTTPD 192.168.8.200 content.cluster1.xiaohui.cn 4-8核心 8G RHEL9.6 4.18.15 bootstrap 192.168.8.201 bootstrap.cluster1.xiaohui.cn 4-8核心 16G rhcos 4.18.15 master 192.168.8.202 master0.cluster1.xiaohui.cn 4-8核心 16G rhcos 4.18.15 master 192.168.8.203 master1.cluster1.xiaohui.cn 4-8核心 16G rhcos 4.18.15 master 192.168.8.204 master2.cluster1.xiaohui.cn 4-8核心 16G rhcos 4.18.15 compute0 192.168.8.205 compute0.cluster1.xiaohui.cn 4-8核心 16G rhcos 4.18.15 compute1 192.168.8.206 compute1.cluster1.xiaohui.cn 4-8核心 16G rhcos 4.18.15 
请务必确保辅助节点的DNS指向自己,不然有可能节点安装期间会报告找不到api-int域名,无法安装
这篇文章介绍了UPI的方式来部署OpenShift 4.18.15,其中涉及到DHCP、TFTP、DNS、HTTP、HAProxy等基础服务的部署和配置,过程较为复杂,每个服务在部署后,都尽量检查一下是否正常工作,再进行下一步的服务部署,避免中间有遗漏造成效果达不到的情况。
部署DHCP服务 本次 OpenShift UPI 部署采用了 DHCP 自动分配 IP  的方式来初始化 Bootstrap、Master 和 Worker 节点,这不仅省去了手动输入复杂的网络信息,还简化了 CoreOS 的安装参数配置。通过 DHCP 绑定固定 IP,再结合 PXE 配置文件,整个过程变得更加 高效、精准 ,不仅减少了人为错误,还使得后续重用配置变得更加轻松。
DHCP 配置概览 
子网范围 :DHCP 运行在 192.168.8.0/24 网络中
IP 分配 :动态范围为 192.168.8.201 - 192.168.8.250
DNS 服务器 :192.168.8.200 提供域名解析
网关 :默认网关设定为 192.168.8.2
识别引导方式 :根据 DHCP 客户端发送的厂商识别代码,决定使用 BIOS 或 UEFI 进行 PXE 引导
PXE 服务器 :客户端接收到网络参数后,会通过 TFTP  连接 192.168.8.200,获取 pxelinux.0 或 grubx64.efi 进行系统启动
在此之前,我配置好了软件仓库,你可以考虑从RHEL9.6的ISO安装软件,这需要你配置yum仓库
1 dnf install dhcp-server -y 
配置文件这里要注意subnet下面的几行,这是我们的工作子网信息与分发地址的信息
下面我为节点做了dhcp地址的预留,这里要注意mac地址必须要和将来的机器保持一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 cat  > /etc/dhcp/dhcpd.conf <<EOF option space PXE; option arch code 93 = unsigned integer 16; # RFC4578 subnet 192.168.8.0 netmask 255.255.255.0 {   range 192.168.8.201 192.168.8.250;   option routers 192.168.8.2;   option domain-name-servers 192.168.8.200;   default-lease-time 600;   max-lease-time 7200;   class "pxeclients" {     match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";     next-server 192.168.8.200;     # 针对不同架构提供正确的引导文件     if option arch = 00:06 {        filename "grubia32.efi"; # UEFI 32-bit (IA32)     } else if option arch = 00:07 {        filename "grubx64.efi"; # UEFI 64-bit (x64)     } else if option arch = 00:08 {        filename "grubx64.efi"; # UEFI 64-bit (x64)     } else if option arch = 00:09 {        filename "grubx64.efi"; # UEFI 64-bit (x64)     } else {        filename "pxelinux.0"; # BIOS 客户端     }   } } # 定义静态主机 host bootstrap {   hardware ethernet 00:50:56:94:8a:21;   fixed-address 192.168.8.201;   server-name "bootstrap.cluster1.xiaohui.cn"; } host master0 {   hardware ethernet 00:50:56:94:07:6d;   fixed-address 192.168.8.202;   server-name "master0.cluster1.xiaohui.cn"; } host master1 {   hardware ethernet 00:50:56:94:5c:7d;   fixed-address 192.168.8.203;   server-name "master1.cluster1.xiaohui.cn"; } host master2 {   hardware ethernet 00:50:56:94:b6:21;   fixed-address 192.168.8.204;   server-name "master2.cluster1.xiaohui.cn"; } host compute0 {   hardware ethernet 00:50:56:94:ce:83;   fixed-address 192.168.8.205;   server-name "compute0.cluster1.xiaohui.cn"; } host compute1 {   hardware ethernet 00:50:56:94:fd:5a;   fixed-address 192.168.8.206;   server-name "compute1.cluster1.xiaohui.cn"; } EOF 
不要忘记启动dhcpd服务以及开通dhcp防火墙
1 2 3 systemctl enable  dhcpd --now firewall-cmd --add-service=dhcp --permanent firewall-cmd --reload 
配置NTP 在 OpenShift UPI 部署中,时间同步  是至关重要的一环,确保所有节点的日志时间一致,避免因时间漂移导致的调度、认证或日志对齐问题。
本次配置采用 ntp.aliyun.com  作为 content.cluster1.xiaohui.cn 的上游时间源,并将 content 机器作为 NTP 服务器,向 192.168.8.0/24  网段内的所有节点提供时间同步服务。这样,每个 OpenShift 节点都能准确获取统一的时间,提高集群的稳定性和一致性。
这种方式的好处:
减少外网依赖 :所有内网节点都从 content 服务器获取时间,不直接访问公网 NTP,降低安全风险。
时间同步统一性 :确保 Master、Worker 以及辅助节点的时间完全一致,防止日志时间错乱。
稳定性与可扩展性 :可以轻松扩展更多节点,而无需额外的时间同步配置。
接下来,可以在 content 机器上配置 Chrony  或 NTP 服务 ,并确保所有 OpenShift 节点都指向它作为时间源。
1 2 3 4 5 6 dnf install chrony -y sed -i '/^pool/a\pool ntp.aliyun.com iburst'  /etc/chrony.conf sed -i '/^# allow/a\allow 192.168.8.0/24'  /etc/chrony.conf systemctl enable  chronyd --now firewall-cmd --add-service=ntp --permanent firewall-cmd --reload 
配置HTTPD 在 PXE 过程中,节点需要通过网络下载 rootfs  以及各个节点的 Ignition 配置文件 ,所以我们需要一个 HTTP 服务器  来托管这些内容。本次部署选择 httpd  作为 Web 服务器,并使用 2000 端口  提供相关文件,以避免端口冲突。
为什么使用 2000 端口? 
这样配置的好处 
✅ 自动化 PXE 部署  —— 节点启动后,自动从 HTTP 服务器获取 rootfs 和 Ignition 配置,无需手动操作。 ✅ 端口规划合理  —— HTTP 服务器不占用 80 端口,避免和 OpenShift 的 Ingress 服务冲突。 ✅ 易于重用  —— 未来扩展其他节点时,只需调整 Ignition 文件,无需手动更改 PXE 配置。
1 2 3 4 dnf install httpd policycoreutils-python-utils -y semanage port -m -t http_port_t -p tcp 2000 mkdir  /contentsed -i 's/Listen 80/Listen 2000/g'  /etc/httpd/conf/httpd.conf 
我这里启用了2000端口,并将内容指向/content
1 2 3 4 5 6 7 8 9 10 11 cat  > /etc/httpd/conf.d/customsite.conf << 'EOF' <VirtualHost *:2000>     ServerName content.cluster.xiaohui.cn     DocumentRoot "/content"  </VirtualHost> <Directory "/content" > <RequireAll>     Require all granted </RequireAll> </Directory> EOF 
启用防火墙
1 2 3 firewall-cmd --add-port=2000/tcp --permanent firewall-cmd --reload systemctl enable  httpd --now 
配置DNS 在 OpenShift UPI 部署中,DNS 配置  影响着整个集群的稳定性和可用性,特别是在 Master API 访问、节点解析以及 Ingress 负载均衡方面。
本次集群的 DNS 规划使用 xiaohui.cn  作为根域,集群名称设定为 cluster1 。由于 DHCP 绑定已经提供了主机名分配,PTR 记录仍然至关重要,它能直接设定主机名,而不依赖 DHCP 解析,确保在一些关键场景(如 IPI 安装)时,主机名称能正确识别。
DNS 角色 功能 content.cluster1.xiaohui.cn material 提供DHCP、HTTP、NTP、HTTP、DNS、TFTP、HAProxy api.cluster1.xiaohui.cn master api 提供openshift master api接口,通常指向负载均衡 api-int.cluster1.xiaohui.cn master api 提供api的内部通信,通常指向负载均衡 *.apps.cluster1.xiaohui.cn APP 应用程序通配符,用于后期集群内的应用暴露,通常指向负载均衡 bootstrap.cluster1.xiaohui.cn bootstrap 用于准备集群,集群就绪后可删除 masterX.cluster1.xiaohui.cn master openshift master服务 computeX.cluster1.xiaohui.cn worker openshift 计算节点服务 
关键 DNS 配置点 
PTR 记录的重要性 :即使 DHCP 绑定了 IP 地址,PTR 记录仍能确保正确的主机名解析,特别是 OpenShift 组件需要 hostname 进行通信。
负载均衡角色 :api.cluster1.xiaohui.cn 和 api-int.cluster1.xiaohui.cn 需要指向负载均衡,以保证 OpenShift API 的高可用性。
应用域名规则 :*.apps.cluster1.xiaohui.cn 允许未来所有 OpenShift 部署的应用暴露到外部,而不需要单独设置每个应用的 DNS 记录。
优化建议 
✅ 保证 API 解析稳定性 ——建议 api.cluster1.xiaohui.cn 和 api-int.cluster1.xiaohui.cn 采用 A 记录  指向负载均衡或使用 CNAME  以提高灵活性。 ✅ 应用域通配符管理 ——通过 *.apps.cluster1.xiaohui.cn 处理所有应用访问,简化配置,支持动态应用扩展。 ✅ 反向解析(PTR 记录) ——提前设定各个节点的 PTR 记录,让日志、认证、集群组件能够正确识别主机名,减少解析错误。
在DNS的配置文件中,我们工作在本机的所有IP地址上,并允许所有人来查询DNS记录,同时开启了转发器,有其他查询时,发给114.114.114.114,关闭了dnssec验证
1 dnf install bind  bind-utils -y 
1 2 3 4 sed -i 's/listen-on port 53 { 127.0.0.1; }/listen-on port 53 { any; }/g'  /etc/named.conf sed -i 's/allow-query     { localhost; };/allow-query     { any; };/g'  /etc/named.conf sed -i '/recursion yes;/a\        forward first;\n        forwarders { 114.114.114.114; };'  /etc/named.conf sed -i 's/dnssec-validation yes;/dnssec-validation no;/'  /etc/named.conf 
这里我们为cluster1.xiaohui.cn域名提供了正向和反向解析
1 2 3 4 5 6 7 8 9 10 11 cat  >> /etc/named.rfc1912.zones <<EOF zone "cluster1.xiaohui.cn" IN {         type master;         file "cluster1.xiaohui.cn.zone"; }; zone "8.168.192.in-addr.arpa" IN {         type master;         file "cluster1.xiaohui.cn.ptr"; }; EOF 
以下是区域文件中具体的解析内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 cat  > /var/named/cluster1.xiaohui.cn.zone <<'EOF' $TTL  1W@       IN      SOA     ns1.cluster1.xiaohui.cn. root.cluster1.xiaohui.cn (                         1               ; serial                         3H              ; refresh (3 hours)                         30M             ; retry (30 minutes)                         2W              ; expiry (2 weeks)                         1W )            ; minimum (1 week)         IN      NS      ns1.cluster1.xiaohui.cn. ns1.cluster1.xiaohui.cn.         IN      A       192.168.8.200 content.cluster1.xiaohui.cn.     IN      A       192.168.8.200 api.cluster1.xiaohui.cn.         IN      A       192.168.8.200 api-int.cluster1.xiaohui.cn.     IN      A       192.168.8.200 *.apps.cluster1.xiaohui.cn.      IN      A       192.168.8.200 bootstrap.cluster1.xiaohui.cn.   IN      A       192.168.8.201 master0.cluster1.xiaohui.cn.     IN      A       192.168.8.202 master1.cluster1.xiaohui.cn.     IN      A       192.168.8.203 master2.cluster1.xiaohui.cn.     IN      A       192.168.8.204 compute0.cluster1.xiaohui.cn.    IN      A       192.168.8.205 compute1.cluster1.xiaohui.cn.    IN      A       192.168.8.206 EOF cat  > /var/named/cluster1.xiaohui.cn.ptr <<'EOF' $TTL  1W@       IN      SOA     ns1.cluster1.xiaohui.cn. root.cluster1.xiaohui.cn (                         1               ; serial                         3H              ; refresh (3 hours)                         30M             ; retry (30 minutes)                         2W              ; expiry (2 weeks)                         1W )            ; minimum (1 week)         IN      NS      ns1.cluster1.xiaohui.cn. 200.8.168.192.in-addr.arpa.     IN      PTR     ns1.cluster1.xiaohui.cn. 200.8.168.192.in-addr.arpa.     IN      PTR     content.cluster1.xiaohui.cn. 200.8.168.192.in-addr.arpa.     IN      PTR     api.cluster1.xiaohui.cn. 200.8.168.192.in-addr.arpa.     IN      PTR     api-int.cluster1.xiaohui.cn. 201.8.168.192.in-addr.arpa.     IN      PTR     bootstrap.cluster1.xiaohui.cn. 202.8.168.192.in-addr.arpa.     IN      PTR     master0.cluster1.xiaohui.cn. 203.8.168.192.in-addr.arpa.     IN      PTR     master1.cluster1.xiaohui.cn. 204.8.168.192.in-addr.arpa.     IN      PTR     master2.cluster1.xiaohui.cn. 205.8.168.192.in-addr.arpa.     IN      PTR     compute0.cluster1.xiaohui.cn. 206.8.168.192.in-addr.arpa.     IN      PTR     compute1.cluster1.xiaohui.cn.  EOF 
这里要注意把区域文件的owner和group设置为named
1 2 3 4 chown  named:named /var/named -Rsystemctl enable  named --now firewall-cmd --add-service=dns --permanent firewall-cmd --reload 
配置TFTP 在 OpenShift UPI 部署中,TFTP 服务是 PXE 启动  的关键环节之一,它负责让客户端在 获取 DHCP IP  后,能够从指定的 next-server  下载所需的 内核、驱动  和 PXE 配置文件 ,确保节点能正确引导系统。
TFTP 作用 
为了确保 PXE 启动的顺利进行,我们在 content.cluster1.xiaohui.cn 机器上安装 TFTP 服务:
1 2 3 4 5 dnf install tftp-server -y systemctl enable  tftp.service --now systemctl enable  tftp.socket --now firewall-cmd --add-service=tftp --permanent firewall-cmd --reload 
下载安装资料 以下连接可以确保你下载到最新版本的openshift安装资料
1 2 3 4 5 6 wget -O /content/openshift-client-linux.tar.gz https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/stable/openshift-client-linux.tar.gz tar Cxvf /usr/local/bin/ /content/openshift-client-linux.tar.gz wget -O /content/rhcos-live.x86_64.iso https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/latest/rhcos-live.x86_64.iso wget -O /var/lib/tftpboot/rhcos-live-kernel-x86_64 https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/latest/rhcos-live-kernel-x86_64 wget -O /var/lib/tftpboot/rhcos-live-initramfs.x86_64.img https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/latest/rhcos-live-initramfs.x86_64.img wget -O /content/rhcos-live-rootfs.x86_64.img https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/latest/rhcos-live-rootfs.x86_64.img 
准备PXE文件 将pxelinux.0、grubx64.efi、kernel、initramfs等资料复制到tftp供客户端拿取,以及创建pxe所需的引导配置文件和目录
1 2 3 4 5 6 mkdir  /var/lib/tftpboot/pxelinux.cfgdnf install syslinux -y cp  /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/mount /content/rhcos-live.x86_64.iso /opt cp  /opt/isolinux/* /var/lib/tftpbootcp  /boot/efi/EFI/redhat/grubx64.efi /var/lib/tftpboot/
BIOS 启动:
文件里的ip=后面的内容可以直接改成ip=dhcp,省的写那么多,你还猜不到对方网卡名叫啥,不过能按照这个写是最好的,实在不行你就安装一个虚拟机,进去看看它在你电脑上跑起来,硬盘名和网卡名叫啥也可以的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 cat  > /var/lib/tftpboot/pxelinux.cfg/default <<EOF UI vesamenu.c32 TIMEOUT 20 PROMPT 0 LABEL bootstrap     menu label bootstrap     KERNEL rhcos-live-kernel-x86_64     APPEND initrd=rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/bootstrap.ign ip=192.168.8.201::192.168.8.2:255.255.255.0:bootstrap.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200 LABEL master0     menu label master0     KERNEL rhcos-live-kernel-x86_64     APPEND initrd=rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/master.ign ip=192.168.8.202::192.168.8.2:255.255.255.0:master0.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200 LABEL master1     menu label master1     KERNEL rhcos-live-kernel-x86_64     APPEND initrd=rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/master.ign ip=192.168.8.203::192.168.8.2:255.255.255.0:master1.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200 LABEL master2     menu label master2     KERNEL rhcos-live-kernel-x86_64     APPEND initrd=rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/master.ign ip=192.168.8.204::192.168.8.2:255.255.255.0:master2.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200 LABEL compute0     menu label compute0     KERNEL rhcos-live-kernel-x86_64     APPEND initrd=rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/worker.ign ip=192.168.8.205::192.168.8.2:255.255.255.0:compute0.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200 LABEL compute1     menu label compute1     KERNEL rhcos-live-kernel-x86_64     APPEND initrd=rhcos-live-initramfs.x86_64.img coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/worker.ign ip=192.168.8.206::192.168.8.2:255.255.255.0:compute1.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200 EOF 
1 2 restorecon -RvF /var/lib/tftpboot/ chmod  a+rx /var/lib/tftpboot -R
UEFI 启动:
文件里的ip=后面的内容可以直接改成ip=dhcp,省的写那么多,你还猜不到对方网卡名叫啥,不过能按照这个写是最好的,实在不行你就安装一个虚拟机,进去看看它在你电脑上跑起来,硬盘名和网卡名叫啥也可以的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 cat  > /var/lib/tftpboot/grub.cfg <<EOF set timeout=10   menuentry 'bootstrap' {   linuxefi rhcos-live-kernel-x86_64 coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/bootstrap.ign ip=192.168.8.201::192.168.8.2:255.255.255.0:bootstrap.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200   initrdefi rhcos-live-initramfs.x86_64.img }   menuentry 'master0' {   linuxefi rhcos-live-kernel-x86_64 coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/master.ign ip=192.168.8.202::192.168.8.2:255.255.255.0:master0.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200   initrdefi rhcos-live-initramfs.x86_64.img }   menuentry 'master1' {   linuxefi rhcos-live-kernel-x86_64 coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/master.ign ip=192.168.8.203::192.168.8.2:255.255.255.0:master1.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200   initrdefi rhcos-live-initramfs.x86_64.img }   menuentry 'master2' {   linuxefi rhcos-live-kernel-x86_64 coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/master.ign ip=192.168.8.204::192.168.8.2:255.255.255.0:master2.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200   initrdefi rhcos-live-initramfs.x86_64.img }   menuentry 'compute0' {   linuxefi rhcos-live-kernel-x86_64 coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/worker.ign ip=192.168.8.205::192.168.8.2:255.255.255.0:compute0.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200   initrdefi rhcos-live-initramfs.x86_64.img }   menuentry 'compute1' {   linuxefi rhcos-live-kernel-x86_64 coreos.live.rootfs_url=http://192.168.8.200:2000/rhcos-live-rootfs.x86_64.img coreos.inst.install_dev=/dev/sda coreos.inst.ignition_url=http://192.168.8.200:2000/bootstrap.ign ip=192.168.8.206::192.168.8.2:255.255.255.0:compute1.cluster1.xiaohui.cn:ens192:none nameserver=192.168.8.200   initrdefi rhcos-live-initramfs.x86_64.img } EOF 
1 2 chmod  a+rx /var/lib/tftpboot -Rrestorecon -RvF /var/lib/tftpboot/ 
配置HAProxy 在 OpenShift 的多节点环境中,负载均衡  扮演着至关重要的角色,确保集群的各个组件能够稳定、高效地进行通信。根据前面的 DNS 配置 ,我们可以看到 API 和 Ingress 需要一个 可靠的负载均衡器  来处理流量,而本次部署选择 HAProxy  作为前端负载均衡机制。
为什么选择 HAProxy? 
✅ 高可用性  —— HAProxy 能够自动分发请求,避免单点故障,提高系统稳定性。 ✅ 流量管理能力强  —— 通过细粒度的配置,可以针对不同类型的流量(API、Ingress)进行优化。 ✅ 简单且灵活  —— 与 OpenShift 配合良好,支持 TLS 终止、健康检查等企业级功能。
负载均衡的关键点 
ok,那我们来完成安装和配置
端口规划在 OpenShift 部署中至关重要,确保各个组件能够顺利通信,同时避免端口冲突影响功能运行。以下是本次配置的关键端口用途:
6443 端口  —— 提供 API 服务器  访问,集群管理与 Kubernetes 操作均通过此端口完成。
22623 端口  —— 负责 新节点引导 ,当 Master 或 Worker 节点加入集群时,它们会从该端口获取必要的 Ignition 配置文件 ,确保启动参数正确。
80 / 443 端口  —— 用于 Ingress 路由 ,所有 OpenShift 运行的应用流量通过这些端口提供对外访问。
2000 端口  —— 由于 80 端口用于 Ingress,我们的 PXE 相关 HTTP 服务(提供 rootfs 和 Ignition 文件)选择了 2000 端口  避免冲突。
这种 合理的端口规划  确保了: ✅ 集群节点能够正确启动  —— 22623 端口提供 Ignition 使新节点完成初始化。 ✅ API 请求稳定  —— 6443 端口为所有 OpenShift API 交互提供高可用性。 ✅ 应用流量无冲突  —— 80/443 端口专门用于 Ingress,保证业务正常运行。 ✅ PXE 过程自动化  —— 2000 端口独立提供安装文件,不影响 OpenShift 其他服务。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 cat  > /etc/haproxy/haproxy.cfg <<'EOF' global   log          127.0.0.1 local2   pidfile     /var/run/haproxy.pid   maxconn     4000   daemon defaults   mode                    http   log                      global   option                  dontlognull   option http-server-close   option                  redispatch   retries                 3   timeout  http-request    10s   timeout  queue           1m   timeout  connect         10s   timeout  client          1m   timeout  server          1m   timeout  http-keep-alive 10s   timeout  check           10s   maxconn                 3000 frontend stats   bind  *:1936   mode            http   log              global   maxconn 10   stats enable    stats hide-version   stats refresh 30s   stats show-node   stats show-desc Stats for  cluster   stats auth admin:admin   stats uri /stats listen api-server-6443   bind  *:6443   mode tcp   server bootstrap bootstrap.cluster1.xiaohui.cn:6443 check inter 1s   server master0 master0.cluster1.xiaohui.cn:6443 check inter 1s   server master1 master1.cluster1.xiaohui.cn:6443 check inter 1s   server master2 master2.cluster1.xiaohui.cn:6443 check inter 1s listen machine-config-server-22623   bind  *:22623   mode tcp   server bootstrap bootstrap.cluster1.xiaohui.cn:22623 check inter 1s   server master0 master0.cluster1.xiaohui.cn:22623 check inter 1s   server master1 master1.cluster1.xiaohui.cn:22623 check inter 1s   server master2 master2.cluster1.xiaohui.cn:22623 check inter 1s listen ingress-router-443   bind  *:443   mode tcp   balance source    server compute0 compute0.cluster1.xiaohui.cn:443 check inter 1s   server compute1 compute1.cluster1.xiaohui.cn:443 check inter 1s listen ingress-router-80   bind  *:80   mode tcp   balance source    server compute0 compute0.cluster1.xiaohui.cn:80 check inter 1s   server compute1 compute1.cluster1.xiaohui.cn:80 check inter 1s EOF 
为了让haproxy能正常工作,我们授权一下端口信息,并开通相对应的防火墙
1 for  port in  1936 6443 22623 443 80;do  semanage port -a -t http_port_t -p tcp $port ;done 
1 2 3 systemctl enable  haproxy --now for  port in  1936 6443 22623 443 80;do  firewall-cmd --add-port=$port /tcp --permanent;done firewall-cmd --reload 
配置SSH密钥 在 CoreOS 中,默认 不提供用户名和密码登录 ,而是完全依赖 SSH 密钥  进行身份验证。这种方式更加安全,也符合现代云原生操作系统的最佳实践。为了顺利登录,我们需要 生成 SSH 公私钥对 ,并将公钥配置到 CoreOS 服务器。
1 2 3 ssh-keygen -t ed25519 -N ''  -f /root/.ssh/id_ed25519 eval  "$(ssh-agent -s) " ssh-add /root/.ssh/id_ed25519 
配置私有仓库 如果你的环境可以直接连接互联网,就不需要做这一步,只有在你的机器不能连接互联网时,才需要做私有仓库步骤,将镜像都下载到私有仓库中,然后再从私有仓库来完成我们离线节点的安装
请自行生成这里所需的证书,可参考证书签发 
以下是我本次的私有仓库信息:
用户名:admin 密码:lixiaohui 主机名:content.cluster1.xiaohui.cn 将私有仓库数据存放在/data中
1 2 mkdir  /datadnf install podman jq -y 
下载本地容器镜像仓库
1 2 wget https://mirror.openshift.com/pub/cgw/mirror-registry/latest/mirror-registry-amd64.tar.gz tar Cvxf /usr/local/bin mirror-registry-amd64.tar.gz 
完成对自己的密钥信任
1 2 cat  /root/.ssh/id_ed25519.pub >> /root/.ssh/authorized_keysssh-copy-id root@content.cluster1.xiaohui.cn 
完成quay容器仓库的部署
1 2 3 4 mirror-registry install --initPassword lixiaohui --initUser admin \ --quayHostname content.cluster1.xiaohui.cn --quayRoot /data \ --ssh-key /root/.ssh/id_ed25519 --sslCert /etc/pki/tls/certs/xiaohui.cn.crt \ --sslKey /etc/pki/tls/private/xiaohui.cn.key --targetHostname content.cluster1.xiaohui.cn 
quay默认工作在8443端口,别忘了开防火墙
1 2 firewall-cmd --add-port=8443/tcp --permanent firewall-cmd --reload 
将我们的quay私有仓库凭据初始化为base64数据
1 2 echo  -n 'admin:lixiaohui'  | base64  -w0YWRtaW46bGl4aWFvaHVp 
本地和远程拉取密钥合并
先格式化从官网下载的文件,官网的auth为了隐私,我删减了一部分,官网链接:https://console.redhat.com/openshift/install/pull-secret 
1 cat  /root/pull-secret.txt | jq . | tee  /root/remote.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 {   "auths" :  {      "cloud.openshift.com" :  {        "auth" :  "bSkhBOEVCUOOUdVVg==" ,        "email" :  "xiaohui_li@foxmail.com"      } ,      "quay.io" :  {        "auth" :  "b3BlOTFOOUdVVg==" ,        "email" :  "xiaohui_li@foxmail.com"      } ,      "registry.connect.redhat.com" :  {        "auth" :  "fHZ1dm10eZjRQ==" ,        "email" :  "xiaohui_li@foxmail.com"      } ,      "registry.redhat.io" :  {        "auth" :  "fHVOTFOOUdVjRQ==" ,        "email" :  "xiaohui_li@foxmail.com"      }    }  } 
把本地的local-secret.txt也按照格式加进来,具体加完如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 [root@content ~]# cat  remote.txt {   "auths" : {     "cloud.openshift.com" : {       "auth" : "bSkhBOEVCUOOUdVVg==" ,       "email" : "xiaohui_li@foxmail.com"      },     "quay.io" : {       "auth" : "b3BlOTFOOUdVVg==" ,       "email" : "xiaohui_li@foxmail.com"      },     "registry.connect.redhat.com" : {       "auth" : "b3BlOTFOOUdVVg==" ,       "email" : "xiaohui_li@foxmail.com"      },     "registry.redhat.io" : {       "auth" : "b3BlOTFOOUdVVg==" ,       "email" : "xiaohui_li@foxmail.com"      },     "content.cluster1.xiaohui.cn:8443" : {       "auth" : "YWRtaW46bGl4aWFvaHVp" ,       "email" : "lixiaohui@xiaohui.cn"      }   } } 
关于openshift版本,请参考OpenShift 
1 2 3 4 5 6 7 export  OCP_RELEASE='4.18.15' export  LOCAL_REGISTRY='content.cluster1.xiaohui.cn:8443' export  LOCAL_REPOSITORY='openshift' export  PRODUCT_REPO='openshift-release-dev' export  LOCAL_SECRET_JSON='/root/remote.txt' export  RELEASE_NAME='ocp-release' export  ARCHITECTURE='x86_64' 
将镜像上传到私有仓库,这一步需要较久的时间,当然也取决于你的网络情况,在下载好之后,会上传到你的quay私有仓库中
1 2 3 4 oc adm -a ${LOCAL_SECRET_JSON}  release mirror \ --from=quay.io/${PRODUCT_REPO} /${RELEASE_NAME} :${OCP_RELEASE} -${ARCHITECTURE}  \ --to=${LOCAL_REGISTRY} /${LOCAL_REPOSITORY}  \ --to-release-image=${LOCAL_REGISTRY} /${LOCAL_REPOSITORY} :${OCP_RELEASE} -${ARCHITECTURE}  
注意结束之后的输出,我们把imageContentSources的内容放到稍后的install-config.yaml文件中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Update image:  content.cluster1.xiaohui.cn:8443/openshift:4.18.15-x86_64 Mirror prefix: content.cluster1.xiaohui.cn:8443/openshift Mirror prefix: content.cluster1.xiaohui.cn:8443/openshift:4.18.15-x86_64 To use the new mirrored repository to install, add the following section to the install-config.yaml: imageContentSources: - mirrors:   - content.cluster1.xiaohui.cn:8443/openshift   source: quay.io/openshift-release-dev/ocp-release - mirrors:   - content.cluster1.xiaohui.cn:8443/openshift   source: quay.io/openshift-release-dev/ocp-v4.0-art-dev To use the new mirrored repository for upgrades, use the following to create an ImageContentSourcePolicy: apiVersion: operator.openshift.io/v1alpha1 kind: ImageContentSourcePolicy metadata:   name: example spec:   repositoryDigestMirrors:   - mirrors:     - content.cluster1.xiaohui.cn:8443/openshift     source: quay.io/openshift-release-dev/ocp-release   - mirrors:     - content.cluster1.xiaohui.cn:8443/openshift     source: quay.io/openshift-release-dev/ocp-v4.0-art-dev 
生成匹配版本的openshift-install文件,如果不做这个步骤,而用官方的openshift-install生成配置文件,将有可能导致无法从私有仓库拉取镜像数据
1 2 3 oc adm -a ${LOCAL_SECRET_JSON}  release extract \ --command =openshift-install "${LOCAL_REGISTRY} /${LOCAL_REPOSITORY} :${OCP_RELEASE} -${ARCHITECTURE} "  \ --skip-verification=true  --insecure=true  
用我们生成的openshift-install替换掉原有的
1 cp  openshift-install /usr/local/bin
拉取密钥 在openshift安装过程中,需要从官方拉取镜像,请打开下面的链接,保存好账号的拉取密钥
1 2 打开网址,登录账号,下载文件到合适的位置,例如/root https://console.redhat.com/openshift/install/pull-secret 
准备安装配置文件 参数 值 意义 baseDomain xiaohui.cn 域名后缀 metadata.name cluster1 集群名称 pullSecret XXX 填写真实pullSecret sshKey XXX 填写真实ssh公钥 
要格外注意,这个配置文件名称必须是install-config.yaml
pullSecret 请使用自己从官方下载的,如果有私有仓库,可以加上进行加速,注意要加上仓库使用的CA证书,如果没有私有仓库,直接从官方拉取,配置文件就到sshkey结束
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 cat  > /openshift/install-config.yaml <<'EOF' apiVersion: v1 baseDomain: xiaohui.cn compute: - hyperthreading: Enabled   name: worker   replicas: 0 controlPlane:   hyperthreading: Enabled   name: master   replicas: 3 metadata:   name: cluster1 networking:   clusterNetwork:   - cidr: 10.128.0.0/14     hostPrefix: 23   networkType: OVNKubernetes   serviceNetwork:   - 172.16.0.0/16   machineNetwork:   - cidr: 192.168.8.0/24 platform:   none: {} fips: false  pullSecret: '{"auths":{"content.cluster1.xiaohui.cn:8443":{"auth":"YWRtaW46bGl4aWFvaHVp","email":"lixiaohui@xiaohui.cn"}}}'  sshKey: 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGxL3I2R2omOzpdXslWUogEkG9jik0OGHR234SwUzyVl root@content.cluster1.xiaohui.cn'  imageContentSources: - mirrors:   - content.cluster1.xiaohui.cn:8443/openshift   source : quay.io/openshift-release-dev/ocp-release - mirrors:   - content.cluster1.xiaohui.cn:8443/openshift   source : quay.io/openshift-release-dev/ocp-v4.0-art-dev additionalTrustBundle: |   -----BEGIN CERTIFICATE-----   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   y9SPl5QdyAqw3gzs7Jbc+1Z+Gw==   -----END CERTIFICATE----- EOF 
准备kubernetes清单和bootstrap配置文件 在这一关键步骤中,我们使用匹配版本的 openshift-install 工具来 生成集群的配置文件 ,包括 bootstrap、master、worker 和 auth 相关文件。如果你是从 官网直接下载  的 openshift-install,需要特别注意它的来源;如果打算使用 私有仓库  拉取 OpenShift 镜像,请务必确保 openshift-install 是通过 oc 工具解压的版本,而不是官网的默认下载版本。
重要提示 
🚨 执行  openshift-install 生成配置文件后, install-config.yaml 将被删除 ,如果有修改需求,请 提前备份 ! 🚨 必须在 24 小时内完成安装 ,否则 证书自动续订  可能导致安装失败。 🚨 PXE 需要正确指向 HTTP 服务器 ,所以我们拷贝所有配置文件到 2000 端口提供服务的 Web 目录 。
1 2 3 4 5 6 7 8 9 10 eval  "$(ssh-agent -s) " ssh-add /root/.ssh/id_ed25519 openshift-install create manifests --dir  /openshift openshift-install create ignition-configs --dir  /openshift cp  -a /openshift/* /contentchmod  a+rx /content -Rsemanage fcontext -a -t httpd_sys_content_t "/content(/.*)?"  restorecon -RvF /content systemctl restart httpd 
部署bootstrap节点 集群安装的顺序至关重要,确保各个节点能正确启动并完成初始化。以下是详细的 安装流程 ,确保 OpenShift UPI 部署的稳定性:
PXE 启动流程 
安装 Bootstrap 节点 
检查 Bootstrap 进度 
在 content.cluster1.xiaohui.cn 服务器上,使用 SSH 连接 bootstrap: 观察 bootstrap 节点的安装进度:
1 journalctl -b -f -u release-image.service -u bootkube.service 
等待日志滚动停止,并出现如下信息:
1 Created "99_openshift-cluster-api_worker-user-data-secret.yaml"  
此时 bootstrap 节点已就绪,但它的主要作用是 引导 Master 节点安装,最终会从集群中移除。
部署master节点 启动 Master 节点 
确认 Bootstrap 完成 
安装 Master 并不意味着集群已准备好 ,此时需要进一步检查 集群状态 : 1 openshift-install wait-for bootstrap-complete --log-level=info 
这里要注意,可能会卡住,很正常的,它需要较久的时间才能完成
等待期间可以用以下命令来看看进度
1 oc get co --kubeconfig /openshift/auth/kubeconfig 
你会看到各种operator都在努力工作中,你可能会临时看到一些报错,那都不要紧,继续等待,直到全部正常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [root@content ~]# oc get co --kubeconfig /openshift/auth/kubeconfig NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE authentication                             4.18.15   False       True          True       2m25s   APIServerDeploymentAvailable: no apiserver.openshift-oauth-apiserver pods available on any node.... baremetal                                  4.18.15   True        False         False      78s cloud-controller-manager                   4.18.15   True        False         False      3m54s cloud-credential                                     True        False         False      33m cluster-autoscaler                         4.18.15   True        False         False      87s config-operator                            4.18.15   True        False         False      2m13s console control-plane-machine-set                  4.18.15   True        False         False      78s csi-snapshot-controller                    4.18.15   True        False         False      2m8s dns                                        4.18.15   True        False         False      80s etcd                                       4.18.15   True        True          False      6s      NodeInstallerProgressing: 1 node is at revision 2; 0 nodes have achieved new revision 3 image-registry ingress                                              False       True          True       114s    The "default"  ingress controller reports Available=False: IngressControllerUnavailable: One or more status conditions indicate unavailable: DeploymentAvailable=False (DeploymentUnavailable: The deployment has Available status condition set  to False (reason: MinimumReplicasUnavailable) with message: Deployment does not have minimum availability.) insights                                   4.18.15   True        False         False      93s kube-apiserver                                       False       False         True       2m11s   StaticPodsAvailable: 0 nodes are active; 1 node is at revision 0 kube-controller-manager                              False       True          True       2m12s   StaticPodsAvailable: 0 nodes are active; 1 node is at revision 0; 0 nodes have achieved new revision 3 kube-scheduler                             4.18.15   False       True          False      2m12s   StaticPodsAvailable: 0 nodes are active; 1 node is at revision 0; 0 nodes have achieved new revision 4 kube-storage-version-migrator              4.18.15   True        False         False      2m8s machine-api                                4.18.15   True        False         False      63s machine-approver                           4.18.15   True        False         False      114s machine-config                             4.18.15   True        False         False      69s marketplace                                4.18.15   True        False         False      82s monitoring                                           Unknown     True          Unknown    78s     Rolling out the stack. network                                              False       True          False      3m38s   The network is starting up node-tuning                                4.18.15   True        False         False      102s olm                                        4.18.15   False       True          False      118s    CatalogdDeploymentCatalogdControllerManagerAvailable: Waiting for  Deployment... openshift-apiserver                        4.18.15   False       False         False      2m13s   APIServicesAvailable: PreconditionNotReady openshift-controller-manager                         False       True          False      2m6s    Available: no pods available on any node. openshift-samples operator-lifecycle-manager                 4.18.15   True        False         False      71s operator-lifecycle-manager-catalog         4.18.15   True        False         False      63s operator-lifecycle-manager-packageserver             False       True          False      71s service-ca                                 4.18.15   True        False         False      2m11s storage                                    4.18.15   True        False         False      2m13s 
看到都正常之后,运行下面命令来确认一下
如果你没在/openshift下执行此命令就会提示:
FATAL loading kubeconfig: stat auth/kubeconfig: no such file or directory
1 2 3 4 5 6 [root@content ~]# openshift-install --dir  /openshift wait-for bootstrap-complete --log-level=info INFO Waiting up to 20m0s (until  9:32PM) for  the Kubernetes API at https://api.cluster1.xiaohui.cn:6443... INFO API v1.30.0-2368+b62823b40c2cb1-dirty up INFO Waiting up to 30m0s (until  9:42PM) for  bootstrapping to complete... INFO It is now safe to remove the bootstrap resources INFO Time elapsed: 15m50s 
看到上方的It is now safe to remove the bootstrap resources之后,请从haproxy文件中去掉bootstrap的条目,具体来说,就是在content上,修改haproxy配置文件,在所有的监听中,去掉bootstrap的条目,因为此时,我们的master0、master1、master2等等这些机器已经可以独当一面了
确认master就绪后,以此类推尽快安装其他master
添加管理凭据 如果想在content机器上管理openshift,把config文件创建好就可以了
1 2 mkdir  /root/.kubecp  /openshift/auth/kubeconfig /root/.kube/config
添加命令自动补齐功能 1 2 3 4 oc completion bash > /etc/bash_completion.d/oc kubectl completion bash > /etc/bash_completion.d/kubectl source  /etc/bash_completion.d/ocsource  /etc/bash_completion.d/kubectl
确认Master节点就绪 在没有worker的情况下,可能authentication、console、ingress等几个的available状态一直不对,但其他都是正常,这个命令可能要很久才会全部就绪,请耐心等,而且过程中,会各种报错,是正常的,那是正在工作的表现,以下我的状态正常是因为我这是加好worker之后的内容
如果只看到master节点是ready是不够的,一定要等到下面的available更新状态为true
1 2 3 4 5 [root@content ~]# oc get nodes NAME                            STATUS   ROLES           AGE   VERSION master0.cluster1.xiaohui.cn     Ready    master,worker   63m   v1.30.0+4f0dd4d master1.cluster1.xiaohui.cn     Ready    master,worker   63m   v1.30.0+4f0dd4d master2.cluster1.xiaohui.cn     Ready    master,worker   63m   v1.30.0+4f0dd4d 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@content ~]# oc get co NAME                                       VERSION                          AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE authentication                             4.18.15   True        False         False      3m31s baremetal                                  4.18.15   True        False         False      52m cloud-controller-manager                   4.18.15   True        False         False      58m cloud-credential                           4.18.15   True        False         False      68m cluster-autoscaler                         4.18.15   True        False         False      52m config-operator                            4.18.15   True        False         False      54m console                                    4.18.15   True        False         False      108s csi-snapshot-controller                    4.18.15   True        False         False      52m dns                                        4.18.15   True        False         False      52m etcd                                       4.18.15   True        False         False      50m image-registry                             4.18.15   True        False         False      41m ingress                                    4.18.15   True        False         False      44m insights                                   4.18.15   True        False         False      47m kube-apiserver                             4.18.15   True        False         False      38m kube-controller-manager                    4.18.15   True        False         False      49m kube-scheduler                             4.18.15   True        False         False      48m kube-storage-version-migrator              4.18.15   True        False         False      53m machine-api                                4.18.15   True        False         False      52m machine-approver                           4.18.15   True        False         False      52m machine-config                             4.18.15   True        False         False      11m marketplace                                4.18.15   True        False         False      52m monitoring                                 4.18.15   True        False         False      40m network                                    4.18.15   True        False         False      54m node-tuning                                4.18.15   True        False         False      48m openshift-apiserver                        4.18.15   True        False         False      38m openshift-controller-manager               4.18.15   True        False         False      48m openshift-samples                          4.18.15   True        False         False      44m operator-lifecycle-manager                 4.18.15   True        False         False      52m operator-lifecycle-manager-catalog         4.18.15   True        False         False      52m operator-lifecycle-manager-packageserver   4.18.15   True        False         False      45m service-ca                                 4.18.15   True        False         False      54m storage                                    4.18.15   True        False         False      54m 
添加Worker节点 除刚才提到的几个available状态不对,其他的基本更新结束之后就正常了,此时我们可以通过pxe安装更多的worker节点,安装步骤和其他的一样,开机从网卡启动,选择对应的PXE条目即可
对于worker节点,需要集群审批证书才可以在oc get nodes中出现,请多次通过以下方式去批准证书申请请求,审批好的标准是执行oc get nodes能看到worker节点,看不到可以多次审批 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@content ~]# oc get csr -o name | xargs oc adm certificate approve certificatesigningrequest.certificates.k8s.io/csr-4d24n approved certificatesigningrequest.certificates.k8s.io/csr-8dlnx approved certificatesigningrequest.certificates.k8s.io/csr-bk98l approved certificatesigningrequest.certificates.k8s.io/csr-dc7p8 approved certificatesigningrequest.certificates.k8s.io/csr-dwmnx approved certificatesigningrequest.certificates.k8s.io/csr-g9m6x approved certificatesigningrequest.certificates.k8s.io/csr-hbfvr approved certificatesigningrequest.certificates.k8s.io/csr-hccdb approved certificatesigningrequest.certificates.k8s.io/csr-hcqcc approved certificatesigningrequest.certificates.k8s.io/csr-kglq7 approved certificatesigningrequest.certificates.k8s.io/csr-kzc8c approved certificatesigningrequest.certificates.k8s.io/csr-rjr8h approved certificatesigningrequest.certificates.k8s.io/csr-sklnx approved certificatesigningrequest.certificates.k8s.io/csr-zkvxp approved certificatesigningrequest.certificates.k8s.io/csr-zxggg approved certificatesigningrequest.certificates.k8s.io/system:openshift:openshift-authenticator-znwx7 approved certificatesigningrequest.certificates.k8s.io/system:openshift:openshift-monitoring-4vw5b approved 
确认Worker状态就绪 在worker添加并多次审批证书之后,所有的available状态都会是正常的,用一下命令来确认一下集群安装进度,而且这个命令还可以给我们看到用于登录的网址和账号密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@content ~]# openshift-install wait-for install-complete --dir =/openshift --log-level=debug DEBUG OpenShift Installer 4.11.0-0.okd-2022-08-20-022919 DEBUG Built from commit 7493bb2821ccd348c11aa36f05aa060b3ab6beda DEBUG Loading Install Config... DEBUG   Loading SSH Key... DEBUG   Loading Base Domain... DEBUG     Loading Platform... DEBUG   Loading Cluster Name... DEBUG     Loading Base Domain... DEBUG     Loading Platform... DEBUG   Loading Networking... DEBUG     Loading Platform... DEBUG   Loading Pull Secret... DEBUG   Loading Platform... DEBUG Using Install Config loaded from state file INFO Waiting up to 40m0s (until  2:46AM) for  the cluster at https://api.cluster1.xiaohui.cn:6443 to initialize... DEBUG Cluster is initialized INFO Waiting up to 10m0s (until  2:16AM) for  the openshift-console route to be created... DEBUG Route found in  openshift-console namespace: console DEBUG OpenShift console route is admitted INFO Install complete! INFO To access the cluster as the system:admin user when using 'oc' , run INFO     export  KUBECONFIG=/openshift/auth/kubeconfig INFO Access the OpenShift web-console here: https://console-openshift-console.apps.cluster1.xiaohui.cn INFO Login to the console with user: "kubeadmin" , and password: "B2JR4-yVzPQ-N3V8r-Jz48V"  INFO Time elapsed: 0s 
添加了worker节点之后持续获取oc get co状态,如果发现上面提到的authentication、console、ingress等几个的available状态一直不对,可以通过以下方式解决
当然,这种方法是删除pod,并等他重建,它重建也需要一段时间,不要着急
1 2 3 oc get pod -o name -n openshift-ingress | xargs oc delete -n openshift-ingress oc get pod -o name -n openshift-authentication | xargs oc delete -n openshift-authentication oc get pod -o name -n openshift-console | xargs oc delete -n openshift-console 
确认所有节点状态 如果没有worker节点,就再去审批一下证书
1 2 3 4 5 6 7 [root@content ~]# oc get nodes NAME                            STATUS   ROLES           AGE   VERSION compute0.cluster1.xiaohui.cn    Ready    worker          22m   v1.30.0+4f0dd4d compute1.cluster1.xiaohui.cn    Ready    worker          23m   v1.30.0+4f0dd4d master0.cluster1.xiaohui.cn     Ready    master,worker   68m   v1.30.0+4f0dd4d master1.cluster1.xiaohui.cn     Ready    master,worker   68m   v1.30.0+4f0dd4d master2.cluster1.xiaohui.cn     Ready    master,worker   68m   v1.30.0+4f0dd4d 
界面展示 Redhat OpenShift 版本: