Kubesphere之ks-installer介绍
Kubesphere提供兩個部署工具,KubeKey和ks-installer。其中,ks-installer部署Kubesphere,KubeKey安裝Kubernetes和ks-installer。
代碼框架
controller:shell-operator的兩個腳本
deploy:部署ks-installer的yaml文件
docs:文檔
env:變量
playbooks:各個playbook
- alerting.yaml:部署報警模塊
- auditing:部署審計模塊
- common:部署通用模塊,包括es、fluent-bit、minio、openldap、mysql等等
- devops:部署devops模塊
- events:部署事件模塊
- harbor:部署鏡像倉庫模塊
- ks-config:
- ks-core:部署ks核心組件,包括ks-apiserver、ks-controller-manager、ks-console等
- logging:部署日志模塊
- metrics-server:部署metrics-server
- monitor:部署監控模塊
- multicluster:部署多集群模塊
- openpitrix:部署openpitrix
- preinstall:預安裝,包括檢查k8s版本、storageclass、helm版本轉換等
- result-info:統計部署結果,顯示welcome信息
- servicemesh:部署微服務模塊
- telemetry:獲取一些集群信息,如k8s版本、ks版本、machineID等等,再向ClusterConfiguration寫入- - clusterID(當前鏡像有問題,生成clusterID失敗,因為沒有uuidgen命令)
roles:各個role目錄
scripts:ks-installer相關腳本
shell-operator
ks-installer本質是一個shell-operator,監控著ClusterConfiguration資源,當ClusterConfiguration資源變化時,則會觸發ks-installer的部署流程。
不像fluentbit-operator這些,shell-operator并不是一種具體的operator實現,而是提供了一種框架。按照這種框架,可以編寫出具體的operator。
shell-operator 與其他 Kubernetes 工作負載類似,部署在 Pod中。在 Pod 中有一個/hooks 的一個子目錄,其中存儲了可執行文件,它們可以用 Bash、Python、Ruby等編寫的,我們稱這些可執行文件為hooks。在這些可執行文件中,聲明感興趣的Kubernetes事件,訂閱這些事件,并執行這些鉤子。
shell-operator 如何知道何時執行鉤子呢?事實上每個鉤子都有兩個階段。在啟動過程中,shell-operator 使用-config參數運行每個鉤子。一旦配置階段結束,鉤子將以“正常”方式執行:響應附加給它們的事件。
shell-operator支持三種鉤子響應類型:
1、OnStartup:啟動后即運行;
2、schedule:crontab格式的定時任務;
3、kubernetes:監控Kubernetes資源,根據定義的事件類型來響應;
shell-operator也提供了prometheus metrics,支持自定義指標,默認端口是9115。
bash-5.1$ pwd /hooks/kubesphere bash-5.1$ ls installRunner.py schedule.shks-installer的pod中,/hooks/kubesphere中包含兩個文件。installRunner.py用于部署ks-installer,schedule.sh定期執行telemetry的playbook,檢查狀態、注冊clusterid等。
installRunner.py:
schedule.sh:
if [[ $1 == "--config" ]] ; thencat <<EOF {"configVersion":"v1","schedule": [{"allowFailure": true,"name": "every month","crontab": "0 0 1 * *"}] } EOF elseansible-playbook /kubesphere/playbooks/telemetry.yaml -e @/kubesphere/config/ks-config.jsonif [[ $? -eq 0 ]]; then#statementsstr="successsful!"echo -e "$str"elseexitfi fi這兩個腳本的入口處,都是通過-config參數,配置要監控的事件,另外一個分支,就是鉤子需要處理的動作。
schedule.sh是一個定時執行的任務,每個月執行telemetry.yaml。
installRunner.py就是主要的部署腳本。
installRunner.py
def main():if not os.path.exists(privateDataDir):os.makedirs(privateDataDir)if len(sys.argv) > 1 and sys.argv[1] == "--config":print(ks_hook)else:# 加載k8s配置config.load_incluster_config()# k8s客戶端api = client.CustomObjectsApi()# 生成新的ClusterConfiguration配置generate_new_cluster_configuration(api)# 持久化文件/kubesphere/config/ks-config.json和/kubesphere/config/ks-status.json# /kubesphere/config/ks-config.json即ClusterConfiguration的配置部分(json化)# /kubesphere/config/ks-status.json即CLusterConfiguration的狀態部分generateConfig(api)# execute preInstall tasks# 執行preInstall、metrics-server、common、ks-corepreInstallTasks()# 實際安裝,異步安裝各組件resultState = getResultInfo()resultInfo(resultState, api)部署
ks-installer容器啟動(重啟)后,或者感知到ClusterConfiguration變化后,都會觸發ks-installer的部署流程。
每次觸發部署流程,preInstall、metrics-server、common、ks-core等playbook都會再次執行。
而可插拔組件是否會執行部署,取決于ClusterConfiguration中,對應組件的status狀態,當該模塊不存在,或者status不為enalbed時,都會重新觸發該模塊的再次部署。如果要調試某個組件的重新部署,可以在status部分,刪除對應組件的部分。
參考文章:
https://github.com/flant/shell-operator
https://cloud.tencent.com/developer/article/1701733
https://blog.fleeto.us/post/shell-operator/
總結
以上是生活随笔為你收集整理的Kubesphere之ks-installer介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成为一家机器学习公司意味着投资基础技术
- 下一篇: 遗传算法和神经网络结合在税收中的运用