购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2.3 OpenShift离线部署示例

1.安装环境介绍

为了方便读者直观体验OpenShift的部署,我们以在某客户进行PoC时的安装过程作为示例进行说明。本示例仅为帮助读者理解,不代表生产环境配置。需要注意的是,本安装实例采用离线+bare metal模式进行安装,使用的版本是OpenShift 4.3。这个安装方法与OpenShift 4.4、OpenShift 4.5是通用的。OpenShift 4.6采用离线+bare metal模式进行安装的方式略有简化,会在3.2.3节第12小节中提及。想安装OpenShift 4.6的朋友,请先阅读这一小节。

安装OpenShift PoC环境的资源需求如表3-2所示。

表3-2 资源需求表

上述机器需要在vSphere上启动,对vCenter需要以下操作权限:

·具有创建虚拟机和给虚拟机安装操作系统的权限。

·具有访问VM Console的权限。

·具有对创建的VM全生命周期管理的权限:启动、关闭、删除、重启、做快照、还原等。

·具有上传ISO以及挂载ISO的权限。

首先使用RHEL操作系统的ISO启动管理机,然后在管理机上配置本地的Yum repo(步骤省略)。本节以下所有操作未明确指出的,均在管理机上以root执行。

需要指出的是,虽然我们在vSphere上安装OpenShift,但使用的方法是Baremetal的安装方法,这种安装方法较为通用。

2.配置SELinux和Firewalld

在管理机上安装需要的工具。


# yum -y install wget httpd podman pigz skopeo docker buildah jq bind-utils bash-
    completion

关闭管理机上的Firewalld。


# systemctl stop firewalld
# systemctl disable firewalld

如果客户环境不允许关闭Firewalld,则需要将OpenShift安装过程中需要访问的端口加入Firewall的白名单,我们以添加5000端口为例。


# firewall-cmd --permanent --add-port=5000/tcp --zone=public
# firewall-cmd --permanent --add-port=5000/tcp --zone=internal
# firewall-cmd --reload

配置管理机上的SELinux。

默认操作系统的SELinux是Enforcing状态会影响HAproxy的启动,使用如下命令修改为Permissive。


# vi /etc/selinux/config  

将enforcing修改为permissive。


# setenforce 0

3.部署本地镜像仓库并导入安装镜像

接下来,导入Docker Registry离线镜像,用于启动本地镜像仓库。


# podman load -i registry-image.tar
# podman images
REPOSITORY                   TAG   IMAGE ID       CREATED       SIZE
docker.io/library/registry   2     2d4f4b5309b1   4 weeks ago   26.8 MB

创建容器镜像仓库目录。


# mkdir -p /opt/registry/{auth,certs,data}

创建证书,设置Common Name的时候,注意正确设置为管理机的主机名。


# cd /opt/registry/certs
# openssl req -newkey rsa:4096 -nodes -sha256 -keyout example.com.key -x509 -days 
    365 -out example.com.crt
