体验下vcluster

简介

vcluster 是一个运行在其他k8s上的k8s集群,vcluster 由一个包含两个容器的pod组成。

  • 一个是k3s,用来提供k8s的api server, controller manager 连接数据存储,存储可以使用外部的etcd,mysql。默认使用的是sqlite
  • 另外一个是Syncer,用来把vcluster集群中创建的pod复制到底层的宿主机, 也就是说实际的工作负载还是运行到底层的集群中,所以不存在性能上的损失,因为所有的pod都是和vcluster中的api server进行通讯,所以可以减少宿主机集群中的apiserver压力,并且足够的轻量

操作

首先下载cli,默认安装你也可以直接使用helm,然后使用argocd去部署

curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && chmod +x vcluster;

sudo mv vcluster /usr/local/bin;

创建集群

vcluster create vcluster-1

集群创建完成之后会多

vcluster-vcluster-1

这么一个ns,之后你不管在vcluster里面创建多少个pods,都会在这个ns下面

除了这个ns还有

vcluster-1-0

这么一个statefulset,里面包含着的就是上面说的两个组件,也就是两个容器

除此之外就是一个coredns-66ffcc6b58-jrkwp-x-kube-system-x-vcluster-1这么一个pod,这个pod默认其实是启动在vcluster里面的

使用下面的命令连接集群

vcluster connect vcluster-1

1
2
3
4
5
6
7
[email protected]:~# vcluster  connect vcluster-1
done √ Switched active kube context to vcluster_vcluster-1_vcluster-vcluster-1_default
warn   Since you are using port-forwarding to connect, you will need to leave this terminal open
- Use CTRL+C to return to your previous kube context
- Use `kubectl get namespaces` in another terminal to access the vcluster
Forwarding from 127.0.0.1:11621 -> 8443
Forwarding from [::1]:11621 -> 8443

之后你就可以部署资源了

清理

vcluster delete vcluster-1

最后说几句

如果你想创建一个测试环境的话这个很不错,相比于kind什么的,我觉得更简单了。而且面向客户部署的一些业务使用这个部署也会更快,不会影响到客户的环境,或者说,你们有生产,测试,开发,等等等环境的时候,直接拉起一套,比创建一个k8s环境简单的多

欢迎关注我的博客 www.bboy.app

Have Fun