简介
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
root@k3s1:~# 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