Cluster API 檢索從未如此簡單

Cluster API 檢索從未如此簡單

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 11m v1。24。2default-capi-quickstart capi-quickstart-2xcsz-fxrrk NotReady control-plane 21m v1。24。2default-capi-quickstart capi-quickstart-md-0-9tw2g-b8b4f46cf-gggvq NotReady 20m v1。24。2

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 11m v1。24。2default-capi-quickstart capi-quickstart-2xcsz-fxrrk NotReady control-plane 21m v1。24。2default-capi-quickstart capi-quickstart-md-0-9tw2g-b8b4f46cf-gggvq NotReady 20m v1。24。2

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

技術交流:「連結」