1

Cluster API 检索从未如此简单

 1 year ago
source link: http://blog.daocloud.io/8497.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Cluster API 检索从未如此简单-DaoCloud道客博客

c2f0609473624b8a87b7b8b6fdf6b966~noop.image?_iz=58558&from=article.pc_detail&x-expires=1660807503&x-signature=7Vo4pAcaDiq3yUivMvMFUcaKm4c%3D

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   <none>          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   <none>          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 <<EOFkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane  extraMounts:    - hostPath: /var/run/docker.sock      containerPath: /var/run/docker.sockEOF$ kind create cluster --name capi-sample --config kind-cluster-with-extramounts.yaml$ export CLUSTER_TOPOLOGY=true$ clusterctl init --infrastructure docker

部署 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   <none>          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   <none>          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

微信社群:

HwameiStor2.png                                                         添加微信备注【clusterpedia】                                                                    加入技术讨论群DaoCloud 公司简介:「DaoCloud 道客」云原生领域的创新领导者,成立于 2014 年底,拥有自主知识产权的核心技术,致力于打造开放的云原生操作系统为企业数字化转型赋能。产品能力覆盖云原生应用的开发、交付、运维全生命周期,并提供公有云、私有云和混合云等多种交付方式。成立迄今,公司已在金融科技、先进制造、智能汽车、零售网点、城市大脑等多个领域深耕,标杆客户包括交通银行、浦发银行、上汽集团、东风汽车、海尔集团、屈臣氏、金拱门(麦当劳)等。目前,公司已完成了 D 轮超亿元融资,被誉为科技领域准独角兽企业。公司在北京、武汉、深圳、成都设立多家分公司及合资公司,总员工人数超过 400 人,是上海市高新技术企业、上海市“科技小巨人”企业和上海市“专精特新”企业,并入选了科创板培育企业名单。

未经允许不得转载:DaoCloud道客博客 » Cluster API 检索从未如此简单


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK