- OpenShift在企業中的實踐:PaaS DevOps微服務(第2版)
- 魏新宇 郭躍軍
- 3177字
- 2021-11-05 10:17:18
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服務器??梢允褂胋ind或者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安裝除了本小節提到的參數設置變化外,其他步驟完全相同。
- DBA攻堅指南:左手Oracle,右手MySQL
- TypeScript Blueprints
- Spring Boot+Spring Cloud+Vue+Element項目實戰:手把手教你開發權限管理系統
- ASP.NET動態網頁設計教程(第三版)
- 深入淺出DPDK
- Modern JavaScript Applications
- Windows內核編程
- Bootstrap for Rails
- 測試架構師修煉之道:從測試工程師到測試架構師
- JavaScript悟道
- 從零開始構建深度前饋神經網絡:Python+TensorFlow 2.x
- XML程序設計(第二版)
- 從“1”開始3D編程
- 和孩子一起學編程:用Scratch玩Minecraft我的世界
- INSTANT LESS CSS Preprocessor How-to