作者

徐迪,Clusternet 项目发起人,腾讯云容器技术专家。

摘要

Clusternet (Cluster Internet)是一个兼具多集群管理和跨集群应用编排的开源云原生管控平台,解决了跨云、跨地域、跨可用区的集群管理问题。 在项目规划阶段,就是面向未来混合云、分布式云和边缘计算等场景来设计的,支持海量集群的接入和管理、应用分发、流量治理(开发中)等。

如何注册一个集群

Clusternet 在设计的时候,完全采用 add-on 的架构,支持一键部署和安装。各个模块的更多安装方式,详见官方文档

在注册一个集群的时候,也非常简单,通过安装 clusternet-agent 的 Helm Chart,即可完成一个集群的注册,见如下命令,

  1. helm repo add clusternet https://clusternet.github.io/charts
  2. helm install clusternet-agent -n clusternet-system --create-namespace \
  3. --set parentURL=PLEASE-CHANGE-ME \
  4. --set registrationToken=PLEASE-CHANGE-ME \
  5. clusternet/clusternet-agent

这里需要将 PLEASE-CHANGE-ME 替换为对应集群的合理配置,

  • parentURL 是管控集群的 apiserver 地址
  • registrationToken 是一个可以访问该管控集群的 token,可以是 bootstrap token,也可以是 ServiceAccount token

这些 token 的主要作用只是用于注册集群,因此权限可以设置的很低,如下是默认的权限设置,

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: ClusterRole
  3. metadata:
  4. name: clusternet:system:bootstrapping
  5. rules:
  6. - apiGroups:
  7. - "clusters.clusternet.io"
  8. resources:
  9. - clusterregistrationrequests
  10. verbs:
  11. - get
  12. - create

所有 Group 为 system:bootstrappers:clusternet:register-cluster-token 的 bootstrap token 都自动拥有注册集群的权限。创建该 bootstrap token 的例子,可以参考如下例子,

  1. $ # 如下命令会创建一个 bootstrap token "07401b.f395accd246ae52d"
  2. $ # 这里你可以更改 yaml 文件,创建出你设定的值
  3. $ kubectl apply -f manifests/samples/cluster_bootstrap_token.yaml

如果使用 ServiceAccount token 来进行注册,像 k3s 就不支持使用 bootstrap token ,可以参考如下的例子创建 ServiceAccount Token 用于注册集群。

  1. $ # 你可以更改如下的 yaml 文件,再进行 apply 操作
  2. $ # 如下命令可以创建一个 ServiceAccount token
  3. $ kubectl apply -f manifests/samples/cluster_serviceaccount_token.yaml
  4. $ # 通过如下的命令,即可拿到对应的 ServiceAccount token
  5. $ kubectl get secret -n clusternet-system -o=jsonpath='{.items[?(@.metadata.annotations.kubernetes\.io/service-account\.name=="cluster-bootstrap-use")].data.token}' | base64 --decode; echo

clusternet-agent 安装好了以后,会自动将本集群注册到上述通过 parentURL 指定的管控集群中,用对象 ClusterRegistrationRequest 来标识。每个集群都有一个独一无二的 Cluster ID,用于标识该集群。 clusternet-agent 重启或者重建,并不会更改当前注册集群的 ID。

然后可以通过如下命令,查看当前已经注册的集群,

  1. $ # clsrr is an alias for ClusterRegistrationRequest
  2. $ kubectl get clsrr
  3. NAME CLUSTER ID STATUS AGE
  4. clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118 dc91021d-2361-4f6d-a404-7c33b9e01118 Approved 3d6h
  5. $ kubectl get clsrr clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118 -o yaml
  6. apiVersion: clusters.clusternet.io/v1beta1
  7. kind: ClusterRegistrationRequest
  8. metadata:
  9. labels:
  10. clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118
  11. clusters.clusternet.io/cluster-name: clusternet-cluster-dzqkw
  12. clusters.clusternet.io/registered-by: clusternet-agent
  13. name: clusternet-dc91021d-2361-4f6d-a404-7c33b9e01118
  14. spec:
  15. clusterId: dc91021d-2361-4f6d-a404-7c33b9e01118
  16. clusterName: clusternet-cluster-dzqkw
  17. clusterType: EdgeCluster
  18. status:
  19. caCertificate: REDACTED
  20. dedicatedNamespace: clusternet-dhxfs
  21. managedClusterName: clusternet-cluster-dzqkw
  22. result: Approved
  23. token: REDACTED

