4. 安装介质与工具准备

在 OpenShift 4.x 中,安装介质与工具准备是决定集群能否顺利部署的第一道关口。与 OpenShift 3.x 依赖 Ansible 剧本逐节点安装不同,4.x 采用“安装程序 + 声明式配置 + RHCOS 镜像引导”的模式:安装程序读取 install-config.yaml,生成 Ignition 配置,节点通过 RHCOS 镜像启动并自动完成系统配置与集群组件部署。因此,本节需要准备的五类对象——RHCOS 镜像、安装程序、pull secret、SSH 密钥、DNS 与负载均衡——缺一不可,且必须相互匹配。

一、RHCOS:集群节点的操作系统底座

RHCOS(Red Hat Enterprise Linux CoreOS)是专为容器化工作负载设计的不可变操作系统,它使用 rpm-ostree 管理根文件系统,节点上的操作系统更新由 Machine Config Operator 统一编排。安装时并不需要手动安装 RHCOS,而是让节点从 RHCOS 的引导镜像启动,再由 Ignition 完成首次配置。

实际准备中需要关注三类镜像:

  • ISO 镜像:用于裸金属或虚拟化平台通过挂载 ISO 引导安装,例如 rhcos-4.14.0-x86_64-live-iso.x86_64.iso。
  • PXE 引导文件:包括 kernel、initramfs.img 和 rootfs.img,用于大规模裸金属节点的网络引导。
  • 云平台镜像:如 qcow2、VMDK、OVA 等,用于 vSphere、OpenStack 或公有云环境。

镜像版本必须与安装程序版本严格一致。例如安装程序为 4.14.0,则 RHCOS 也必须使用 4.14.0 对应的镜像,否则 Ignition 配置可能因版本差异而无法被正确解析。镜像可从 Red Hat 客户门户的 rhcos 目录或 mirror.openshift.com 获取,下载后建议校验 SHA256 值。

二、安装程序与命令行工具

OpenShift 安装程序以压缩包形式发布,解压后包含 openshift-install 和 oc 两个核心二进制文件。安装程序负责生成 Ignition 配置、执行集群引导和销毁集群;oc 则是集群交付后日常操作的客户端。

# 下载并解压安装程序(示例版本 4.14.0)
tar -xvf openshift-install-linux-4.14.0.tar.gz
sudo mv openshift-install oc /usr/local/bin/
openshift-install version
oc version --client

安装程序本身不依赖外部服务,但需要能访问目标平台的 API 以及 Red Hat 的镜像仓库。若在离线环境部署,还需提前准备镜像仓库并配置 imageContentSources。安装程序运行时会生成工作目录,其中 auth/kubeconfig、auth/kubeadmin-password 和 metadata.json 是后续访问集群的关键文件,必须妥善保存。

三、pull secret:拉取镜像的凭证

pull secret 是一段 JSON 格式的认证信息,包含访问 registry.redhat.io、quay.io 等镜像仓库所需的凭据。安装程序会将它写入节点的 Ignition 配置,使节点能够拉取集群组件镜像;同时它也会被写入集群内部的全局 pull secret,供后续工作负载使用。

获取方式:登录 Red Hat 客户门户,在 “Pull Secret” 页面复制对应订阅的 JSON 内容,保存为 pull-secret.txt。在 install-config.yaml 中通过 pullSecret 字段引用:

pullSecret: '{"auths":{"cloud.openshift.com":{"auth":"..."},"quay.io":{"auth":"..."},"registry.connect.redhat.com":{"auth":"..."},"registry.redhat.io":{"auth":"..."}}}'

需要注意:pull secret 与订阅绑定,若使用内部镜像仓库,还需在 pull secret 中追加内部仓库的认证条目,否则节点无法从内部仓库拉取镜像。

四、SSH 密钥:节点访问与故障排查

OpenShift 安装程序要求提供 SSH 公钥,该公钥会被注入到所有 RHCOS 节点的 core 用户,用于安装期间和安装后的故障排查。私钥必须由部署方自行保管,不能上传到任何节点。

