clusternet 是腾讯云容器团队最近开源的多集群管理工具,可以很方便的通过主集群管理远程集群。只要主集群的 api-server 可达就可以管理,包括云厂商的 k8s 集群,idc 的自建集群,边缘等。
如下仓库:
https://github.com/clusternet/clusternet
克隆上述仓库,然后进行下一步操作。当前文档适合版本 0.3.0。
执行:
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
在另一个 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
然后安装 agent:
k2 apply -f deploy/agent
在主集群用如下命令检查:
# clsrr = ClusterRegistrationRequest
kubectl get clsrr
# mcls = ManagedCluster
kubectl get mcls -A -o wide
从上面的结果中可以找到 cluster-id,备用。
直接下载 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
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 删除。