日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kubesphere之ks-installer介绍

發布時間:2023/12/16 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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.sh

ks-installer的pod中,/hooks/kubesphere中包含兩個文件。installRunner.py用于部署ks-installer,schedule.sh定期執行telemetry的playbook,檢查狀態、注冊clusterid等。
installRunner.py:

ks_hook = ''' {"onKubernetesEvent": [{"name": "Monitor clusterconfiguration","kind": "ClusterConfiguration","event": [ "add", "update" ],"objectName": "ks-installer","namespaceSelector": {"matchNames": ["kubesphere-system"]},"jqFilter": ".spec","allowFailure": false}] } ''' 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:config.load_incluster_config()api = client.CustomObjectsApi()updateConfigMap("unready")generate_new_cluster_configuration(api)generateConfig(api)# execute preInstall taskspreInstallTasks()resultState = getResultInfo()resultInfo(resultState, api)

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部分,刪除對應組件的部分。

# kubectl get cc -n kubesphere-system ks-installer -oyaml status:clusterId: ""core:enabledTime: 2022-03-29T16:29:34CSTstatus: enabledes:enabledTime: 2022-03-29T16:28:39CSTstatus: enabledfluentbit:enabledTime: 2022-03-29T16:28:57CSTstatus: enabledlogging:enabledTime: 2022-03-29T16:31:06CSTstatus: enabledmetricsServer:enabledTime: 2022-03-29T16:26:37CSTstatus: enabledminio:enabledTime: 2022-03-29T16:28:30CSTstatus: enabledmonitoring:enabledTime: 2022-03-29T16:33:33CSTstatus: enabledservicemesh:enabledTime: 2022-03-29T16:31:28CSTstatus: enabled

參考文章:
https://github.com/flant/shell-operator
https://cloud.tencent.com/developer/article/1701733
https://blog.fleeto.us/post/shell-operator/

總結

以上是生活随笔為你收集整理的Kubesphere之ks-installer介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。