項目位址 https://github.com/KubeOperator/KubeOperator
KubeOperator 支援兩種 Kubernetes 叢集部署方式,一種是手動模式,另外一種是自動模式。手動模式下,使用者需要自行準備主機和 NFS 作為持久化存儲。
手動模式下 Kubernetes 叢集的規劃、部署和管理包含以下内容:
- 叢集規劃 ( Day 0)
- 系統設定
- 準備主機
- 準備存儲
- 叢集部署( Day 1)
- 建立叢集
- 部署叢集
- 服務暴露
- 叢集營運(Day 2)
- 叢集管理
- 叢集更新
- 叢集伸縮
- 叢集備份
本章節以手動模式部署一個開發測試用叢集為例,需要準備三台主機,每個主機的用途和需求是:
名稱 | 角色 | 數量 | 作業系統 | 最低配置 | 推薦配置 | 描述 |
master-1 | Master | 1 | CentOS 7.6 | 2C 4G | 4C 16G | 運作 etcd、kube-apiserver、kube-scheduler。 |
worker-1 | Worker | 1 | CentOS 7.6 | 4C 16G | 8C 32G | 運作 kubelet、應用工作負載。 |
nfs-storage | NFS | 1 | CentOS 7.6 | 2C 8G | 4C 16G | 提供 NFS 持久化存儲,磁盤建議 500G 以上。 |
1 叢集規劃( Day 0)
1.1 系統設定
在使用 KubeOperator 之前,必須先對 KubeOperator 進行必要的參數設定。這些系統參數将影響到 Kubernetes 叢集的安裝及相關服務的通路。
1.1.1 主機 IP 、叢集域名字尾 和 NTP Server
本機 IP 指安裝 KubeOperator 機器自身的 IP。KubeOperator 所管理的叢集将使用該 IP 來通路 KubeOperator。
域名字尾為叢集節點預設通路位址的字尾,叢集暴露出來的對外服務的 URL 都将以該域名字尾作為通路位址字尾,例如: grafana.apps.mycluster.fit2cloud.com。同時支援建立叢集時修改域名字尾。
NTP Server 用來實作叢集所有主機時間同步,預設可以為空,也可以網上查找可用的 NTP Server 。
1.1.2 憑據
憑據為 KubeOperator 連接配接主機資産的憑證。在左側導航菜單中選擇【設定】,進入【設定】頁後點選【憑據】TAB 可以看到已添加憑據資訊。
點選【添加】按鈕添加 password 方式的憑據。
憑據新增使用密鑰方式登入主機。單擊【添加】按鈕,選擇 privatekey 方式登入目标主機,輸入憑據名稱和 root 賬号,然後将 id_rsa 私鑰内容複制到密鑰框裡,确認。
注:密鑰方法連接配接主機舉例說明:在 KubeOperator 主機中首先生成 id_rsa 和 id_rsa.pub 密鑰對,将 id_rsa.pub 公鑰裡面内容添加要連接配接的目标主機 authorized_keys 檔案中,authorized_keys 檔案權限需要設定為 600 。然後在 KubeOperator 控制台的【憑據】頁面,将開始生成的 id_rsa 私鑰檔案内容複制到憑據的密鑰框中。注意這裡的賬号需要 root 賬号。
1.2 準備主機
我們将準備添加三台主機 master-1、worker-1、nfs-storage,用來作為 master 節點、worker 節點 及 NFS 存儲。
在左側導航菜單中選擇【主機】,進入【主機】頁後可以看到已添加主機的詳細資訊,包括 IP、CPU、記憶體、作業系統等。
點選【添加】按鈕添加主機。輸入名稱和 IP 位址、指定端口号、選擇對應的憑據,最後點選【送出】按鈕即可完成一台主機的添加。同樣地,依次添加 master-1,worker-1 和 nfs-storage 三台主機。
1.3 準備存儲
KubeOperator 支援自動建立 NFS 存儲和添加自行準備的 NFS 存儲以外,新增加支援雲原生存儲解決方案 Rook Ceph ,供手動模式的 K8s 叢集使用後面章節将詳細介紹。下面介紹如何添加 KubeOperator 為叢集自動建立的 NFS 存儲:
KubeOpeartor 控制台【存儲】,單擊【添加】,選中建立 NFS ,在主機下拉清單,選擇上述 1.2 節添加的 NFS 主機 (名稱為:nfs-storage),如果 NFS 無網絡通路限制,白名單選項可以預設填 ” * “,挂載路徑可按需填寫,如 /nfs,點選【送出】。NFS 安裝成功後,可以在 NFS 清單中看到該存儲處于運作中狀态。
添加成功後,建立叢集時如果選擇 NFS 存儲,可以看到該 NFS 存儲。
注:自行搭建的 NFS 服務僅适合在開發測試環境使用。KubeOperator 還支援錄入已有的 NFS 存儲(比如專業的 NAS 存儲)。單擊【添加】選中“錄入 NFS” ,輸入存儲名稱、白名單選項可以預設選項、服務位址、挂載路徑,送出即可。需要注意另外一點添加 NFS 存儲時,存儲的名稱不能和叢集名稱相同。
2 叢集部署(Day 1)
2.1 建立叢集
2.1.1 基本資訊
點選【叢集】頁的【添加】按鈕進行叢集的建立。在【基本資訊】裡輸入叢集的名稱,選擇該叢集所要部署的 Kubernetes 版本。
注:叢集名稱不要和主機名稱、存儲節點名稱相同。
2.1.2 部署模型
選擇 Kubernetes 叢集的部署模型。KubeOperator 目前支援一主多節點和多主多節點。選擇部署模型後,KubeOperator 将展示叢集中各個角色節點的詳細配置要求。現在節點支援作業系統包括 CentOS 7.4/7.5/7.6/7.7 。
KubeOperator 支援 MultiAZ(多故障域),多主多節點模式适合在 MultiAZ 下部署,實作雙活環境下的高可用。
2.1.3 配置節點
【添加主機】環節,把叢集所需的主機添加到了 KubeOperator 中。在【配置節點】環節,可以根據需求選擇 worker 節點數量,這裡以一個 master 和一個 worker 節點為例。
2.1.4 選擇節點
在【選擇節點】環節,則可以根據不同的節點角色,選擇主機清單中的各個主機。
2.1.5 配置網絡
【配置網絡】環節,選擇叢集的網絡插件,目前版本支援 Flannel 和 Calico,這裡我們選擇 Calico BGP 網絡方式。
如果叢集節點全部都在同一個二層網絡下,請選擇"host-gw"。如果不是,則選擇"vxlan"。“host-gw” 性能優于 “vxlan”。選項 Service CIDR 和 POD CIDR 保證不和已有主機節點 IP 段沖突即可使用。
2.1.6 配置存儲
【添加存儲】環節,支援兩張存儲方案,一種是 NFS 存儲,新增加 Rook Ceph 存儲方案。
選擇使用 Rook Ceph 存儲時,需要設定存儲媒體和存儲路徑,存儲媒體使用推薦測試環境使用的配置,Path 使用推薦路徑 /data/ceph,當然可以根據實際環境修改配置。
如何登入 Ceph 控制台檢視存儲監控資訊,請參考第 3.1.2.1 節詳細内容。
如果選擇 NFS 存儲, NFS 主機的節點已經在 1.3 節添加到【存儲】頁面,這裡選擇外部持久化存儲時,在下來菜單中會列出該節點。
2.1.7 配置檢測
完成上述 6 個步驟後,KubeOperator 會對目前叢集所選擇的部署節點進行配置檢測,包含 CPU、記憶體和作業系統的檢測,檢查是否滿足節點最低配置要求。
2.1.8 其他設定
在【其他設定】中,我們增加了建議的可運作 POD 數量和 Docker 資料目錄。使用者可根據實際環境修改。
2.1.9 叢集配置概覽
所有步驟完成後,會有一個叢集配置概覽頁對之前步驟所設參數進行彙總,使用者可在此頁進行叢集配置的最後檢查。
2.2 部署叢集
在叢集清單中點選要進行部署的叢集名稱,預設展示的是該叢集的【概覽】資訊。【概覽】頁中展示了 Kubernetes 叢集的諸多詳情,包括叢集狀态,Worker 狀态,叢集描述資訊等。點選【概覽】頁最下方的【安裝】按鈕進行 Kubernetes 叢集的部署。
叢集部署開始後,将會自動跳轉到【任務】頁。在【任務】頁裡可以看到叢集部署目前所執行的具體任務資訊。
如果是内網環境的話,一個典型的 3 節點叢集的部署大概需要 10 分鐘左右的時間。在出現類似下圖的資訊後,表明叢集已部署成功:
2.3 服務暴露
在叢集清單中點選叢集名稱,點選【F5 BIG-IP】添加 F5 BIG-IP,為 Kubernetes 配置 F5-BIGIP-CONTROLLER 後,我們可以通過 F5 BIGIP 裝置向外網暴露服務。
3 叢集營運(Day 2)
3.1 叢集管理
回到叢集的【概覽】頁,該頁提供了 Grafana、Prometheus、Registry-console、Dashboard 、Traefik、Weave Scope 六個管理系統快捷通路方式。這六個系統的通路域名需要在 DNS 伺服器中添加相應的域名記錄。如沒有使用 F5 BIG-IP 暴露服務,也可以通過修改本地主機的 hosts 檔案來達到相同的作用。
eg:
# 編輯 /etc/hosts
testerdeMacBook-Pro:~ tester$sudo vim /etc/hosts
# 替換 WORKER_IP 為任意 worker 節點 IP 位址
WORKER_IP grafana.apps.mycluster.fit2cloud.com
WORKER_IP prometheus.apps.mycluster.fit2cloud.com
WORKER_IP registry-ui.apps.mycluster.fit2cloud.com
WORKER_IP dashboard.apps.mycluster.fit2cloud.com
WORKER_IP master-1.mycluster.fit2cloud.com
WORKER_IP traefik.apps.mycluster.fit2cloud.com
WORKER_IP scope.weave.apps.mycluster.fit2cloud.com
WORKER_IP ceph.apps.mycluster.fit2cloud.com
3.1.1 Dashboard
3.1.1.1 KubeOperator Dashboard
KubeOperator 2.2 中新增功能【概覽】頁,該頁面集中顯示了叢集相關的統計資訊,包括叢集狀态,容量資訊,Nodes 數量、Namespaces 數量、Pods 數量等,還包括異常日志,異常 Pod 的資訊統計。
3.1.1.2 K8s Dashboard
K8s Dashboard 對應的是 Kubernetes 的控制台,從浏覽器中通路 Kubernetes 控制台需要用到【令牌】。點選【概覽】頁下方的【擷取TOKEN】按鈕擷取令牌資訊,将令牌資訊複制到粘貼闆。
輸入令牌資訊後,點選【登入】,則可進入 Kubernetes 控制台。
3.1.2 叢集監控
3.1.2.1 通路 Ceph 控制台
KubeOperator 新增支援雲原生存儲解決方案 Rook Ceph,當建立手動模式叢集,存儲方案選擇 Rook Ceph 時 ,在叢集【概覽】頁,描述資訊存儲類型中可以通過 Rook Ceph 圖示連結跳轉至 Ceph 控制台。
Ceph 控制台使用者名是 admin,密碼需要通過執行指令方式擷取。擷取方式如下:
#此指令可以在叢集概覽頁下面的 WebKubectl 中或者在叢集中任意節點中執行。
$ kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
登入 Ceph 控制台後,可以看到叢集存儲的監控資訊。
3.1.2.2 通路 Grafana
Grafana 對 Prometheus 采集到的監控資料進行了不同次元的圖形化展示,更友善使用者了解整個 Kubernetes 叢集的運作狀況。點選 Grafana 下方的【轉到】按鈕通路 Grafana 控制台。
叢集級别的監控面闆:
節點級别的監控面闆:
3.1.2.3 通路 Weave Scope
Weave Scope 用來監控、可視化和管理 Kubernetes 叢集。點選 Weave Scope 下方的【轉到】按鈕即可通路 Weave Scope 控制台。點選控制台的頂部【Pod】,會自動生成容器之間的關系圖,友善了解容器之間的關系,也友善監控容器化和微服務化的應用。Weave Scope 預設的使用者名是 admin,密碼是 admin123。
點選頂部的【Host】,可以遠端shell登入各個節點,還可以看到主機的詳細資訊。
3.1.2.4 通路 Prometheus
Prometheus 用來對整個 kubernetes 叢集進行監控資料的采集。點選 Prometheus 下方的【轉到】按鈕即可通路 Prometheus 控制台。
3.1.2.5 健康狀态
在 K8s 叢集【健康狀态】欄,可以看到整體的叢集狀态,具體包括 Control Manager,Schedule,etcd 和 nodes 的實時健康狀态以及過去半年 K8s 叢集運作狀态。
3.1.3 叢集日志
KubeOperator 系統新增加支援擷取 KubeOperator 系統日志和 K8s 叢集日志功能。
3.1.3.1 系統日志
【系統日志】頁支援查找 KubeOperator 系統裡所有 K8s 叢集日志資訊, 日志類型包括 info、debug 和 error 日志,還可以用關鍵字搜尋日志等等日志資訊。
3.1.3.2 叢集日志
K8s 叢集日志使用 Grafana 日志聚合工具 Loki。Loki 是Grafana Labs 團隊的開源項目,它的設計非常經濟高效且易于操作,特别适合存儲 Kubernetes Pod 日志。
通過通路 Grafana 控制台看到 Loki 日志。
3.1.4 叢集管理
3.1.4.1 通路 Registry
Registry 則用來存放 Kubernetes 叢集所使用到的 Docker 鏡像。Registry 預設的使用者名是 admin,密碼是 admin123。
3.1.4.2 通路 Traefik
Traefik 用來作為 kubernetes 叢集的HTTP反向代理、負載均衡工具。點選 Trafik 下方的【轉到】按鈕即可通路 Traefik 控制台。
3.1.4.3 Webkubectl
KubeOperator 新增功能支援 Webkubectl 。在叢集【概覽】頁最下面單擊 WEBKUBECTL ,在彈出框中可以像在叢集中節點執行指令,查詢叢集資訊等操作。
3.2 叢集更新
KubeOperator 支援 K8s 更新。請注意由于 1.15 和 1.16 版本之後變化較大,目前不支援更新從 1.15 更新到 1.16 版本。
在叢集清單中點選要進行更新的叢集名稱,點選【概覽】頁最下方的【更新】按鈕進行 Kubernetes 叢集的更新。
單擊【确認】後,系統自動跳轉到【任務】頁,可以看到更新進度和詳細 log 資訊。
更新完成後,可以看到如下資訊。
同時在叢集【曆史】頁,可以通過單擊【詳情】按鈕檢視更新的所有 log 資訊。
3.3 叢集伸縮
此版本 KubeOperator 支援重點新功能:擴容 K8s 叢集 worker 節點數量。
KubeOperator 控制台【叢集】頁,單擊一個要擴容的叢集名稱,即【概覽】頁面,Worker 狀态欄左下方單擊【擴容】,在彈出框中選中擴容 worker 節點數量。
确認後,會自動轉到【任務】頁面,實時檢視擴容進度,完成後可以看到如下圖所示資訊。
3.4 叢集備份
KubeOperator 目前的備份功能支援三種不同種類的存儲,即 AWS S3、aliyun oss 和 Azure 存儲。為叢集備份和恢複提供存儲支援,實作備份和恢複功能。
添加備份賬号之前,請首先自行準備好 AWS S3 ,aliyun oss 或者 Azure 存儲賬号資訊,包括 AccessKey,SecretKey,endpoint 和桶/容器資訊。
以添加 S3 為例,在【系統設定】的【備份】Tab 也中輸入名稱和 AccessKey,SecretKey 和端點(對應 AWS S3 系統裡的 endpoint),單擊【擷取桶/容器】擷取桶名稱,建議在 S3 建立一個桶單獨使用,最後送出。
在叢集【備份】頁面,可以看到,KubeOperator 支援的自動備份政策和手動備份,自動備份包括備份間隔,複本保留份數以及可以開啟戶禁用備份政策,實作叢集備份和恢複功能。
手動備份需要先設定備份政策資訊,包括備份間隔、保留份數、選擇儲存設備以及開啟備份,然後單擊【立即備份】後,可以在【任務】頁看到備份進度。