………………
Common Name (eg, your name or your server's hostname) []: repo.ocp4.example.com

利用bcrypt格式,创建离线镜像仓库的用户名和密码。安装htpasswd命令行的工具并创建用户。


# yum install httpd-tools
# htpasswd -bBc /opt/registry/auth/htpasswd david david

将自签名证书添加到管理机。


# cp /opt/registry/certs/example.com.crt /etc/pki/crust/source/anchors/
# update-ca-trust

接下来,我们使用3.2.3节中的方法3导入离线镜像。

将提前准备好的OpenShift安装镜像包解压缩到管理机上。


# tar -zxvf registry.tgz -C /data/

解压缩后,确认解压文件的位置,Mirror Registry启动的时候,需要访问docker的上一级目录,目录结构如图3-16所示。

图3-16 OpenShift镜像解压缩目录

通过podman启动Mirror Registry,注意启动时指定到容器镜像的解压缩目录、证书目录、htpasswd文件目录。


# podman run --name mirror-registry -p 5000:5000 -v /data/registry:/var/lib/
    registry -v /opt/registry/auth:/auth:z -e "REGISTRY_AUTH=htpasswd" -e 
    "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=
    /auth/htpasswd -v /opt/registry/certs:/certs:z -e REGISTRY_HTTP_TLS_
    CERTIFICATE=/certs/example.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/example.
    com.key -d docker.io/library/registry:2

确认本地镜像仓库成功启动。


# podman ps
CONTAINER ID  IMAGE   COMMAND     CREATED     STATUS    PORTS          NAMES
8a80baf5ee9e  docker.io/library/registry:2  /entrypoint.sh /e...  33 seconds ago  
Up 33 seconds ago  0.0.0.0:5000->5000/tcp  mirror-registry

查看Mirror Registry中的镜像,输出应该有类似图3-17的内容。


# curl -u david:david -k https://repo.ocp4.example.com:5000/v2/_catalog

图3-17 查看Mirror Registry中的内容

将本地镜像仓库身份认证信息直接进行整合,方便后面书写install-config.yaml。使用如下命令创建一个包含正确格式的镜像仓库认证文件。


# cat << EOF > registry_auth.json
{"auths":{}}
EOF

指定认证文件登录Mirror Registry,以便认证信息注入registry_auth.json中。


# podman login --authfile ~/registry_auth.json repo.ocp4.example.com:5000
# cat ~/registry_auth.json
{
        "auths": {
                "repo.ocp4.example.com:5000": {
                        "auth": "ZGF2aWQ6ZGF2aWQ="
                }
        }
}

4.配置HTTP服务器

接下来,在管理机上配置HTTP服务器。


# mkdir -p /var/www/html/materials/
# restorecon -vRF /var/www/html/materials/

由于后面配置HAproxy会占用80端口,因此修改httpd监听端口为8080。


# vi /etc/httpd/conf/httpd.conf

将Listen 80修改为Listen 8080。配置虚拟主机,用HTTP提供文件下载服务。


# vi /etc/httpd/conf.d/base.conf
<VirtualHost *:8080>
   ServerName repo.ocp4.example.com
   DocumentRoot /var/www/html/materials/
</VirtualHost>

重启HTTP服务。


# systemctl enable httpd --now
# systemctl restart httpd

5.配置DNS服务器

在管理机上配置DNS服务器。可以使用bind或者dnsmasq,PoC中我们使用后者。

在管理机上安装dnsmasq,配置正向和反向解析,然后其他所有OpenShift的节点都必须要指定到这个Nameserver,即管理机。


# yum install dnsmasq -y
# vim /etc/dnsmasq.conf

配置正向解析。


# vi /etc/dnsmasq.conf
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
#resolv-file=/etc/resolv.conf.upstream  # 如果OpenShift节点需要访问外网,这里配置上游DNS。
domain-needed
strict-order
local=/ocp4.example.com/
address=/apps.ocp4.example.com/28.4.184.100
address=/repo.ocp4.example.com/28.4.184.100
address=/bootstrap.ocp4.example.com/28.4.184.101
address=/master01.ocp4.example.com/28.4.184.102
address=/master02.ocp4.example.com/28.4.184.103
address=/master03.ocp4.example.com/28.4.184.104

address=/etcd-0.ocp4.example.com/28.4.184.102
address=/etcd-1.ocp4.example.com/28.4.184.103
address=/etcd-2.ocp4.example.com/28.4.184.104

address=/worker01.ocp4.example.com/28.4.184.105
address=/worker02.ocp4.example.com/28.4.184.106
address=/worker03.ocp4.example.com/28.4.184.107

address=/api.ocp4.example.com/28.4.184.100
address=/api-int.ocp4.example.com/28.4.184.100

srv-host=_etcd-server-ssl._tcp.ocp4.example.com,etcd-0.ocp4.example.com,2380
srv-host=_etcd-server-ssl._tcp.ocp4.example.com,etcd-1.ocp4.example.com,2380
srv-host=_etcd-server-ssl._tcp.ocp4.example.com,etcd-2.ocp4.example.com,2380
addn-hosts=/etc/dnsmasq.openshift.addnhosts

bind-dynamic
no-hosts

配置反向解析。


# vi /etc/dnsmasq.openshift.addnhosts
28.4.184.100 repo.ocp4.example.com
28.4.184.101 bootstrap.ocp4.example.com
28.4.184.102 master01.ocp4.example.com
28.4.184.103 master02.ocp4.example.com
28.4.184.104 master03.ocp4.example.com
28.4.184.102 etcd-0.ocp4.example.com
28.4.184.103 etcd-1.ocp4.example.com
28.4.184.104 etcd-2.ocp4.example.com
28.4.184.105 worker01.ocp4.example.com
28.4.184.106 worker02.ocp4.example.com
28.4.184.107 worker03.ocp4.example.com
28.4.184.100 api.ocp4.example.com
28.4.184.100 api-int.ocp4.example.com

重启DNS服务。


# systemctl enable dnsmasq 
# systemctl restart dnsmasq 

6.安装并配置HAproxy

安装HAproxy并编写配置文件。HAproxy配置文件主要配置以下四个端口,如表3-3所示。

表3-3 HAproxy中开放的端口

配置步骤如下:


# yum install haproxy -y
# vim /etc/haproxy/haproxy.cfg 

配置文件内容参见Repo中的haproxy.cfg。

启动并查看HAProxy的状态,确保正常运行。


# systemctl enable haproxy
# systemctl start haproxy
# systemctl status haproxy

7.创建install-config.yaml文件

接下来,在管理机上安装openshift-install二进制文件和OC Client。

需要注意的是,这两个文件的版本一定要与安装的OpenShift镜像的版本一致,否则会安装失败。

首先解压缩文件。


# tar xvf openshift-client-linux-4.x.y.tar.gz 
# tar xvf openshift-install-linux-4.x.y.tar.gz

拷贝到可执行目录下。


# cp oc /usr/local/bin/ 
# cp kubectl /usr/local/bin/ 
# cp openshift-install /usr
    /local/bin

在管理机上生成SSH Key,以便安装过程中节点之间与管理机可以无密码SSH登录。


# ssh-keygen
# mkdir /var/www/html/materials
# cd /var/www/html/materials

利用如下命令生成install-config.yaml。


cat << EOF > install-config.yaml
apiVersion: v1
baseDomain: example.com 
compute:
- hyperthreading: Enabled
  name: worker
  replicas: 0
controlPlane:
  hyperthreading: Enabled
  name: master
  replicas: 3
metadata:
  name: ocp4 
networking:
  clusterNetworks:
  - cidr: 10.254.0.0/16
    hostPrefix: 24
  networkType: OpenShiftSDN
  serviceNetwork:
  - 172.30.0.0/16
platform:
  none: {}
pullSecret: '$(awk -v RS= '{$1=$1}1' ~/registry_auth.json)' 
sshKey: '$(cat /root/.ssh/id_rsa.pub)'
additionalTrustBundle: |
$(cat /opt/registry/certs/example.com.crt | sed 's/^/   /g' | sed 's/^/   /g')
imageContentSources: 
- mirrors:
  - repo.ocp4.example.com:5000/ocp4/openshift4
  source: quay.io/openshift-release-dev/ocp-release
- mirrors:
  - repo.ocp4.example.com:5000/ocp4/openshift4
  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
EOF

8.生成ign文件

创建存放安装文件的目录,注意此处的路径与HTTP服务器配置的路径匹配。


# mkdir /var/www/html/materials/pre-install

利用openshift-installer安装工具创建安装用的ignition文件。


# cd /var/www/html/materials
# cp install-config.yaml /var/www/html/materials/pre-install/

我们以bare metal方式安装OpenShift,使用如下RHCOS的引导文件。


# cp /data/orig/rhcos-4.3.8-x86_64-metal.x86_64.raw.gz pre-install/1.raw.gz
# openshift-install create manifests --dir pre-install/

修改manifest目录中的cluster-scheduler-02-config.yml文件,并把这个文件中的master-Schedulable=true改成false,这样可以让Master节点不参与业务Pod调度。


# vi pre-install/manifests/cluster-scheduler-02-config.yml

接下来,通过安装工具生成ignition文件。


# openshift-install create ignition-configs --dir=pre-install

命令执行成功后,pre-install目录生成OpenShift安装所需的ignition文件,如图3-18所示。

图3-18 生成的ignition文件

修改ign文件的权限,否则安装过程会出现权限错误。


# chmod 755 pre-install/* 

9.启动Bootstrap节点

在vSphere上使用RHCOS的ISO引导虚拟机启动,进入维护模式,查看RHCOS的网卡和磁盘名,我们以查看的结果为ens33和sda为例。

重启系统引导虚拟机启动,按tab键可以输入启动参数,启动参数内容如下(内容不要换行)。


coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/bootstrap.ign ip=28.4.184.101::28.4.184.254:255.255.255.0:bootstrap.
    ocp4.example.com:ens33:off nameserver=28.4.184.100

等待片刻,Bootstrap节点会启动。Bootstrap在启动过程中会从Mirror Registry拉取OpenShift离线镜像、启动etcd-singer容器并且启动两个端口监——443(k8s-api-server使用)和22623(machine-config-server使用),如图3-19所示。

图3-19 Bootstrap主机上的容器

如果两个端口的监听和etcd-singer容器无法启动,就需要排查本地镜像仓库是否配置正确且可以被正常访问,并检查HAproxy配置是否正确。

etcd-singer容器启动后,代表Bootstrap节点上的临时控制平面已经生成,接下来需要手工启动Master节点。

此时,我们可以在管理机上观察OpenShift的安装日志。

设置环境变量。


#export KUBECONFIG=/var/www/html/materials/pre-install/auth/kubeconfig

查看Bootstrap安装完毕前的日志。


#openshift-install --dir=/var/www/html/materials/pre-install wait-for bootstrap- 
    complete --log-level=debug

查看整体安装日志。


#openshift-install --dir=/var/www/html/materials/pre-install wait-for install-complete

10.启动Master节点

在vSphere上使用RHCOS的ISO引导三个Master虚拟机启动,系统引导后,按tab键可以输入启动参数,分别在三个虚拟机上输入以下内容。


# Master01
coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz  coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/master.ign ip=28.4.184.102::28.4.184.254:255.255.255.0:master01.
    ocp4.example.com:ens33:off nameserver=28.4.184.100
# Master02
coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz  coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/master.ign ip=28.4.184.103::28.4.184.254:255.255.255.0:master02.
    ocp4.example.com:ens33:off nameserver=28.4.184.100
# Master03
coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz  coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/master.ign ip=28.4.184.104::28.4.184.254:255.255.255.0:master03.
    ocp4.example.com:ens33:off nameserver=28.4.184.100

等待Master节点启动后,会与Bootstrap节点通信,Bootstrap上的etcd-singer容器会在三个Master节点上创建出三节点etcd集群,最终完成Master节点的安装。

当安装日志出现如下提示时,代表Master节点已经部署成功,Bootstrap节点的使命已经完成,可以关闭或销毁。


# openshift-install --dir=/var/www/html/materials/pre-install wait-for bootstrap-
    complete --log-level=debug
"INFO It is now safe to remove the bootstrap resources"

11.启动Worker节点

在vSphere上使用RHCOS的ISO引导三个Worker虚拟机启动,系统引导后,按tab键可以输入启动参数,分别在三个虚拟机上输入以下内容。


# Worker01
coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz  coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/worker.ign ip=28.4.184.105::28.4.184.254:255.255.255.0:worker01.
    ocp4.example.com:ens33:off nameserver=28.4.184.100
# Worker02
coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz  coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/worker.ign ip=28.4.184.106::28.4.184.254:255.255.255.0:worker02.
    ocp4.example.com:ens33:off nameserver=28.4.184.100
# Worker03
coreos.inst.install_dev=sda coreos.inst.image_url=http://28.4.184.100:8080/pre-
    install/1.raw.gz  coreos.inst.ignition_url=http://28.4.184.100:8080/pre-
    install/worker.ign ip=28.4.184.107::28.4.184.254:255.255.255.0:worker03.
    ocp4.example.com:ens33:off nameserver=28.4.184.100

OpenShift的Worker节点是由Master节点完成部署的。在部署的过程中,我们可以看到ClusterOperator依次创建。

Worker开始安装后,通过证书访问oc集群。


# export KUBECONFIG=/var/www/html/materials/pre-install/auth/kubeconfig

然后查看安装中是否有需要批准的csr,如图3-20所示。


# oc get csr

图3-20 待批准的节点

使用如下命令行,批准所有Pending状态的csr。


# oc get csr -ojson | jq -r '.items[] | select(.status == {} ) | .metadata.name' | 
    xargs oc adm certificate approve

反复执行批准证书命令,直到没有新的Pending csr出现。

通过下面的命令行查看ClusterOperator状态,确保ClusterOperator都安装成功,确保安装进度执行完毕。


#oc get co
# oc get clusterversion

当我们看到所有的ClusterOperator都已经正确安装,也就表示OpenShift集群离线部署大功告成!

查看整体安装日志,会列出OpenShift集群console的地址,以及kubeadmin用户的密码。


#openshift-install --dir=/var/www/html/materials/pre-install wait-for install-complete
INFO Install complete!
INFO Access the OpenShift web-console here: https://console-openshift-console.
    apps.ocp4.example.com
INFO Login to the console with user: kubeadmin, password: BmLFD-U4Qph-jTMXF-jtqbw

在集群部署完成后,通常并不能直接使用,还需要经过一系列的部署后配置,我们将在3.2.4节中进行介绍。

12.OpenShift 4.6安装方式的微调

在OpenShift 4.5中我们会使用rhcos-installer.x86_64.iso镜像引导主机启动,这个镜像的大小是89M,启动后再通过http server下载rhcos-metal.x86_64.raw.gz安装RHCOS,如图3-21所示。

图3-21 OpenShift 4.5中的RHCOS安装镜像

OpenShift从4.6版本开始,提供了一个新的RHCOS iso:rhcos-live.x86_64.iso。链接如下所示,镜像如图3-22所示,rhcos-live.x86_64.iso镜像大小为876M。


https://mirror.openshift.com/pub/openshift-v4/x86_64/dependencies/rhcos/latest/latest/

图3-22 rhcos-live.x86_64.iso镜像

在OpenShift 4.6的安装中,我们使用rhcos-live.x86_64.iso镜像引导主机启动后,启动参数就不必再指定下载rhcos-metal.x86_64.raw.gz的参数,其他内容不变,如图3-23所示。

图3-23 OpenShift 4.6离线安装启动参数

和OpenShift 4.5相比,OpenShift 4.6离线+bare metal安装除了本小节提到的参数设置变化外,其他步骤完全相同。 Ee2Pz9vyF4TSH1c/NFiigWrPEisxLV+I0ncK9kEeG00QxRbjIf0RkZLk44pHgmoC

点击中间区域
呼出菜单
上一章
目录
下一章
×