一旦 status.result 变为 Approved,就代表该集群已经注册成功。这个时候 clusternet-hub 会为该集群创建一个专属的 namespace,比如上述例子中就分配了一个名为 clusternet-dhxfs 的命名空间,并有一个名为 clusternet-cluster-dzqkw ManagedCluster 的对象与该集群进行关联,所有该集群的状态都会汇报到该对象中。

  1. apiVersion: clusters.clusternet.io/v1beta1
  2. kind: ManagedCluster
  3. metadata:
  4. creationTimestamp: "2022-01-20T09:20:30Z"
  5. generation: 1
  6. labels:
  7. clusternet.io/created-by: clusternet-agent
  8. clusters.clusternet.io/cluster-id: dc91021d-2361-4f6d-a404-7c33b9e01118
  9. clusters.clusternet.io/cluster-name: cls-bx2ro4ak
  10. name: clusternet-cluster-dzqkw
  11. namespace: clusternet-dhxfs
  12. resourceVersion: "545410287"
  13. selfLink: /apis/clusters.clusternet.io/v1beta1/namespaces/clusternet-dhxfs/managedclusters/clusternet-cluster-dzqkw
  14. uid: 1e6a1003-8309-40c5-8969-c15cdf274a5a
  15. spec:
  16. clusterId: dc91021d-2361-4f6d-a404-7c33b9e01118
  17. clusterType: EdgeCluster
  18. syncMode: Dual
  19. status:
  20. allocatable:
  21. cpu: 2820m
  22. memory: 8657308Ki
  23. apiserverURL: https://10.8.0.1:443
  24. appPusher: true
  25. capacity:
  26. cpu: "6"
  27. memory: 12094876Ki
  28. conditions:
  29. - lastTransitionTime: "2022-01-21T03:33:59Z"
  30. message: managed cluster is ready.
  31. reason: ManagedClusterReady
  32. status: "True"
  33. type: Ready
  34. healthz: true
  35. heartbeatFrequencySeconds: 180
  36. k8sVersion: v1.21.5
  37. lastObservedTime: "2022-01-21T03:33:59Z"
  38. livez: true
  39. nodeStatistics:
  40. readyNodes: 3
  41. platform: linux/amd64
  42. readyz: true
  43. serviceCIDR: 10.4.0.0/14
  44. useSocket: true

集群注册上来后,就可以对集群进行管理和应用分发了。我们会在下一次文章中,来介绍如何进行应用分发。

如何访问子集群

通过 Clusternet,可以对注册成功的集群进行进一步地管控。在一些运维的场景中,可能需要对某个子集群进行额外的单独操作,比如查看日志,事件,节点状态等等。

需要纳管的目标子集群可能:

  • 运行在边缘节点上或者是边缘集群,网络条件差,没有暴露外网地址
  • 运行在云上的某个 VPC 内,为了保证安全性,没有做网络打通,或者端口映射
  • 运行在自建机房内
  • 其他情形

Clusternet 为了能够提供一致的管理体验,提供了通用的访问子集群的方案,即可以通过父集群做访问代理,将请求转发到子集群中,却依然可以使用动态的 RBAC。这里 Clusternet 使用的 RBAC 是子集群自己的 RBAC,所以这些 RBAC 中用到的敏感信息并不需要在父集群中保留,做到真正的动态权限访问。详细的访问链路,如下图所示。

