之前进行了kind实践,可以很方便地快速组件在k8s中的验证,今天发现一款由rancher开源的相同工具, k3d,也是非常的牛逼,照样也实践一把
k3d的底层使用的是rancher开发的k3s, 一款轻量级的k8s发行版,普遍用于端边协同领域
k3d在快速开发中,因此有时官方的文档更新的不太及时,就容易出现看文档无法得到想要的结果,好在,一切都是那么方便
docker做为先决条件,是需要提前安装好的
同样,需要安装k3d 的client,这里不再详说,可参考git k3d
这里要注意的是,最好使用新版本的k3d, k3d版本之间的差异还是比较大的,以下都是以v3.3为例
k3d同样能够实现以node做为虚拟node进行k8s的模拟
想要创建一个集群, 最简单的1master+1node
1 | k3d cluster create demo |
如果需要指定多节点的话,则
1 | k3d cluster create demo --servers 3 --agents 3 |
demo为集群名,因为k3d支持创建多个集群
–servers 为控制面节点
–agents为node节点
这里一个3master + 3node的k8s集群就创建出来了,当然,k3d也跟Kind一样,除了cli方式之外也支持配置文件指定参数.
可以使用以下命令进行list
1 | k3d cluster list |
在创建完集群之后,会自动地生成config文件,这个跟正常使用k8s是一样的,因此可以使用kubectl命令
查看一下pod情况
1 | kubectl get pod --all-namespaces |
可以看到几个比较常用见的组件
比如:
- local-path-provisioner: 这个提供本地存储pv动态创建
- metrics-server: 用于pod metrics的收集
- traefik: 这个用于请求转发
- coredns: 集群域名解析
从上面的图可以看到,其它的如Kube-proxy, kube-scheduler是没有,这个可以理解,用k3d创建出来的集群不管多少个agent,本质上还是一台实体机
经过一番实践后,体验还是比较不错的,但还是有点欠缺,比如,如果使用了hostpath时,因为是虚拟出来的node节点,是没有hostpath的,那要如何使用呢, 这个翻了很多的文档也没找到说明,最后还是在issue中找到答案,方法如下
使用host path时:
1 | k3d cluster create deom -v /data/middleware-data:/data/middleware-data |
需要在创建集群里将hostpath使用到的目录进行挂载即可
另外如果要使用nodeport,同样也是如此,需要在创建集群时就进行操作
k3d跟kind相比,感觉还是k3d体验好一些,kind之前用的时候出现过几次用kind创建出来的集群直接就不能用,kubectl config不起作用
k3d倒没有出现这种情况, 但是就是文档写的不怎么样,比如要从私有仓库中拉取镜像,这个就麻烦一点,但官方文档写的也不是很好,需要自己琢磨
不过,不得不承认,k3d确实是个很实用的效率工具,对于需要快速地创建k8s集群进行验证,用完即焚的你可能,本人也打算在团队中推广大家使用起来