官术网_书友最值得收藏!

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安裝除了本小節提到的參數設置變化外,其他步驟完全相同。

主站蜘蛛池模板: 涪陵区| 泌阳县| 内乡县| 新源县| 滦平县| 黄陵县| 渑池县| 辽阳市| 醴陵市| 深州市| 恭城| 宜宾市| 宝清县| 射洪县| 崇阳县| 红河县| 平果县| 弋阳县| 比如县| 木兰县| 小金县| 高清| 宜章县| 邯郸市| 鞍山市| 岳阳市| 宾阳县| 内乡县| 汝阳县| 丽江市| 岳普湖县| 睢宁县| 承德市| 申扎县| 沙洋县| 洛阳市| 福建省| 凤冈县| 肇州县| 定西市| 宜宾县|