为了方便,Clusternet 也提供了命令行支持,通过 kubectl-clusternet 插件即可上手体验一番。

  1. $ # 安装 kubectl-clusternet 插件
  2. $ kubectl krew install clusternet
  3. $ kubectl get mcls -A
  4. NAMESPACE NAME CLUSTER ID SYNC MODE KUBERNETES READYZ AGE
  5. clusternet-ml6wg aws-cd 6c085c18-3baf-443c-abff-459751f5e3d3 Dual v1.18.4 true 4d6h
  6. clusternet-z5vqv azure-cd 7dc5966e-6736-48dd-9a82-2e4d74d30443 Dual v1.20.4 true 43h
  7. $ # 通过指定 Cluster ID,以及对应 Cluster 的 kubeconfig 文件 (这里的 apiserver 地址可以是内网地址)
  8. $ kubectl clusternet --cluster-id=7dc5966e-6736-48dd-9a82-2e4d74d30443 --child-kubeconfig=./azure-cd-kubeconfig get ns
  9. NAME STATUS AGE
  10. clusternet-system Active 4d20h
  11. default Active 24d
  12. kube-node-lease Active 24d
  13. kube-public Active 24d
  14. kube-system Active 24d
  15. test-nginx Active 11d
  16. test-systemd Active 11d

关于更多使用细节,请扫描下方二维码进行了解。

加入我们

请关注 Clusternet 项目 https://github.com/clusternet/clusternet,点赞并支持,也欢迎各种形式的讨论与合作。

关于我们

更多关于云原生的案例和知识,可关注同名【腾讯云原生】公众号~

福利:

①公众号后台回复【手册】,可获得《腾讯云原生路线图手册》&《腾讯云原生最佳实践》~

②公众号后台回复【系列】,可获得《15个系列100+篇超实用云原生原创干货合集》,包含Kubernetes 降本增效、K8s 性能优化实践、最佳实践等系列。

③公众号后台回复【白皮书】,可获得《腾讯云容器安全白皮书》&《降本之源-云原生成本管理白皮书v1.0》

③公众号后台回复【光速入门】,可获得腾讯腾讯云专家5万字精华教程,光速入门Prometheus和Grafana。

【腾讯云原生】云说新品、云研新术、云游新活、云赏资讯,扫码关注同名公众号,及时获取更多干货!!

Clusternet:一款开源的跨云多集群云原生管控利器!的更多相关文章

  1. 基于 Clusternet 与 OCM 打造新一代开放的多集群管理平台

    背景 随着 5G.物联网设备的爆炸性增长以及智能终端不断增强的计算能力,带来了前所未有的数据量,传统的中心集中式计算捉襟见肘."新基建"战略的实施,工业互联网.车联网/自动驾驶.智 ...

  2. 阿里云HBase推出普惠性高可用服务,独家支持用户的自建、混合云环境集群

    HBase可以支持百TB数据规模.数百万QPS压力下的毫秒响应,适用于大数据背景下的风控和推荐等在线场景.阿里云HBase服务了多家金融.广告.媒体类业务中的风控和推荐,持续的在高可用.低延迟.低成本 ...

  3. 阿里云EMR集群初始化后的开发准备工作

              前言:EMR的集群使用越来越普遍,但是每一次的集群释放到集群的重新创建,期间总有一些反复的工作需要查询与配置.为方便后续工作查阅,现在对集群初始化后的工作进行大概的梳理如下.   ...

  4. 干货 | 京东云Kubernetes集群+Traefik实战

    摘要 Traefik支持丰富的annotations配置,可配置众多出色的特性,例如:自动熔断.负载均衡策略.黑名单.白名单.所以Traefik对于微服务来说简直就是一神器. 利用Traefik,并结 ...

  5. 腾讯云Elasticsearch集群规划及性能优化实践

    ​一.引言 随着腾讯云 Elasticsearch 云产品功能越来越丰富,ES 用户越来越多,云上的集群规模也越来越大.我们在日常运维工作中也经常会遇到一些由于前期集群规划不到位,导致后期业务增长集群 ...

  6. 5款开源BI系统倾力推荐,企业信息化的利器

    如今的企业都在选择开源BI系统,提升企业信息化的水平.那么开源BI系统到底该如何选择?在目前的百度上面有着许许多多类似的内容,本文就整理了其中优秀的5款工具,帮助大家选择合适的软件. 1.Smartb ...

  7. 『开源』Slithice 2013 服务器集群 设计和源码

    相关介绍文章: <『设计』Slithice 分布式架构设计-支持一体式开发,分布式发布> <『集群』001 Slithice 服务器集群 概述> <『集群』002 Sli ...

  8. 腾讯云原生混合云-第三方集群弹EKS应对突发流量的利器

    作者 何鹏飞,腾讯云专家产品经理,曾作为容器私有云.TKEStack的产品经理兼架构师,参与腾讯云内部业务.外部客户容器化改造方案设计,目前负责云原生混合云产品方案设计工作. 胡晓亮,腾讯云专家工程师 ...

  9. Kubernetes最佳实践之腾讯云TKE 集群组建

    作者陈鹏,腾讯工程师,负责腾讯云 TKE 的售中.售后的技术支持,根据客户需求输出合理技术方案与最佳实践,为客户业务保驾护航.使用 TKE 来组建 Kubernetes 集群时,会面对各种配置选项,本 ...