ssh-keygen -t ed25519 -N '' -f ~/.ssh/ocp4-key
cat ~/.ssh/ocp4-key.pub

在 install-config.yaml 中通过 sshKey 字段填入公钥内容。安装完成后,可使用 ssh -i ~/.ssh/ocp4-key core@<node-ip> 登录节点,查看 journalctl -u kubelet、crio 等日志,排查节点未就绪等问题。若安装时未提供 SSH 密钥,后续将无法直接登录节点,只能通过 oc debug node/<node> 进入调试容器,排查能力受限。

五、DNS 与负载均衡:集群访问的入口

OpenShift 4.x 对 DNS 和负载均衡有明确要求,且必须在安装前配置完成。集群需要两类 DNS 记录:

  • API 记录:api.<cluster>.<base-domain> 指向 API 负载均衡器,用于 oc 客户端和内部组件访问 Kubernetes API。
  • 通配符记录:*.apps.<cluster>.<base-domain> 指向应用负载均衡器,用于访问路由暴露的应用。

此外,每个节点还需要正向和反向 DNS 记录,例如 master-0.ocp4.example.com 与对应 IP 的 PTR 记录。反向解析缺失是安装失败的常见原因之一。

负载均衡方面,API 负载均衡器需将 6443 端口流量分发到所有 master 节点;应用负载均衡器需将 80 和 443 端口流量分发到所有 compute 节点。若使用 HAProxy,可采用 TCP 模式配置:

frontend api
  bind *:6443
  default_backend api_backend
backend api_backend
  balance source
  server master-0 10.0.0.11:6443 check
  server master-1 10.0.0.12:6443 check
  server master-2 10.0.0.13:6443 check

对于自建 DNS,可使用 dnsmasq 或 BIND 配置上述记录。安装前建议用 dig 和 nc 验证解析与端口连通性:

dig +short api.ocp4.example.com
dig +short test.apps.ocp4.example.com
nc -zv api.ocp4.example.com 6443

六、准备工作的整体关系

这五类对象并非孤立存在:RHCOS 镜像提供节点操作系统,安装程序读取 install-config.yaml 并生成 Ignition,pull secret 和 SSH 公钥被写入 Ignition,节点启动后依据 Ignition 完成配置并注册到集群,而 DNS 与负载均衡则保证节点、客户端和外部用户能够正确找到 API 与应用入口。任何一项缺失或不匹配,都会在安装阶段以不同形式暴露出来。

OpenShift 4.x 安装介质与工具准备关系图 RHCOS 镜像 ISO / PXE / qcow2(版本须匹配) 安装程序 openshift-install + oc pull secret registry.redhat.io / quay.io 凭证 SSH 密钥对 公钥注入节点 core 用户 DNS 与负载均衡 api / *.apps / 节点正反向解析 install-config.yaml baseDomain / metadata platform / networking pullSecret / sshKey compute / controlPlane Ignition 配置 bootstrap.ign / master.ign / worker.ign RHCOS 节点启动 core 用户 / kubelet / CRI-O 自动配置 集群 API 与应用入口 api.ocp4.example.com:6443 / *.apps 关键校验点: ① RHCOS 与安装程序版本一致;② pull secret 含内部仓库认证;③ SSH 公钥已写入 install-config.yaml; ④ api 与 *.apps 解析正确;⑤ 6443/80/443 端口在负载均衡器上可达;⑥ 节点正反向 DNS 记录完整。
建议在正式安装前,用 openshift-install create manifests 生成清单并检查 manifests/ 目录,确认 DNS、负载均衡和 pull secret 配置已被正确解析,再执行 openshift-install create cluster。
常见失败原因:RHCOS 镜像版本与安装程序不一致、pull secret 缺少内部仓库条目、反向 DNS 记录缺失、API 负载均衡器未放行 6443 端口。这些问题通常在 bootstrap 阶段就会暴露,可通过 openshift-install wait-for bootstrap-complete --log-level=debug 观察具体报错。