Kind 是 Kubernetes In Docker 的缩写,顾名思义是使用 Docker 容器作为 Node 并将 Kubernetes 部署至其中的一个工具。官方文档中也把 Kind 作为一种本地集群搭建的工具进行推荐。
1.安装 kind
# 建议下载最新版本的 kind
go get sigs.k8s.io/kind@v0.11.1
cp $(go env GOPATH)/bin/kind /usr/local/bin
2.使用 kind 搭建k8s集群
2.1 创建3结点集群的配置文件
vim ~/k8s-3nodes.yaml, 添加下述内容:
# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
2.2 创建集群:
使用kind创建集群之前首先要确保 ~/.kube 目录存在,如果不存在,要先使用 mkdir ~/.kube 创建 .kube 目录。(防止后续非 root 用户使用 kubectl 查看 Kind 创建的集群需要加sudo的问题)
mkdir ~/.kube
创建指定版本,指定节点的集群:
kind create cluster --config ~/k8s-3nodes.yaml --image kindest/node:v1.20.7@sha256:cbeaf907fc78ac97ce7b625e4bf0de16e3ea725daf6b04f930bd14c67c671ff9
- 如果不指定--config,默认创建单master集群;
- 使用--image参数可以指定创建的k8s版本,kind v0.11.1版本可以使用的node镜像可以在这里面找到:https://github.com/kubernetes-sigs/kind/releases/tag/v0.11.1
- 不手动使用 --name 指定集群名称的时候,集群默认名为 kind
注:镜像后面的@sha256的这一串token最好加上。
这样集群就创建好了,如下图所示:
2.3 注意事项
1.如果结点一直处于NotReady,有可能是kind的版本问题。
2.由于前面只创建了一个集群,如果创建了很多个集群的话(使用--name可以指定集群名称,所以可以创建很多不同名称的集群),那么使用Kubectl命令的时候要使用 --context 指定集群名称
查看集群信息
❯ kubectl cluster-info --context kind-kind
Kubernetes master is running at https://127.0.0.1:41801
KubeDNS is running at https://127.0.0.1:41801/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
可以看到我们 k8s master 地址和 dns 的地址,注意一般情况下我们只创建一个集群不需要指定 --context cluster name 但是创建了多个集群时这个基本就是必须的一个命令了。如果不加这个参数可能会报下面的错误
The connection to the server localhost:8080 was refused - did you specify the right host or port?
这是因为 kubectl默认连接的 apiserver 地址是 localhost:8080但是我们的 apiserver 地址不是这个所以报错。
为什么我们使用 --context cluster-name 就可以了呢?
这是因为 kind 在创建集群的时候会修改 $HOME/.kube/config 的配置,将集群的 apiserver 地址,证书等相关信息都自动写入进去了
每次命令都要加上这个参数好麻烦怎么办?
我们可以使用 kubectl config use-context context-name 来进行设置,设置好了之后我们后续就不用每次都加上 –-context 的参数了,同时还可以通过 kubectl config current-context 查询我们当前默认操作的集群是哪一个
3. 登录 k8s 结点
3.1 登录结点
由于 Node 是 docker 容器,则可以使用 docker ps 命令查看当前运行的容器:
可以看到,3个结点对应3个 docker 容器,那么使用如下命令就可以登录结点了,以master结点为例:
docker exec -it kind-control-plane bash
3.2 查看结点中已经下载的镜像
可以使用 crictl 命令操作 kind 结点中的镜像:
# 查看镜像
crictl images
3.3 结点中安装 vim 编辑器
但是进入结点后,会发现没有 vim 命令,所以无法编辑文件。使用
kubectl describe node kind-control-plane
或者直接在此链接中可以发现,v0.11.1版本的kind中node的底层操作系统镜像是 Ubuntu 21.04,因此可以使用 apt 来安装vim命令。
# 这条 update 命令是必须的,否则会提示 Unable to locate package vim
apt-get update
apt-get install vim
这样就安装好了 vim 。
参考文章
https://kind.sigs.k8s.io/docs/user/quick-start/
https://github.com/kubernetes-sigs/kind/releases/tag/v0.11.1
Kind: 如何快速搭建本地 K8s 开发环境? - Mohuishou (lailin.xyz)