在OpenShift 4.5.1发行之前,只能在UPI(用户提供者基础结构)版本的vSphere平台上安装集群。用户必须独立准备安装所需的基础结构,即准备:
- 外部网络平衡器(一个用于平衡群集流量,另一个用于平衡应用程序流量);
- 许多DNS记录,包括SRV记录;
- DHCP服务器,用于向群集节点发布地址(或者,或者决定一种用于设置静态寻址的方法);
- 安装RHCOS时用于传输点火配置的HTTP服务器。
同时,在准备环境时发生的任何错误(并且您知道-“错误的人性”)都会导致群集安装失败。为了以某种方式简化此任务,第三方项目开始出现,以加快环境准备工作并减少此过程中“人为因素”的影响。OCP帮助程序节点项目是最著名的项目之一,该项目为通过Ansible在一台服务器上安装OpenShift准备了所有必要的配置。还有一些选项可以通过Terraform安装带有基础结构准备的集群。
但是,此类项目并不能解决在vSphere中部署群集的所有问题。通常需要提供一个OpenShift集群即服务(“ kubernetes即服务”),在这种情况下,自动化OpenShift安装不是一件容易的事-需要手动干预:观察在集群节点上安装OS的顺序,确认集群中的证书,等待集群运营商的安装,以及等等如有必要,您可以使此过程自动化,但是创建和维护此类解决方案也需要时间和资源。
从版本4.5.1开始。 OpenShift于2020年7月13日发布,支持使用IPI(安装程序提供的基础架构)在vSphere中安装。这意味着安装程序现在可以:
- 在vSphere中独立准备所有必要的资源;
- 使用一个命令创建一个OpenShift集群;
- 使用一个命令删除先前创建的OpenShift集群。
此外,在完成这样的安装后,管理员可以使用OpenShift中的一个命令来添加或删除群集节点。或完全启用自动扩展功能,使群集能够独立响应负载变化。
但是新的安装方法有一个限制-所有群集节点以及执行安装的服务器都必须直接访问Internet。如果管理员在公司代理服务器后面,或者该群集无法使用Internet,则必须像以前一样以UPI版本安装该群集。
准备周围的基础设施
在安装OpenShift时,不能不准备基础结构而已,但是任务列表变得更加适中:
- 需要一个DHCP服务器(向OpenShift节点发布地址);
- 需要两个DNS记录(用于群集API的VIP和用于入口流量的VIP);
- 在vSphere中,您将需要一个帐户,该帐户具有安装OpenShift的文档中介绍的一组特权。
在本例中,要安装OpenShift并运行所有必需的服务,我们使用了运行CentOS 7的shift-is01服务器。
DHCPD配置
此处没有具体说明,我们为OpenShift服务器选择地址池(192.168.111.100 -192.168.111.150):
[ocp@shift-is01 ~]$ sudo cat /etc/dhcp/dhcpd.conf
authoritative;
ddns-update-style interim;
default-lease-time 14400;
max-lease-time 14400;
option routers 192.168.111.1;
option broadcast-address 192.168.111.255;
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.111.10;
option domain-name «ocp45.demo.local»;
subnet 192.168.111.0 netmask 255.255.255.0 {
interface ens192;
pool {
range 192.168.111.100 192.168.111.150;
# this is PXE specific
filename «pxelinux.0»;
next-server 192.168.111.10;
}
}
DNS配置
对于我们的集群,创建了ocp45.demo.local区域,并创建了DHCP范围的A和PTR记录。为API和Ingress创建所需的OpenShift条目:
BIND区域ocp45.demo.local中的一个块:
api IN A 192.168.111.190
*.apps IN A 192.168.111.191
之后,我们从vCenter下载证书,并将其作为受信任服务器安装。
安装vCenter证书:
[ocp@shift-is01 ~]$ mkdir certs; cd certs; curl -kO https://vc01.demo.local/certs/download.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5795 100 5795 0 0 15500 0 --:--:-- --:--:-- --:--:-- 15536
[ocp@shift-is01 certs]$ unzip ./download.zip
Archive: ./download.zip
inflating: certs/lin/e01a85a3.r1
inflating: certs/mac/e01a85a3.r1
inflating: certs/win/e01a85a3.r1.crl
inflating: certs/lin/e01a85a3.0
inflating: certs/mac/e01a85a3.0
inflating: certs/win/e01a85a3.0.crt
[ocp@shift-is01 certs]$ sudo cp ./certs/lin/e01a85a3.* /etc/pki/ca-trust/source/anchors
[ocp@shift-is01 certs]$ sudo update-ca-trust extract
安装OpenShift集群
现在,安装过程本身尽可能简单:
- 从Red Hat网站获取安装程序和密钥(Pull Secret);
- 使用install-config.yaml和计划的集群配置准备yaml文件;
- 安装集群。
我们得到了安装程序和密钥
从RedHat下载安装程序和PullSecret,《安装指南》中描述了此过程。在我们的示例中,工作所需的所有二进制文件都位于用户主目录ocp的bin目录中。
[ocp@shift-is01 bin]$ ll
total 499036
-rwxr-xr-x 1 ocp ocp 78599208 Jul 16 11:53 kubectl
-rwxr-xr-x 1 ocp ocp 78599208 Jul 16 11:53 oc
-rwxr-xr-x 1 ocp ocp 353804288 Jul 16 11:53 openshift-install
-rw-r--r-- 1 ocp ocp 954 Jul 16 11:53 README.md
准备install-config.yaml
[ocp@shift-is01 ~]$ cat ./install-config.yaml
apiVersion: v1
baseDomain: demo.local
compute:
- hyperthreading: Enabled
architecture: amd64
name: worker
replicas: 3
platform:
vsphere:
cpus: 2
coresPerSocket: 1
memoryMB: 8192
osDisk:
diskSizeGB: 120
controlPlane:
hyperthreading: Enabled
architecture: amd64
name: master
replicas: 3
platform:
vsphere:
cpus: 4
coresPerSocket: 1
memoryMB: 16384
osDisk:
diskSizeGB: 120
metadata:
name: ocp45
networking:
networkType: OpenShiftSDN
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
serviceNetwork:
- 172.30.0.0/16
platform:
vsphere:
vcenter: _vCenter
username: __vCenter
password: _
datacenter: _Datacenter
defaultDatastore: _Datastre
network: _Network
cluster: _Cluster
apiVIP: 192.168.111.190
ingressVIP: 192.168.111.191
fips: false
pullSecret: '_PullSecret'
sshKey: '_SSH_Public_Key'
使用将来的群集配置准备此文件时,需要注意三件事。
首先,集群将记住在install-config中定义的集群工作节点的配置。并且在扩展群集时将创建的所有后续节点将具有完全相同的配置。因此,有必要立即确定工作节点的最佳配置。
其次,希望群集的内部寻址(群集网络和服务网络)不干扰您的内部寻址。否则,群集中的POD可能无法打开与外部资源的连接(例如,转到外部数据库)。
第三,群集名称(元数据字段)必须与该群集的域匹配。在本例中,群集名称为ocp45,其地址位于ocp45.demo.local域中。
您也可以通过openshift-install安装程序准备install-config.yaml,但之后将无法确定辅助节点的配置和内部寻址。无论如何,通过安装程序创建install-config.yaml然后修复它是有意义的。
安装集群
安装群集的过程并没有根本改变。启动安装程序后:
- 安装程序使用资源创建引导节点以初始化主节点;
- 安装程序将创建三个主节点;
- 引导节点和三个主节点形成一个集群控制平面;
- 安装程序禁用并删除引导节点;
- 控制平面部署工作程序节点并配置必要的群集服务。
群集设置过程。
我们开始安装集群并等待。安装过程通常需要30-40分钟:
集群安装
[ocp@shift-is01 ~]$ mkdir ocp45; cp ./install-config.yaml ./ocp45
[ocp@shift-is01 ~]$ ./bin/openshift-install create cluster --dir=ocp45 --log-level=info
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.5/45.82.202007062333-0/x86_64/rhcos-45.82.202007062333-0-vmware.x86_64.ova?sha256=4189881eadb0b0cfd85c2f2ab1c32f6a320b71713cac3bd4179dba746ad4070a'
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp45.demo.local:6443...
INFO API v1.18.3+8b0a82f up
INFO Waiting up to 40m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 30m0s for the cluster at https://api.ocp45.demo.local:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp45.demo.local
INFO Login to the console with user: «kubeadmin», and password: «xxxxxxxxxxxxxxx»
INFO Time elapsed: 41m56s
RHCOS引导问题
如果Internet连接速度慢,则安装可能无法进行:安装程序将不等待RHCOS映像加载。您可以从安装程序显示的链接中预先下载RHCOS映像。生成的文件必须放在名称为5dad1f50634794b0e1ff8a830cad4b98的〜/ .cache / openshift-installer / image_cache目录中,然后重新开始安装。这次openshift-install将把它从文件系统中取出:
INFO The file was found in cache: /home/ocp/.cache/openshift-installer/image_cache/5dad1f50634794b0e1ff8a830cad4b98. Reusing...
就是这样,集群已经准备好了:
[ocp@shift-is01 ~]$ export KUBECONFIG=/home/ocp/ocp45/auth/kubeconfig
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 33m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 33m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 33m v1.18.3+6025c28
ocp45-64clc-worker-f7bw2 Ready worker 15m v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 15m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 15m v1.18.3+6025c28
扩展和删除OpenShift集群
新方法的优点不仅在于安装现在更容易,而且所需的准备工作更少。通过IPI在vSphere中安装的OpenShift集群将vShpere视为成熟的云平台,并可以利用其“弹性”优势。
vSphere平台上的集群(例如像Amazon AWS或Google GCP之类的大型云平台)现在具有由安装程序自动生成的计算机集:
OpenShift machineset
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp45-64clc-worker 3 3 3 3 50m
这使您可以减少群集扩展以运行单个命令。OpenShift将自行创建一个节点,然后将其添加到群集中或将其删除。
将节点添加到集群
[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=4 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled
[ocp@shift-is01 ~]$ ./bin/oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
ocp45-64clc-worker 4 4 3 3 61m
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 75m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 75m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 75m v1.18.3+6025c28
ocp45-64clc-worker-f7bw2 Ready worker 57m v1.18.3+6025c28
ocp45-64clc-worker-hvjmn Ready worker 9m27s v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 57m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 57m v1.18.3+6025c28
从集群中删除节点
[ocp@shift-is01 ~]$ ./bin/oc scale --replicas=3 machineset ocp45-64clc-worker -n openshift-machine-api
machineset.machine.openshift.io/ocp45-64clc-worker scaled
[ocp@shift-is01 ~]$ ./bin/oc get nodes
NAME STATUS ROLES AGE VERSION
ocp45-64clc-master-0 Ready master 97m v1.18.3+6025c28
ocp45-64clc-master-1 Ready master 98m v1.18.3+6025c28
ocp45-64clc-master-2 Ready master 98m v1.18.3+6025c28
ocp45-64clc-worker-hvjmn Ready worker 32m v1.18.3+6025c28
ocp45-64clc-worker-m277w Ready worker 79m v1.18.3+6025c28
ocp45-64clc-worker-wcjj7 Ready worker 79m v1.18.3+6025c28
群集自创建和删除节点的能力可用于配置OpenShfit群集的自动缩放。
通常,通过vSphere IPI安装,OpenShift容器编排平台的所有管理都将转移到kubernetes端:
- OpenShift管理员通过计算机集管理群集资源的创建和删除。
- OpenShift管理员还通过macheneconfig管理群集节点上的OS设置配置。
这非常适合RedHat针对集群下的基础架构声明的“零管理”方法。
除了自动创建集群之外,新安装程序还可以自行删除它们。Terraform安装程序的“内幕”以及安装配置文件所在的目录中,仍保留Terraform状态文件(terraform.tfstate)。这使您可以删除以前创建的集群,而不必担心意外地“触摸”其他人的资源:
[ocp@shift-is01 ~]$./bin/openshift-install destroy cluster --dir=ocp45 --log-level=info
如果例如在测试或培训环境中不断创建和删除群集,则此功能还可以帮助自动执行此过程并防止过程中可能的人为错误。
结论
在VMware vSphere上安装OpenShift是最常见的安装选项。OpenShift在版本4.5.1中出现的与vSphere作为云平台一起使用的能力极大地简化了其管理,提供了从平台创建,扩展和删除到生命周期流程自动化的交钥匙解决方案。
现在,用于服务基于Red Hat OpenShift和VMware vSphere的本地解决方案的“基础结构即代码”方法变得越来越便宜。
作者:Jet Infosystems PS DevOps解决方案部门架构师Sergey Artemov加入Telegram DevSecOps Talks社区。