2020-02-25-openshift 4.3 离线安装--DHCP方式
本文描述openshift4.3 baremental 离线安装方式,我的环境是 vmwamre esxi 虚拟化,也适用于其他方式提供的虚拟主机或者物理机。
4.x部署方式和之前3.x完全不同,请暂时忘记3.x的部署方式。
本篇采用PXE方式安装openshift集群,会启用dhcp服务,要求部署环境不能有其他dhcp服务,如果有,要想办法把网络隔离开。
如果对于DHCP冲突无法解决,建议采用静态IP方法,可以参照文末的其他文章,比如redhat wangzheng那篇。
部署环境介绍
本节介绍高可用部署所需的资源配置,及需要的安装文件。
整个环境部署可以不需要RHEL官方源,本文档部署所需的所有离线文件均可在网盘中下载,地址见下文。
官方推荐最小化资源配置--可忽略,直接看下一小节
这步介绍下官方推荐的配置,实际部署还会使用到dns,dhcp等服务。 知道下就好,实际部署不是按这个来。 一个临时 bootstrap 机器 三台 control plane 或 master 机器 至少两台计算或 worker 机器
Note: 集群要求 bootstrap 机器在三台 control plane 机器上部署 OpenShift Container Platform 集群。您可在安装集群后删除 bootstrap 机器。
官方推荐最低资源需求。
Machine
Operating System
vCPU
RAM
Storage
Bootstrap
RHCOS
4
16GB
120 GB
Control plane
RHCOS
4
16 GB
120 GB
Compute
RHCOS or RHEL 7.6
2
8 GB
120 GB
dns,dhcp,负载均衡等服务官网未做配置要求,可以用利用环境内已有服务进行配置。也可以全新部署。
本此部署使用资源
方案还是采用高可用,比官方多了一个base节点,用来搭建部署需要的dns,dhcp等服务,这台系统用Centos7.6,因为centos解决源比较方便,等熟悉部署及所需安装包后可以换成RHEL。
其他机器都用RHCOS,就是coreos专门针对openshift的操作系统版本。 对虚机资源做了压缩,家里穷,没那么多资源 T T
如果不要master高可用,可以把master1,2 去掉。
openshift集群节点统一使用RHCOS。注意系统不需要提前安装!!!会通过自动部署来安装。
几台RHCOS节点可以先把虚机创建好,不要装系统.
Machine
OS
vCPU
RAM
Storage
IP
bastion
Centos7.6
2
8GB
100 GB
192.168.2.10
bootstrap-0
RHCOS
2
4GB
40 GB
192.168.2.11
master-0
RHCOS
4
8 GB
40 GB
192.168.2.12
master-1
RHCOS
4
8 GB
40 GB
192.168.2.13
master-2
RHCOS
4
8 GB
40 GB
192.168.2.14
worker-0
RHCOS
4
16 GB
40 GB
192.168.2.15
worker-1
RHCOS
4
16 GB
40 GB
192.168.2.16
节点角色: 1台 基础服务节点,用于安装部署所需的dhcp,dns,ftp服务。系统不限。同时承担负载均衡,用于负载master节点api及router,功能同3.x。这个服务现在需要自己部署,生产环境也可用硬负载。 1台 部署引导节点 Bootstrap,用于安装openshift集群,在集群安装完成后可以删除。系统RHCOS 3台 控制节点 Control plane,即master,通常使用三台部署高可用,etcd也部署在上面。系统RHCOS 2台 计算节点 Compute,用于运行openshift基础组件及应用 。系统RHCOS
安装所需文件
rpm-packages.tar.gz 所需rpm安装包 docker-io-registry-2.tar docker镜像文件,这个手动重新拉取 registry:2.6 不要用2.7 openshift-client-linux-4.3.5.tar.gz oc客户端命令 registry.tar.gz 离线镜像仓库数据文件 pull-secret.json 镜像权限文件 openshift-install 安装程序 dnsmasq.d/ocp4.conf haproxy/haproxy.cfg matchbox/ 配置文件已经RHCOS的三个大文件 matchbox-v0.8.3-linux-amd64.tar.gz
对于其中配置文件,供参考,需按照文档说明修改以匹配自己环境。 程序和安装包,数据文件可以直接使用。
下载地址见文末
安装顺序
顺序就是先准备基础节点,包括需要的dhcp、dns、文件服务器、引导文件等,然后安装引导机 bootstrap,再后面就是 master, 再 node

