OpenShift 安裝規劃思考以及Internal Registry 安裝
最近在協助合作夥伴安裝 OpenShift 4.8 的時候,剛好遇到一些資源設定不足的部分,導致工作節點一多就裝不起來的問題,在這邊紀錄一下 trouble shooting
的過程以及反思。
另外也會附上安裝好之後要部署 Internal Registry
的做法,在 OpenShift 要使用 s2i
或是自動構建容器映像檔,都會需要 Internal Registry
,身為 OpenShift 管理員是一定要裝這個的。
♖ 環境
OpenShift 4.8.13
♖ 安裝規劃
這張圖是我從 Red Hat OpenShift Installation Guide 拷貝下來的,可以看到前置作業都做好了之後,安裝流程會從 Bootstrap 機(點火機)開始、Controller Nodes (別稱 Master 節點)安裝、Computer Nodes (別稱 Worker 節點)安裝完畢。
基本上我在做建置規劃的時候,會參考 Red Hat 官方文件 - Installing a user-provisioned cluster on bare metal 做資源的規劃。如果環境不一樣,比方說使用公有雲、或是有地端虛擬化的環境也沒關係,看 Bare Metal 文件就是標竿,使用 User Provision Installation 在任何環境都可以裝起來,只是手動的部分有點小麻煩。
在 Minimum Resource Requirements 這個小節可以看到 OpenShift 最低需要配置的數量:
可以看到這張表格微妙的沒有寫出節點數量,這是因為我們除了安裝之外還需要考慮後續的擴展能力,經過測試,如果是在 master nodes 4 vCPU / 16 GB 的條件下,在 OpenShift 4.8.13 版本下可以同時啟動兩個 worker nodes,如果是三台 worker nodes,會在 worker nodes 安裝過程發現有些 cluster operators 永遠起不來。
這是因為 OpenShift 在安裝過程中非常吃 master nodes 的 CPU 運算資源,如果使用 ssh 指令觀察,會發現 master 的 kubernetes-api 有非常多的溝通紀錄。安裝過後 CPU 的資源就會緩和下來,不會再維持這麼高的消耗率。
那如果 CPU 不夠用怎麼辦,是不是安裝會比較慢? 一般來說,CPU 資源不夠常見結果就是效能變差,但是現在是在安裝的過程,所以有可能 worker 節點呼叫 master節點的 API 叫不到,有些重要的元件就安裝不起來,安裝過程就有可能失敗。
所以最保險的做法是,把 master 節點的資源規劃的充裕一點,比方說 8 vCPU / 16 GB memory 。
♖ Trouble Shooting 方法
安裝完成可以透過 oc get nodes
以及 oc get co
兩條指令確認是否安裝完畢。
1 | [root@bastion install-dir]# oc get nodes |
像前一章提到的 master nodes 資源不足的情況,在下 oc get co
命令之後,會發現有部分的 cluster operators
的 AVAILABLE
狀態是呈現 False
的狀態。
另外分享兩個官方寫的 trouble shooting 文件給大家,在安裝過程中可能會需要針對節點和容器進行除錯,建議把這兩份文件列出來的指令複製貼上到自己整理的 hackmd 或是文字筆記本上,就不用一次記那麼多的指令了:
♖ Internal Registry 建置
安裝完成之後,我們會需要試著部署容器測試這座 OpenShift 叢集是否可用
通常我會透過 Developer Console
的 Developer Catalog
頁面部署 Red Hat 提供的模板做確認。
如前言所述,因為 Internal Registry
部署沒有成功,所以也無法透過 s2i 的方式部署模板,啟動 pod
的時候會顯示如下錯誤訊息:
根據某個 Red Hat 的某個 ticket 敘述(我忘記在哪邊看到@@),openshift SDN 啟動的過程如果有 restart 的情況發生,會影響 registry 的啟動,所以我們先找出有 restart 紀錄的 pods:
1 | oc get pods -n openshift-sdn |
然後把有 restart 紀錄的 pods 全砍了,放心的砍沒關係,反正 pods 會重啟:
1 | [root@bastion install-dir]# oc get pods -n openshift-sdn |
砍完之後依照建置叢集的類別,選擇其中一種方式更新 image registry 的設定:
- 測試用的 OpenShift 叢集
1 | oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' |
- 正式的 OpenShift 叢集 (比方說 production 環境)
1 | oc patch config.imageregistry.operator.openshift.io/cluster --type=merge -p '{"spec":{"rolloutStrategy":"Recreate","replicas":1}}' |
成功部署的話,在 openshift-image-registry
project 會有image-registry-xxxx
pod 存在:
♖ 自動 Approve CSRs
OpenShift 安裝過程有點漫長,在安裝快要結束時,下達 oc get csr
命令可以看到這些 CSRs
,接著我們可以透過 oc get csr -o name | xargs oc adm certificate approve
去 approve 這些 CSRs。
Day-2 維運時,部分 Cluster Operators
在更新後也會產生 CSRs,這時候我們可以參考這個 repo建立 batch
,這個 batch
文件可以透過每一個小時執行一次上面所講的 approve
命令自動 approve CSRs,不然的話,有可能會出現 Pending
狀態而無法完成叢集更新:
1 | [root@bastion install-dir]# oc get csr |
以上是本次的分享。
♖ Reference
♞ Red Hat OpenShift Installation Guide
♞ Installing a user-provisioned cluster on bare metal
♞ [Recommended host practices] (https://docs.openshift.com/container-platform/4.8/scalability_and_performance/recommended-host-practices.html)
♞ Troubleshooting installations
♞ Investigating pod issues
♞ Configuring the registry for vSphere
♞ vchintal/ocp4-auto-approve-csr