“
Clusterpedia 是一個 CNCF 沙箱專案,用於跨叢集複雜的資源檢索。
名字源於 Wikipedia,寓意是打造多叢集的百科全書,可以與多個叢集同步資源,並在與 Kubernetes OpenAPI 相容的基礎上,提供更強大的搜尋功能,以幫助您快速、簡便、有效地獲取任何多叢集資源。
0。4。0 後,Clusterpedia 提供了更加友好的接入多雲平臺的方式,使用者在多雲平臺建立或者納管集群后,便可以直接使用 kubectl 來檢索這些叢集內的資源。
我們在Clusterpedia 倉庫
[1]
中維護了各個多雲平臺的 ClusterImportPolicy[2]。非常歡迎大家提交用於對接其他多雲平臺的 ClusterImportPolicy。
使用者在安裝 Clusterpedia 後,建立合適的 ClusterImportPolicy 即可,使用者也可以根據自己的需求來
建立新的 ClusterImportPolicy[3]
。
Cluster API 的 ClusterImportPolicy 已經在 clusterpedia#288
[4]
中提交,在 Cluster API 中建立集群后,可以直接使用 Clusterpedia 來對這些叢集內的資源進行復雜檢索。
$ kubectl get clusterNAME PHASE AGE VERSIONcapi-quickstart Provisioned 10m v1。24。2capi-quickstart-2 Provisioned 118s v1。24。2$ kubectl get kubeadmcontrolplaneNAME CLUSTER INITIALIZED API SERVER AVAILABLE REPLICAS READY UPDATED UNAVAILABLE AGE VERSIONcapi-quickstart-2-ctm9k capi-quickstart-2 true 1 1 1 10m v1。24。2capi-quickstart-2xcsz capi-quickstart true 1 1 1 19m v1。24。2$ # pediacluster 會根據 cluster 資源自動建立,更新和刪除$ kubectl get pediacluster -o wideNAME READY VERSION APISERVER VALIDATED SYNCHRORUNNING CLUSTERHEALTHYdefault-capi-quickstart True v1。24。2 Validated Running Healthydefault-capi-quickstart-2 True v1。24。2 Validated Running Healthy$ kubectl ——cluster clusterpedia get noCLUSTER NAME STATUS ROLES AGE VERSIONdefault-capi-quickstart-2 capi-quickstart-2-ctm9k-g2m87 NotReady control-plane 12m v1。24。2default-capi-quickstart-2 capi-quickstart-2-md-0-s8hbx-7bd44554b5-kzcb6 NotReady
01 示例環境
如何快速部署一套 Cluster API And Clusterpedia 的示例環境?
預備條件
安裝 kubectl
[5]
到本地環境
安裝 Kind
[6]
and Docker
[7]
安裝 clusterctl
[8]
Minimum kind supported version: v0。14。0
創鍵管理叢集並部署 Cluster API
部署 Cluster API 也可以參考
https://cluster-api。sigs。k8s。io/user/quick-start。html
$ cat > kind-cluster-with-extramounts。yaml < 部署 Clusterpedia $ git clone https://github。com/clusterpedia-io/clusterpedia。git && cd clusterpedia/charts$ helm install clusterpedia 。 \ ——namespace clusterpedia-system \ ——create-namespace \ ——set installCRDs=true \ # ——set persistenceMatchNode={{ LOCAL_PV_NODE }} ——set persistenceMatchNode=capi-sample-control-plane clusterpedia charts 提供了 Local PV,需要建立 LOCAL PV 繫結的節點。如果不需要 charts 來建立 LOCAL PV,可以使用 ——set persistenceMatchNode=None。 詳見[9] 建立用於接入 Cluster API 的叢集自動匯入策略 [10] $ kubectl apply -f https://raw。githubusercontent。com/Iceber/clusterpedia/add_cluster_api_clusterimportpolicy/deploy/clusterimportpolicy/cluster_api。yaml Clusterpedia 可以接入任何的多雲管理平臺,接入方式可以參考 Interfacing to Multi-Cloud Platforms[11] 生成 kubectl cluster shortcut [12] ,如果使用 client-go 或者 OpenAPI 來訪問,可以省略該步驟。 $ curl -sfL https://raw。githubusercontent。com/clusterpedia-io/clusterpedia/main/hack/gen-clusterconfigs。sh | sh -$ # 使用 kubectl 檢索多叢集資源,當前 Cluster API 未建立叢集,所以返回空$ kubectl ——cluster clusterpedia api-resources 02 使用 Cluster API建立叢集 使用示例環境的 Docker Provider 來建立叢集時,需要新增 ——flavor development。 $ clusterctl generate cluster capi-quickstart ——flavor development \ ——kubernetes-version v1。24。2 \ ——control-plane-machine-count=1 \ ——worker-machine-count=1 \ > capi-quickstart。yaml$ kubectl apply -f 。/capi-quickstart。yaml 觀察叢集建立情況 $ kubectl get clusterNAME PHASE AGE VERSIONcapi-quickstart Provisioned 8s v1。24。2$ kubectl get kubeadmcontrolplane -wNAME CLUSTER INITIALIZED API SERVER AVAILABLE REPLICAS READY UPDATED UNAVAILABLE AGE VERSIONcapi-quickstart-2xcsz capi-quickstart true 當 kubeadmcontrolplane 的 Initialized 為 True 後,clusterpedia 會自動同步該叢集內的資源,可以使用 kubectl ——cluster clusterpedia get po -A 來檢視資源。 $ kubectl get pediaclusterNAME READY VERSION APISERVERdefault-capi-quickstart True v1。24。2$ kubectl ——cluster clusterpedia get pod -ANAMESPACE CLUSTER NAME READY STATUS RESTARTS AGEkube-system default-capi-quickstart kube-apiserver-capi-quickstart-2xcsz-fxrrk 1/1 Running 0 2m32skube-system default-capi-quickstart kube-scheduler-capi-quickstart-2xcsz-fxrrk 1/1 Running 0 2m31skube-system default-capi-quickstart coredns-6d4b75cb6d-lrwj4 0/1 Pending 0 2m20skube-system default-capi-quickstart kube-proxy-p8v9m 1/1 Running 0 2m20skube-system default-capi-quickstart kube-controller-manager-capi-quickstart-2xcsz-fxrrk 1/1 Running 0 2m32skube-system default-capi-quickstart etcd-capi-quickstart-2xcsz-fxrrk 1/1 Running 0 2m32skube-system default-capi-quickstart kube-proxy-2ln2w 1/1 Running 0 105skube-system default-capi-quickstart coredns-6d4b75cb6d-2hcmz 0/1 Pending 0 2m20s 自動建立的 pediacluster 預設的同步資源在 cluster-api clusterimportpolicy 中設定 [13] ,使用者也可以手動修改 pediacluster 中同步的配置, Synchronize Cluster Resources [14] 。 在 Cluster API 中刪除叢集時,Clusterpedia 也同步刪除 PeidaCluster,不會繼續同步該叢集。 03 對多個叢集的資源檢索 使用上述步驟建立多個叢集。 $ kubectl get clusterNAME PHASE AGE VERSIONcapi-quickstart Provisioned 10m v1。24。2capi-quickstart-2 Provisioned 118s v1。24。2$ kubectl get kubeadmcontrolplaneNAME CLUSTER INITIALIZED API SERVER AVAILABLE REPLICAS READY UPDATED UNAVAILABLE AGE VERSIONcapi-quickstart-2-ctm9k capi-quickstart-2 true 1 1 1 10m v1。24。2capi-quickstart-2xcsz capi-quickstart true 1 1 1 19m v1。24。2$ # pediacluster 會根據 cluster 資源自動建立$ kubectl get pediacluster -o wideNAME READY VERSION APISERVER VALIDATED SYNCHRORUNNING CLUSTERHEALTHYdefault-capi-quickstart True v1。24。2 Validated Running Healthydefault-capi-quickstart-2 True v1。24。2 Validated Running Healthy$ kubectl ——cluster clusterpedia get noCLUSTER NAME STATUS ROLES AGE VERSIONdefault-capi-quickstart-2 capi-quickstart-2-ctm9k-g2m87 NotReady control-plane 12m v1。24。2default-capi-quickstart-2 capi-quickstart-2-md-0-s8hbx-7bd44554b5-kzcb6 NotReady clusterpedia 提供了兩種資源檢索方式 相容 Kubernetes OpenAPI 的資源檢索 [15] $ kubectl ——cluster clusterpedia get cm -ANAMESPACE CLUSTER NAME DATA AGEkube-system default-capi-quickstart extension-apiserver-authentication 6 19mkube-system default-capi-quickstart kubeadm-config 1 19mkube-public default-capi-quickstart cluster-info 2 19mkube-system default-capi-quickstart kube-proxy 2 19mkube-node-lease default-capi-quickstart kube-root-ca。crt 1 19mkube-system default-capi-quickstart-2 extension-apiserver-authentication 6 10mkube-system default-capi-quickstart kubelet-config 1 19mkube-system default-capi-quickstart coredns 1 19mkube-system default-capi-quickstart kube-root-ca。crt 1 19mkube-public default-capi-quickstart kube-root-ca。crt 1 19mkube-system default-capi-quickstart-2 coredns 1 10mdefault default-capi-quickstart kube-root-ca。crt 1 19mkube-system default-capi-quickstart-2 kube-proxy 2 10mkube-system default-capi-quickstart-2 kubeadm-config 1 10mkube-system default-capi-quickstart-2 kubelet-config 1 10mkube-system default-capi-quickstart-2 kube-root-ca。crt 1 10mkube-node-lease default-capi-quickstart-2 kube-root-ca。crt 1 10mkube-public default-capi-quickstart-2 cluster-info 3 10mkube-public default-capi-quickstart-2 kube-root-ca。crt 1 10mdefault default-capi-quickstart-2 kube-root-ca。crt 1 10m$ # gen cluster shortcuts$ curl -sfL https://raw。githubusercontent。com/clusterpedia-io/clusterpedia/main/hack/gen-clusterconfigs。sh | sh -$ kubectl ——cluster default-capi-quickstart get cm -n kube-system Collection Resource [16] $ kubectl get collectionresourcesNAME RESOURCESany *workloads apps。deployments,apps。daemonsets,apps。statefulsetskuberesources 。*,admission。k8s。io。*,admissionregistration。k8s。io。*,apiextensions。k8s。io。*,apps。*,authentication。k8s。io。*,authorization。k8s。io。*,autoscaling。*,batch。*,certificates。k8s。io。*,coordination。k8s。io。*,discovery。k8s。io。*,events。k8s。io。*,extensions。*,flowcontrol。apiserver。k8s。io。*,imagepolicy。k8s。io。*,internal。apiserver。k8s。io。*,networking。k8s。io。*,node。k8s。io。*,policy。*,rbac。authorization。k8s。io。*,scheduling。k8s。io。*,storage。k8s。io。*$ kubectl get collectionresources workloads 檢索條件 元資訊過濾 (資源名稱,名稱空間,叢集,建立時間區間) [17] $ kubectl ——cluster clusterpedia get cm -A -l \ “search。clusterpedia。io/clusters in (default-capi-quickstart,default-capi-quickstart-2),\ search。clusterpedia。io/namespaces in (kube-system,default)”NAMESPACE CLUSTER NAME DATA AGEkube-system default-capi-quickstart extension-apiserver-authentication 6 23mkube-system default-capi-quickstart kubeadm-config 1 23mkube-system default-capi-quickstart kube-proxy 2 23mkube-system default-capi-quickstart-2 extension-apiserver-authentication 6 14mkube-system default-capi-quickstart kubelet-config 1 23mkube-system default-capi-quickstart coredns 1 23mkube-system default-capi-quickstart kube-root-ca。crt 1 23mkube-system default-capi-quickstart-2 coredns 1 14mdefault default-capi-quickstart kube-root-ca。crt 1 23mkube-system default-capi-quickstart-2 kube-proxy 2 14mkube-system default-capi-quickstart-2 kubeadm-config 1 14mkube-system default-capi-quickstart-2 kubelet-config 1 14mkube-system default-capi-quickstart-2 kube-root-ca。crt 1 14mdefault default-capi-quickstart-2 kube-root-ca。crt 1 14m 模糊搜尋 [18] 增強的 Field Selector [19] 根據父輩或者祖輩 Owner 檢索 [20] 分頁和排序 [21] 自定義條件搜尋 [22] 歡迎大家下載使用和參與討論,並在 issue 提出自己的意見和想法。 專案地址: https://github。com/clusterpedia-io/clusterpedia 技術交流:「連結」