OpenShift 4.5.1:在vSphere IPI上安装

如果您以前曾经处理过OpenShift,那么您会知道从头开始在vSphere中安装OpenShift集群是多么艰巨。主要是因为需要准备周围的基础设施。随着OpenShift 4.5.1的发布,此任务变得更加容易。







在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时,不能不准备基础结构而已,但是任务列表变得更加适中:



  1. 需要一个DHCP服务器(向OpenShift节点发布地址);
  2. 需要两个DNS记录(用于群集API的VIP和用于入口流量的VIP);
  3. 在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集群



现在,安装过程本身尽可能简单:



  1. Red Hat网站获取安装程序和密钥(Pull Secret)
  2. 使用install-config.yaml和计划的集群配置准备yaml文件;
  3. 安装集群。


我们得到了安装程序和密钥



从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端:



  1. OpenShift管理员通过计算机集管理群集资源的创建和删除。
  2. 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社区






All Articles