使用Kind在windows上搭建个人用的k8s
在学习k8s的过程中,出于实践的需要,我们经常需要对k8s集群做一些敏感操作,例如使用hostpath,安装daemonset。所以在自己的开发机上组建一个简单的k8s集群是很必要的。本文将会介绍如何使用wsl+Kind搭建一个k8s集群。
Kind介绍和安装
Kind(Kubernetes IN Docker)是一个基于Docker的工具,用于在本地计算机上运行k8s集群。在Kind中,每个node都是以docker的形式存在的,实际上对应的形式应该是docker on docker,如下图所示:
因此我们可以很容易地搭建多节点的k8s集群,只要跑多个docker即可。
配置wsl2和docker
首先,需要安装和配置好WSL2,具体可以参考微软的WSL2安装教程。之后就可以选择你喜欢的Linux发行版,这里建议选择Ubuntu,通用性会强一点,避免不必要的麻烦。
之后需要安装docker destokp,建议直接选择使用wsl2做后端,这样docker启动的速度会比用hpyer-v要快速很多(原理就是用wsl的linux作为虚拟机,代替使用hpyer-v启动的虚拟机)。为了能在我们安装的wsl中也使用docker,可以再开启用windows上的docker作为后端(一般安装新版的都会默认勾选),这样wsl中只安装一个docker client,连接到windows上跑着的docker。相比之下这样我们从windows上也可以登录这个docker,会方便很多。
安装Kind
Kind需要被安装在WSL中(其实安装在windows上也可以,不过我没有尝试过),在WSL上安装Kind比较简单,只需要下载二进制文件并且拷贝到PATH中:
1 |
|
此时运行kind version
检查kind是否安装正常。
为了能够正常控制k8s集群,建议还需要安装kubectl:
1 |
|
新建cluster
使用Kind新建一个cluster非常简单,只需要:
1 |
|
此时执行kind get clusters
就可以获取到当前有效的集群。
但是这种方式新建的集群只有一个node,对于我们需要使用多个node的情况就需要使用配置文件来创建cluster,新建一个kind-config.yaml
文件:
1 |
|
这里主要关注最后的nodes
字段,标明了集群中一共有1个控制面节点,3个worker节点。使用指令创建它:
1 |
|
如果你用的docker后端是windows docker,那么可以在docker desktop看到新建的这几个代替pod的docker:
通过使用kubectl可以切换交互的集群:
1 |
|
暴露端口
如果需要将我们的服务暴露到本地可以访问,可以通过暴露端口的方式创建集群:
1 |
|
此时相当于在control-plane这个node上暴露了80 443和30000三个端口,并且映射到了本机的三个相同端口。
问题排查
如果你的开发机资源比较少,可能会导致分配给docker的资源较少(CPU,内存),导致无法创建出多节点的集群。此时需要调整docker的wsl虚拟机的资源限制。
此外,Kind使用的是Kindest/node镜像,因此需要确认网络是否正常,能够下载对应的镜像,避免下载失败。