安装准备-镜像仓库
安装base基础组件节点
|base|centos7.6|4|8GB|100 GB|192.168.2.10|
安装系统 centos7.6 mini
设置IP,设置主机名,关闭防火墙和selinux
注意所有节点主机名采用三级域名格式 如 master1.aa.bb.com
设置 yum 缓存包到本地 - 可选步骤 针对在线安装,这样以后如果切换到离线安装,可以方便知道用了哪些包 编辑 /etc/yum.conf 把keepcache改为1 keepcache=1
针对离线安装 -- 离线安装必做
把我缓存的rpm包,一次性都装上,后面所有的yum install 都不需要再执行了,但是其他命令和参数配置还是要的。
创建内部镜像仓库
此仓库用于存放用于部署openshift平台所需使用的镜像,仓库本身也是用容器启动的。 安装所需软件包,及创建所需目录,这些文件夹将挂载到registry容器中。
在线安装直接使用yum install即可
为 registry 提供证书。如果您没有现有的可信证书颁发机构,您可以生成自签名证书。 registry.example.com 是仓库的域名,自己定义,不要求和主机名一致。
给仓库生成用户密码,root password分别为仓库的用户名和密码。
离线安装先导入下registry2的镜像,现在安装也可以这么多,docker.io的镜像拉取比较慢
运行内部镜像仓库,-p 后面第一个5000表示镜像映射端口,可以修改成其他的。
如果防火墙没关闭,需要放行本地端口,下面这个5000对应上面podman -p 后面第一个5000
hosts 添加 registry.example.com 域名解析,IP是本机地址,域名与上面生成证书使用的域名一致。
测试访问仓库,没有报错返回空值就是正常的,当前仓库内还没有镜像
如仓库无法访问,您应该检查 1.) registry 容器是否正常启动 2.) registry.example.com 域名是否可以正常解析 3.) htpasswd 文件中的用户名密码是否正确 4.) 防火墙5000端口是否开放 5.) 证书域名是否正确
下载镜像文件
下载最新的oc命令。进入下载链接,下载openshift client,install 文件不需要,后面从镜像里面提取 直接选一个4.3最新的 openshift-client-linux-4.3.5.tar.gz 网盘里有这个文件
https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest-4.3/
准备拉取镜像权限认证文件。 从 Red Hat OpenShift Cluster Manager 站点的 Pull Secret 页面下载 registry.redhat.io 的 pull secret。 https://cloud.redhat.com/openshift/install/pull-secret
json文件内容大概如下
把本地仓库的用户密码转成base64编码
然后在pull-secret.json里面加一段本地仓库的权限。第一行仓库域名和端口,第二行是上面的base64,第三行自己写个邮箱
设置环境变量 OCP_RELEASE版本,https://quay.io/repository/openshift-release-dev/ocp-release?tab=tags 这个页面可以查看,版本写的不对,下面oc adm 时候会提示 image does not exist LOCAL_REGISTRY 本地仓库的域名和端口 LOCAL_REPOSITORY 镜像存储库名称,使用ocp4/openshift4,不需要改 PRODUCT_REPO RELEASE_NAME,都是一些版本特征,保持不变即可 LOCAL_SECRET_JSON 密钥路径,就是上面pull-secret.json 的存放路径
将自签名的证书复制到默认信任证书路径
拉取镜像,这一步的动作就是把quay官方仓库中的镜像,同步到我们本地仓库,如果失败了重新执行命令。 整体内容大概5G。本地仓库数据在 /opt/registry/data 可以直接用我的离线文件 registry.tar.gz tar -zxvf registry.tar.gz ,把data 目录放到 /opt/registry,然后重启镜像仓库 podman restart mirror-registry
用离线文件的话,这句oc adm 命令就不需要执行了,下面返回的imageContentSource内容也不必介意,每次都一样的,抄下面的就行,仓库名称改成你的就好
oc adm release mirror执行完毕后,返回的信息需要记录下来,特别是imageContentSource信息,后面 install-config.yaml 文件里配置进去
本地镜像仓库缓存好镜像之后,通过tag/list 接口查看所有tag,应该能列出来一堆才是正常的
提取 openshift-install 命令
为了保证安装版本一致性,会从镜像库中提取 openshift-install 命令,需要用到上面export的环境变量 这步要联网,如果是离线环境,直接使用提取好的 openshift-install 文件,网盘里有
如果提示"error: image dose not exist",说明拉取的镜像不全,或者版本不对。
把文件移动到/usr/local/bin 并确认版本
安装准备 -- DNS/DHCP server 部署
网上部署方法诸多,有其他的写hosts文件不用dns server 及静态IP的方法或者修改RHCOS镜像。本次采用DHCP PXE方式。。
部署dnsmasq服务,这个服务可以同时做dns server, dhcp server和tftp,为后面的RHCOS提供PXE无人值守安装
dhcp-range: 几台RHCOS预留的IP池,及掩码 dhcp-option=option:router: 网关地址 dhcp-option=option:dns-server: 这台部署机的IP,因为这台做dns server dhcp-boot=tag:ipxe: 写这台部署机的主机名,其他不用改 下面的address,分别是主机名和IP地址 api.ocp4.example.com 如果单master,指向master0,如果是多master,指向master的负载,这边写部署机,后面部署机上面安装负载均衡,负载指向到三个master api apps.ocp4.example.com 指向第一个node节点,router组件所在 api-int.ocp4.example.com 同api.ocp4.example.com,指向openshift api,就是当前bastion节点 dhcp-host dhcp与mac配置,分别是几台RHCOS的mac地址,主机名,ip地址
配置tftp server,并启动dnsmasq,如果本机开启了防火墙还需要防火墙放行,我这台上面已经关闭防火墙了
安装准备 -- haproxy 负载均衡
单master可以跳过这一步,不过我还没测试单master部署。
haproxy主要用于负载master api 6443 ,worker节点的router 80 443,可以被其他负载代替
启动服务
验证服务
通过浏览器页面查看 IP:9000 可以看到haproxy的监控页面,当前后端服务还没起,所以很多红色的。
安装准备 -- matchbox部署 -- 文件下发
安装配置matchbox ,该服务主要是用作pxe安装rhcos时,分配分配rhcos的ign部署配置文件
文件目录,下面会说明文件如何配置
官方matchbox架构图