随机推荐

  1. Qt5获取可用串口

    概述 本文将介绍Qt5使用类QSerialPortInfo获取可以用串口号 效果 机器上配置的虚拟串口 程序获取结果 源码开始 .pro文件中添加下面的代码 QT += serialport 然后,执 ...

  2. C++输出控制小数点后位数的方法

    以C++输出小数点两位数为例 setprecision(n)使用方法总结 首先要记住写头文件 #include <iomanip> //不要忘了头文件 以下是控制小数位数的三种写法 //t ...

  3. 以简御繁介绍IOC

    1.IOC的理论背景 大家开发理念,一直都是奔着架构稳定.低耦合性.而IOC初衷,就是为了解决模块依赖问题,理解<六大设计原则(SOLID)> 如图所示,在我们开发中,业务的实现,就是靠着 ...

  4. CS5263|DP转HDMI转换器芯片|CS5263芯片说明

    CS5263是一款高性能DP1.4到HDMI2.0b功能芯片,设计用于将DP1.4源连接到HDMI2.0b接收器.CS5263集成了DP1.4兼容接收机和HDMI2.0b兼容接收机发射器.DP接口包括 ...

  5. 教你10分钟对接人大金仓EF Core 6.x

    前言 目前.NET Core中据我了解到除了官方的EF Core外,还用的比较多的ORM框架(恕我孤陋寡闻哈,可能还有别的)有FreeSql.SqlSugar(排名不分先后).FreeSql和SqlS ...

  6. MySQL数据库基础(2)表结构管理

    目录 一.关系模型与数据表 二.MySQL数据类型 三.数据完整性约束 四.参照完整性约束 一.关系模型与数据表 概念 ①关系模型:是由若干个关系模式组成的集合,关系模式的实例称为关系,每个关系实际上 ...

  7. AVD Pixel_2_API_30 is already running. lf that is not the case, delete the files at

    AVD Pixel_2_API_30 is already running. lf that is not the case, delete the files at C:\Users\Adminis ...

  8. Ranger-Solr审计日志安装

    使用RangerAdmin安装solr,基于已有的solr环境安装,主要是在solr创建用于存储数据的CoreAdmin. # 1.解压安装 在solr的安装机器上面,获取RangerAdmin并且解 ...

  9. .net core中Grpc使用报错:The response ended prematurely.

    当我们调用Grpc是出现下面的一堆异常时,一般是由于LTS导致的: Call failed with gRPC error status. Status code: 'Unavailable', Me ...

  10. centos6.5搭建Apache-虚拟主机

    一.配置基于域名的虚拟用户 1.创建虚拟用户的网页根目录 cd /usr/local/httpd/htdocs/ mkdir benetcom cd benetcom echo "<h ...