- 資訊首頁(yè) > 互聯(lián)網(wǎng) > 經(jīng)驗分享 >
- DaoCloud道客云原生開(kāi)源項目Clusterpedia(The Encyclo
DaoCloud道客云原生開(kāi)源項目Clusterpedia,全稱(chēng)The Encyclopedia of Kubernetes clusters,源碼查看地址:https://github.com/clusterpedia-io/clusterpedia。
在多集群時(shí)代,我們可以通過(guò) cluster-api 來(lái)批量創(chuàng )建管理集群,使用 Karmada/Clusternet 來(lái)分發(fā)部署應用。不過(guò)我們貌似還是缺少了什么功能,我們要如何去統一的查看多個(gè)集群中的資源呢?
對于單個(gè)集群的資源,我們可以使用 kubectl 來(lái)查看搜索資源,但是在想要檢索多集群的資源時(shí),貌似沒(méi)有什么趁手的產(chǎn)品可以使用。這個(gè)問(wèn)題不會(huì )再困擾你,因為在 DaoCloud道客云原生開(kāi)源項目Clusterpedia的加持下,你手上的 kubectl 已經(jīng)可以用來(lái)檢索多集群資源啦!
例如,使用 kubectl 來(lái)獲取多個(gè)集群下 kube-system 命名空間內的 deployments。
$ kubectl get deployments -n kube-system
CLUSTER NAME READY UP-TO-DATE AVAILABLE AGE
cluster-1 calico-kube-controllers 1/1 1 1 63d
cluster-1 coredns 2/2 2 2 63d
cluster-2 calico-kube-controllers 1/1 1 1 109d
cluster-2 coredns-coredns 2/2 2 2 109d
cluster-2 dce-chart-manager 1/1 1 1 109d
cluster-2 dce-clair 1/1 1 1 109d
Clusterpedia,名字借鑒自 Wikipedia,同樣也展現了 Clusterpedia 的核心理念 —— 多集群的百科全書(shū)。
通過(guò)聚合多集群資源,在兼容 Kubernetes OpenAPI 的基礎上額外提供了更加強大的檢索功能,讓用戶(hù)更快更方便的在多集群中獲取到想要的任何資源。當然 Clusterpedia 的能力并不僅僅只是檢索查看,未來(lái)還會(huì )支持對資源的簡(jiǎn)單控制,就像 wiki 同樣支持編輯詞條一樣。
Clusterpedia在架構上分為四個(gè)部分:
另外,Clusterpedia 會(huì )使用 PediaCluster 這個(gè)自定義資源來(lái)實(shí)現集群認證和資源收集配置
Clusterpedia 還提供了可以接入 mysql 和 postgres 的默認存儲層。
Clusterpedia 并不關(guān)心用戶(hù)所使用的具體存儲設置是什么,用戶(hù)可以根據自己的需求來(lái)選擇或者實(shí)現存儲層,然后將存儲層以插件的形式注冊到 Clusterpedia 中來(lái)使用。
關(guān)于部署的詳細流程,可以查看 README,這里著(zhù)重介紹了如何使用 clusterpedia。https://github.com/clusterpedia-io/clusterpedia#部署
clusterpedia 部署完成后,我們可以通過(guò) kubectl 來(lái)操作 PediaCluster 資源。
$ kubectl get pediaclusters
在 examples 目錄下,可以看到 PediaCluster 的示例
apiVersion: clusters.clusterpedia.io/v1alpha1
kind: PediaCluster
metadata:
name: cluster-example
spec:
apiserverURL: "https://172.30.43.41:6443"
caData: ""
tokenData: ""
certData: ""
keyData: ""
resources:
- group: apps
resources:
- deployments
- group: ""
resources:
- pods
PediaCluster 在配置上可以分成兩部分
caData , tokenData , certData , keyData 字段用于集群的驗證。
當前暫時(shí)不支持從 ConfigMap 或者 Secret 中獲取驗證相關(guān)的信息,不過(guò)已經(jīng)在 Roadmap 中了。
在設置驗證字段時(shí),注意要使用 base64 后的字符串
在 examples 目錄下提供了生成用于訪(fǎng)問(wèn)子集群的 rbac yam clusterpedia_synchro_rbac.yaml ,來(lái)方便的獲取子集群的權限 token。
在子集群中部署該 yaml,然后獲取對應的 token 和 ca ssl/' target='_blank'>證書(shū)。
$ # 當前 kubectl 連接到子集群中
$ kubectl apply -f examples/clusterpedia_synchro_rbac.yaml
clusterrole.rbac.authorization.k8s.io/clusterpedia-synchro created
serviceaccount/clusterpedia-synchro created
clusterrolebinding.rbac.authorization.k8s.io/clusterpedia-synchro created
$ SYNCHRO_TOKEN=$(kubectl get secret $(kubectl get serviceaccount clusterpedia-synchro -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}')
$ SYNCHRO_CA=$(kubectl get secret $(kubectl get serviceaccount clusterpedia-synchro -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.ca.crt}')
復制 ./examples/pediacluster.yaml, 并修改 .spec.apiserverURL 和 .metadata.name 字段,并且將 $SYNCHRO_TOKEN 和 $SYNCHRO_CA 填寫(xiě)到 tokenData 和 caData 中。
使用 kubectl apply 創(chuàng )建。
$ kubectl apply -f cluster-1.yaml
pediacluster.clusters.clusterpedia.io/cluster-1 created
為了方便后續使用,建議再創(chuàng )建一個(gè) cluster-2
可以通過(guò)設置 spec.resources 字段的 group 和 group 下的 resources 來(lái)進(jìn)行指定收集的資源。
在 status 中我們也可以看到資源的收集狀態(tài)。
status:
conditions:
- lastTransitionTime: "2021-12-02T04:00:45Z"
message: ""
reason: Healthy
status: "True"
type: Ready
resources:
- group: ""
resources:
- kind: Pod
namespaced: true
resource: pods
syncConditions:
- lastTransitionTime: "2021-12-02T04:00:45Z"
status: Syncing
storageVersion: v1
version: v1
- group: apps
resources:
- kind: Deployment
namespaced: true
resource: deployments
syncConditions:
- lastTransitionTime: "2021-12-02T04:00:45Z"
status: Syncing
storageVersion: v1
version: v1
version: v1.22.2
配置好我們需要收集的資源后,我們就可以進(jìn)行重頭戲了 —— 集群檢索clusterpedia 支持兩種資源檢索:
$ kubectl api-resources | grep pedia.clusterpedia.io
collectionresources pedia.clusterpedia.io/v1alpha1 false CollectionResource
resources pedia.clusterpedia.io/v1alpha1 false Resources
為了方便我們更好的使用 kubectl 來(lái)進(jìn)行檢索,我們可以先通過(guò) make gen-clusterconfig 來(lái)為子集群創(chuàng )建用于檢索的 ‘快捷方式’。
$ make gen-clusterconfigs
./hack/gen-clusterconfigs.sh
Current Context: kubernetes-admin@kubernetes
Current Cluster: kubernetes
Server: https://10.9.11.11:6443
TLS Server Name:
Insecure Skip TLS Verify:
Certificate Authority:
Certificate Authority Data: ***
Cluster "clusterpedia" set.
Cluster "cluster-1" set.
使用 kubectl config get-clusters 可以查看當前支持的集群。
其中 clusterpedia 是一個(gè)特殊的 cluster,用于多集群檢索,以 kubectl –cluster clusterpedia 的方式來(lái)檢索多個(gè)集群的資源。
我們先看一下我們都收集了哪些資源,只有被收集的資源才可以進(jìn)行檢索。
$ kubectl --cluster clusterpedia api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
pods po v1 true Pod
deployments deploy apps/v1 true Deployment
可以看到當前收集并支持 pods 和 deployments.apps 兩種資源
查看所有集群的 kube-system 命名空間下的 deployments
$ kubectl --cluster clusterpedia get deployments -n kube-system
CLUSTER NAME READY UP-TO-DATE AVAILABLE AGE
cluster-1 calico-kube-controllers 1/1 1 1 63d
cluster-1 coredns 2/2 2 2 63d
cluster-2 calico-kube-controllers 1/1 1 1 109d
cluster-2 coredns-coredns 2/2 2 2 109d
cluster-2 dce-chart-manager 1/1 1 1 109d
cluster-2 dce-clair 1/1 1 1 109d
查看所有集群的 kube-system, default 命名空間下的 deployments
$ kubectl --cluster clusterpedia get deployments -A -l "search.clusterpedia.io/namespaces in (kube-system, default)"
查看 cluster-1, cluster-2 兩個(gè)集群下的 kube-system, default 命名空間下中的 deployments
$ kubectl --cluster clusterpedia get deployments -A -l "search.clusterpedia.io/clusters in (cluster-1, cluster-2),
search.clusterpedia.io/namespaces in (kube-system,default)"
NAMESPACE CLUSTER NAME READY UP-TO-DATE AVAILABLE AGE
kube-system cluster-1 calico-kube-controllers 1/1 1 1 63d
kube-system cluster-1 coredns 2/2 2 2 63d
default cluster-1 dao-2048-2048 1/1 1 1 20d
default cluster-1 hello-world-server 1/1 1 1 26d
default cluster-1 my-nginx 1/1 1 1 39d
default cluster-1 phpldapadmin 1/1 1 1 40d
kube-system cluster-2 calico-kube-controllers 1/1 1 1 109d
kube-system cluster-2 coredns-coredns 2/2 2 2 109d
kube-system cluster-2 dce-chart-manager 1/1 1 1 109d
kube-system cluster-2 dce-clair 1/1 1 1 109d
顯示數據有刪減,略多查看 cluster-1, cluster-2 兩個(gè)集群下的 kube-system, default 命名空間下中的deployments,并根據資源的名字排序
$ kubectl --cluster clusterpedia get deployments -A -l "search.clusterpedia.io/clusters in (cluster-1, cluster-2),
search.clusterpedia.io/namespaces in (kube-system,default),
search.clusterpedia.io/orderby=name"
kube-system cluster-1 calico-kube-controllers 1/1 1 1 63d
kube-system cluster-2 calico-kube-controllers 1/1 1 1 109d
kube-system cluster-1 coredns 2/2 2 2 63d
kube-system cluster-2 coredns-coredns 2/2 2 2 109d
default cluster-1 dao-2048-2048 1/1 1 1 20d
kube-system cluster-2 dce-chart-manager 1/1 1 1 109d
kube-system cluster-2 dce-clair 1/1 1 1 109d
kube-system cluster-2 dce-registry 1/1 1 1 109d
kube-system cluster-2 dce-uds-storage-server 1/1 1 1 109d
default cluster-1 dd-airflow-scheduler 0/1 1 0 53d
default cluster-1 dd-airflow-web 0/1 1 0 53d
kube-system cluster-2 metrics-server 1/1 1 1 109d
default cluster-1 my-nginx 1/1 1 1 39d
default cluster-1 nginx-dev 1/1 1 1 14d
default cluster-1 openldap 1/1 1 1 40d
default cluster-1 phpldapadmin 1/1 1 1 40d
顯示數據有刪減,略多
我們如果想要檢索指定集群的資源的話(huà),我們可以使用 –cluster 來(lái)指定具體的集群名稱(chēng)
$ kubectl --cluster cluster-1 get deployments -A
NAMESPACE CLUSTER NAME READY UP-TO-DATE AVAILABLE AGE
kubeapps-oidc cluster-1 apach2-apache 1/1 1 1 35d
kube-system cluster-1 calico-kube-controllers 1/1 1 1 63d
cert-manager cluster-1 cert-manager 1/1 1 1 42d
cert-manager cluster-1 cert-manager-cainjector 1/1 1 1 42d
cert-manager cluster-1 cert-manager-webhook 1/1 1 1 42d
kube-system cluster-1 coredns 2/2 2 2 63d
default cluster-1 dao-2048-2048 1/1 1 1 20d
kubernetes-dashboard cluster-1 dashboard-metrics-scraper 1/1 1 1 54d
default cluster-1 dd-airflow-scheduler 0/1 1 0 53d
default cluster-1 dd-airflow-web 0/1 1 0 53d
顯示數據有刪減,略多
除了 search.clusterpedia.io/clusters 外其余的復雜查詢(xún)的支持和多集群檢索相同。
如果我們要獲取一個(gè)資源的詳情,那么也是需要指定集群才可以。
$ kubectl --cluster cluster-1 -n kube-system get deployments coredns
CLUSTER NAME READY UP-TO-DATE AVAILABLE AGE
cluster-1 apach2-apache 1/1 1 1 35d
clusterpedia 支持以下復雜檢索:
對于字段的排序,實(shí)際的效果是根據存儲層來(lái)決定的,默認存儲層支持根據 cluster , name , namespace , created_at , resource_version 進(jìn)行正序或者倒序的排序。
上面實(shí)例中,演示了使用 kubectl 來(lái)進(jìn)行檢索,而這些復雜的檢索條件通過(guò) label 來(lái)傳遞的。實(shí)際上 clusterpedia 還支持直接通過(guò) url query 的傳遞這些檢索條件。
label key 的操作符支持 ==, =, !=, in, not in 對于 size 這個(gè)條件,實(shí)際上 kubectl 可以通過(guò) –chunk-size 來(lái)指定,而不需要通過(guò) label key。
在 clusterpedia 還有對資源更加高級的聚合,使用 Collection Resource 可以一次性獲取到一組不同類(lèi)型的資源。
可以先查看一下當前 clusterpedia 支持哪些 Collection Resource。
$ kubectl get collectionresources
NAME RESOURCES
workloads deployments.apps,daemonsets.apps,statefulsets.apps
通過(guò)獲取 workloads 便可獲取到一組 deployment, daemonset, statefulset 聚合在一起的資源 而且 Collection Resource 同樣支持所有的復雜查詢(xún)。
kubectl get collectionresources workloads 會(huì )默認獲取所有集群下所有命名空間的相應資源。
$ kubectl get collectionresources workloads
CLUSTER GROUP VERSION KIND NAMESPACE NAME AGE
cluster-1 apps v1 DaemonSet kube-system vsphere-cloud-controller-manager 63d
cluster-2 apps v1 Deployment kube-system calico-kube-controllers 109d
cluster-2 apps v1 Deployment kube-system coredns-coredns 109d
cluster-2 apps v1 Deployment dce-acm-agent dce-acm-agent 84d
在 cluster-1 中增加收集 Daemonset, 輸出有刪減,太多
由于 kubectl 的限制所以無(wú)法在 kubectl 來(lái)使用復雜查詢(xún),只能通過(guò) url query 的方式來(lái)查詢(xún)。
Collection Resource 支持哪些資源是由存儲層來(lái)提供,而默認存儲層未來(lái)會(huì )支持自定義組合 Collection Resource。
clusterpedia 不僅僅只是用來(lái)做資源檢索,和 wiki 一樣,它也應該具有對資源簡(jiǎn)單的控制能力,例如 watch, create, delete, update 等操作。
對于寫(xiě)操作,實(shí)際會(huì )采用雙寫(xiě) 響應 warning 的方式來(lái)完成。
感興趣的話(huà)可以在 issue 中一起討論。
clusterpedia 中用來(lái)表示集群的資源叫做 PediaCluster, 而不是簡(jiǎn)單的 Cluster,最主要的原因便是 clusterpedia 設計初衷便是讓 clusterpedia 可以建立在已有的多集群管理平臺之上。
為了遵循初衷,第一個(gè)問(wèn)題便是不能和已有的多集群平臺中的資源沖突, Cluster 便是一個(gè)最通用的代表集群的資源名稱(chēng)。另外為了更好的去接入到已有的多集群平臺上,讓已經(jīng)接入的集群可以自動(dòng)的完成資源收集,我們需要另外的一個(gè)集群發(fā)現機制。這個(gè)發(fā)現機制需要解決以下問(wèn)題:
這個(gè)功能會(huì )在 Q1 或者 Q2 中開(kāi)始詳細討論實(shí)現。
clusterpedia 當前處于比較早期的階段 (v0.0.9-alpha),核心功能剛剛完成,還有很多可以?xún)?yōu)化的地方,對于這些優(yōu)化點(diǎn)也都提了對應的 issues,歡迎大家一起討論
這里簡(jiǎn)單說(shuō)一些進(jìn)入 v0.1.0 版本前的優(yōu)化點(diǎn):
更多的優(yōu)化項,大家可以在 issue 中提出新的想法。
當前只是暫定的 Roadmap,具體的排期還要看社區的需求程度
在 2021 的 Q4 階段會(huì )完成上述的優(yōu)化項,并且完成對自定義資源的收集
clusterpedia 實(shí)際并不會(huì )解決多集群環(huán)境下的網(wǎng)絡(luò )連通問(wèn)題,用戶(hù)可以使用tower等工具來(lái)連接訪(fǎng)問(wèn)子集群,也可以借助 submariner 或者 skupper 來(lái)解決跨集群網(wǎng)絡(luò )問(wèn)題。
當然您也可以加入DaoCloud道客云原生交流群參與交流互動(dòng):
DaoCloud 公司簡(jiǎn)介:「DaoCloud 道客」云原生領(lǐng)域的創(chuàng )新領(lǐng)導者,成立于 2014 年底,擁有自主知識產(chǎn)權的核心技術(shù),致力于打造開(kāi)放的云原生操作系統為企業(yè)數字化轉型賦能。產(chǎn)品能力覆蓋云原生應用的開(kāi)發(fā)、交付、運維全生命周期,并提供公有云、私有云和混合云等多種交付方式。成立迄今,公司已在金融科技、先進(jìn)制造、智能汽車(chē)、零售網(wǎng)點(diǎn)、城市大腦等多個(gè)領(lǐng)域深耕,標桿客戶(hù)包括交通銀行、浦發(fā)銀行、上汽集團、東風(fēng)汽車(chē)、海爾集團、屈臣氏、金拱門(mén)(麥當勞)等。目前,公司已完成了 D 輪超億元融資,被譽(yù)為科技領(lǐng)域準獨角獸企業(yè)。公司在北京、武漢、深圳、成都設立多家分公司及合資公司,總員工人數超過(guò) 350 人,是上海市高新技術(shù)企業(yè)、上海市“科技小巨人”企業(yè)和上海市“專(zhuān)精特新”企業(yè),并入選了科創(chuàng )板培育企業(yè)名單。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站