前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 clusternet 管理多集群

使用 clusternet 管理多集群

原创
作者头像
谢正伟
修改2021-08-13 15:15:16
1.8K0
修改2021-08-13 15:15:16
举报

clusternet 是腾讯云容器团队最近开源的多集群管理工具,可以很方便的通过主集群管理远程集群。只要主集群的 api-server 可达就可以管理,包括云厂商的 k8s 集群,idc 的自建集群,边缘等。

如下仓库:

https://github.com/clusternet/clusternet

克隆上述仓库,然后进行下一步操作。当前文档适合版本 0.3.0。

安装 hub

执行:

kubectl apply -f deploy/hub

该操作创建了如下资源:

customresourcedefinition.apiextensions.k8s.io/bases.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/descriptions.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/globalizations.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/helmcharts.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/helmreleases.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/localizations.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/manifests.apps.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/subscriptions.apps.clusternet.io created
clusterrole.rbac.authorization.k8s.io/clusternet:system:bootstrapping created
clusterrolebinding.rbac.authorization.k8s.io/clusternet:system:bootstrapping created
clusterrole.rbac.authorization.k8s.io/clusternet:system:socketsproxy created
clusterrolebinding.rbac.authorization.k8s.io/clusternet:system:socketsproxy created
apiservice.apiregistration.k8s.io/v1alpha1.proxies.clusternet.io created
apiservice.apiregistration.k8s.io/v1alpha1.shadow created
namespace/clusternet-reserved created
namespace/clusternet-system created
serviceaccount/clusternet-hub created
service/clusternet-hub created
deployment.apps/clusternet-hub created
clusterrole.rbac.authorization.k8s.io/clusternet:hub created
clusterrolebinding.rbac.authorization.k8s.io/clusternet:hub created
customresourcedefinition.apiextensions.k8s.io/clusterregistrationrequests.clusters.clusternet.io created
customresourcedefinition.apiextensions.k8s.io/managedclusters.clusters.clusternet.io created

看看 clusternet-system 命名空间下的 pod:

kubectl get po -n clusternet-system

然后,创建一个 token,用于 agent 的接入,token-id 和 token-secret 可以自行修改。

kubectl apply -f manifests/samples/cluster_bootstrap_token.yaml

安装 agent

在另一个 k8s 集群,我们现在开始安装 agent。

下面的命令行中 k2 表示连接另一个集群的别名:

alias k2="kubectl --kubeconfig=your_agent-k8s-kube.config "

先创建一个命名空间 clusternet-system:

k2 create ns clusternet-system

创建注册需要的 token:

cat <<EOF |  k2 apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: clusternet-agent-cluster-registration
  namespace: clusternet-system
type: Opaque
stringData:
  parentURL: <your-hub-api-server>
  regToken: 07401b.f395accd246ae52d
EOF
  • regToken: 需要和 hub 里创建的保持一致,此文中为 07401b.f395accd246ae52d
  • parentURL: 这个是主集群的 api server 的 地址。

然后安装 agent:

k2 apply -f deploy/agent

检查安装状态

在主集群用如下命令检查:

# clsrr = ClusterRegistrationRequest
kubectl get clsrr

# mcls = ManagedCluster
kubectl get mcls -A -o wide

从上面的结果中可以找到 cluster-id,备用。

安装 kubectl 插件

直接下载 kubectl-clusternet,放到系统路径下即可。下载地址为:

https://github.com/clusternet/kubectl-clusternet/releases

设置好之后, kubectl clusternet .... 命令便可以执行了。

部署应用

在clusternet 模式下,只需要在主集群里部署应用。clusternet 新增了一个 Subscription 资源,用于描述部署的目标集群和资源。请看下面的 yaml 文件。

apiVersion: v1
kind: Namespace
metadata:
  name: foo
---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ppnginx
  namespace: foo
  labels:
    clusternet-app: ppnginx
spec:
  selector:
    matchLabels:
      app: ppnginx
  replicas: 2
  template:
    metadata:
      labels:
        app: ppnginx
    spec:
      containers:
        - name: ppnginx
          image: nginx:alpine
          ports:
            - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: ppsite
  namespace: foo
  labels:
    app: ppnginx
spec:
  type: ClusterIP
  ports:
    - port: 80
  selector:
    app: ppnginx

---

apiVersion: apps.clusternet.io/v1alpha1
kind: Subscription
metadata:
  name: app-foo
  namespace: default
spec:
  subscribers: 
    - clusterAffinity:
        matchLabels:
          clusters.clusternet.io/cluster-id: 0b483540-aeae-4053-a294-cbdd32c4d751
    - clusterAffinity:
        matchLabels:
          clusters.clusternet.io/cluster-id: db274058-c76e-4ce2-af5b-bb92aa6bcdf8
  feeds: 
    - apiVersion: v1
      kind: Namespace
      name: foo
    - apiVersion: v1
      kind: Service
      name: ppsite
    - apiVersion: apps/v1
      kind: Deployment
      feedSelector: 
        matchLabels:
          clusternet-app: ppnginx
  • 上述 yaml 脚本分别往 2 个子集群里部署了 一个 namespace,一个 deployment 和一个 service。
  • 基础的 yaml 资源和 k8s 没有什么分别。 Subscription 是 clusternet 新增的资源。
  • cluster-id 可以通过在主集群中执行 kubectl get clsrr 查询。

应用上述 yaml:

kubectl clusternet apply -f app-foo.yaml

成功运行后,可以在子集群看到部署结果。

其他可用命令

kubectl clusternet get ns
kubectl clusternet get desc -A
kubectl get manifest -n clusternet-reserved
kubectl get desc -A
kubectl get base -A
kubectl get sub -A
kubectl get ns.shadow

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 hub
  • 安装 agent
  • 检查安装状态
  • 安装 kubectl 插件
  • 部署应用
  • 其他可用命令
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档