最上面是即将部署的节点,groups目录下每个配置文件里都写了对应节点的mac,两者会根据mac进行匹配
所以groups下面是每个节点对应一个配置文件
groups下的json文件,会有一个profile参数,对应 profiles 目录下的文件。 profiles 即代表角色
assets 存放的引导文件和安装系统需要的文件
下载matchbox-v0.8.3-linux-amd64.tar.gz,可以到github的release页面下载, https://github.com/poseidon/matchbox/releases
下载rhcos 安装文件,本次部署需要下面这三个,你可以从下面官网连接下载,百度网盘里也有: https://mirror.openshift.com/pub/openshift-v4/dependencies/rhcos/latest/latest/
rhcos-4.3.0-x86_64-installer-initramfs.img rhcos-4.3.0-x86_64-installer-kernel rhcos-4.3.0-x86_64-metal.raw.gz
这三个文件放到 /var/lib/matchbox/assets 目录下
groups 目录下修改节点配置文件,主要是mac地址和检查对应的 profiles 是否正确
profiles 目录下修改配置文件,主要确认kernel initrd 对应的配置文件及 url , install_dev :在不同虚拟化或者物理平台磁盘命名可能不一样,看下当前部署机是sda 还是 vda,rhcos下命名规则应该是一样的
ignition 下的文件后面生成
启动matchbox
systemctl enable matchbox && systemctl restart matchbox
matchbox 监听8080 端口,可以通过浏览器访问到 http://192.168.2.10:8080/assets/
openshift 安装
准备 install-config.yaml
首先创建 install-config.yaml 文件,来生成matchbox 需要的ign 文件
创建一对公钥和私钥,用作登录RHCOS
baseDomain 就是上面每个主机配置的域名 metadata,name 就是节点master/worker名称后面一级,这也是为什么主机名要用好几级 worker 0 不代表0个worker,此处不用改 cidr 是pod ip池 ,servicenetwork 就是k8s里的service ip,两个都要和虚拟机本地ip网段区分开 pullsecret的信息在上面pull-secret.json 中都有 sshKey ssh公钥,cat /root/.ssh/id_rsa.pub 全部内容贴进去 additionalTrustBundle 私有镜像仓库证书,cat /opt/registry/certs/domain.crt, 需要注意整体内容往后移个空格,换行保持不变,可以参考我的文件 imageContentSources 是之前oc admin release mirror 返回的结果,上面有记录,如果也是ocp4.3,核对下仓库域名,其他不用修改
生产 ign 配置文件
安装 bootstarp 和 master
部署机 bastion 执行命令监控部署状态
然后把bootstrap虚拟打开,第一次启动的时候找不到本地系统盘会自动切换到网卡pxe启动。
待系统安装完成后,bootstrap虚机控制台会停留在登录页面。
在部署机 basetion 可以通过 ssh 命令进入bootstrap
master 部署
把master几台虚机打开,会自动从pxe启动部署,检查方法与上面类似 通过haproxy页面查看master节点api及machine-config状态 以及通过netstat 查看端口 api 6443, etcd 2379
部署完成后,从haproxy上看到master-1的api状态异常,master-0 master-2 正常,还不太熟悉服务组件运行方式,我重启master-1后正常了,后续再看。
oc 命令可以看到master状态
在bastion 节点,haproxy的配置文件,backend 中的 bootstrap 需要删掉,并重启haproxy。
安装 worker
部署机 bastion 执行命令监控部署状态
当两台worker 在控制台看到已经部署完
在部署机之前 get csr 命令,查看node 节点加入申请,批准之,然后就看到了node节点。 大功告成!!!
Web console 登录
ocp4的web console 入口走router了,所以找下域名 首先找到我们的域名,然后在我们自己电脑上 hosts添加解析,指向到worker-0,这样就能够访问openshift 的web 控制台了
把这条写入hosts 192.168.2.15 oauth-openshift.apps.ocp4.example.com console-openshift-console.apps.ocp4.example.com
然后浏览器访问console https://console-openshift-console.apps.ocp4.example.com
第一次发现页面打不开. Application is not available , 这是router返回的,说明router服务好使,web console 服务异常。
嗯,pod pending, 看event, 是通过node selector 指定了master,两个node的标签不匹配,但是master的cpu又不够。所以给三台master虚拟修改下CPU,之前是2核改成4,重启下系统
重新看下 console pod,正常后console 就可以打开了
oc -n openshift-console get pod
用户名是 kubeadmin 密码在这个文件里 cat /root/ocp4/auth/kubeadmin-password

参考文档
如果在本文中你遇到了未描述到的问题,可以参阅以下文档。 官方部署文档 https://docs.openshift.com/container-platform/4.3/installing/installing_bare_metal/installing-bare-metal.html https://blog.openshift.com/openshift-4-2-disconnected-install/
这里面有静态IP的方法,修改启动参数,不修改RHCOS镜像,但是启动参数挺长的,手动敲容易出错,错了就得重来。。。
https://blog.openshift.com/openshift-4-bare-metal-install-quickstart/
参考文档,来自redhat wangzheng。静态IP,修改RHCOS镜像 https://github.com/wangzheng422/docker_env/blob/master/redhat/ocp4/4.2.disconnect.operator.md
泰康云 http://www.talkwithtrend.com/Article/246491
同事程吉祥的4.2 word文档(不方便上传,在此感谢祥哥,祥哥!这么大的广告,你要不要打赏一下。)
官方安装诊断手册 Troubleshooting OpenShift Container Platform 4.x: UPI Installation https://access.redhat.com/articles/4292081
下载地址
请原谅我的小小手段。。。
识别图中二维码,关注公众号,回复 ocp4.3 即可获取百度云下载地址
也可以顺便关注下我的github,后续更新会同步到github
Last updated