文章

使用Kind快速构建Kubernetes集群

现在安装 Kubernetes 集群已经变得越来越简单了,出现了很多方案,各种方案都有自己适合的使用场景。虽然我们可以很快速在云环境下面启动一个 Kubernetes 集群,但是对于开发人员通常更喜欢能够快速上手的东西,Kubernetes in Docker(Kind)这个工具就可以通过创建容器来作为 Kubernetes 的节点,我们只需要在机器上安装 Docker 就可以使用,它允许我们在很短的时间内就启动一个多节点的集群,而不依赖任何其他工具或云服务商。

前面的文章也讲过如何在本地使用Vagrant来快速搭建Kubernetes集群,但还是有点麻烦,而且需要自己去定制Vagrant Box,有一定的技术门槛。

依赖

本文使用的是MacOS系统,Kind需要本机安装docker和golang,本文的软件版本如下:

 Docker Desktop 2.4.0.0(48506)
 go version go1.15.3 darwin/amd64

Kind架构

kind-design

Kind 是使用 kubeadm 工具来启动管理集群,也通过了一致性测试和 CNCF 的认证,当然它也会为你生成访问集群的 kubeconfig 文件,这样我们同样就可以使用 kubectl 来和集群进行交互了。其他 Kubernetes 组件,比如 Helm、Istio 也同样可以在 Kind 集群内正常工作。

Kind 有一个缺点是它不能使用 LoadBalancer 的 Service,所以我们需要使用 NodePort 来对外暴露服务。

安装

 sudo curl -sL https://kind.sigs.k8s.io/dl/v0.9.0/kind-darwin-amd64 -o /usr/local/bin/kind
 sudo chmod +x /usr/local/bin/kind
 ​
 $ kind version
 kind v0.9.0 go1.15.2 darwin/amd64

或者

 brew install kind

安装完成后你可以使用下面的命令创建你的集群:

 kind create cluster

出现如下结果,表示安装成功:

 $ kind create cluster
 Creating cluster "kind" ...
  ✓ Ensuring node image (kindest/node:v1.19.1) 🖼
  ✓ Preparing nodes 📦
  ✓ Writing configuration 📜
  ✓ Starting control-plane 🕹️
  ✓ Installing CNI 🔌
  ✓ Installing StorageClass 💾
 Set kubectl context to "kind-kind"
 You can now use your cluster with:
 ​
 kubectl cluster-info --context kind-kind
 ​
 Not sure what to do next? 😅  Check out https://kind.sigs.k8s.io/docs/user/quick-start/

验证:

 $ kind get clusters
 kind
 ​
 $ kubectl get nodes
 NAME                 STATUS   ROLES    AGE   VERSION
 kind-control-plane   Ready    master   40s   v1.19.1

多节点集群

如果你想定义一个多节点集群,你可以使用类似下面的集群配置文件进行创建:

 # kind-config.yaml
 # 2个节点(1个woker节点)
 kind: Cluster
 apiVersion: kind.x-k8s.io/v1alpha4
 nodes:
 - role: control-plane
 - role: worker

然后使用上面的配置文件创建集群:

 kind create cluster --name kind --image kindest/node:v1.19.1 --config kind-config.yaml

我们也可以在 nodes 属性部分指定多个控制平面角色来创建多控制平面集群。由于 KinD 会自动创建一个 kubeconfig 文件,所以我们可以像使用其他集群一样使用 kubectl 命令。

结果如下:

 $ kind create cluster --name kind --image kindest/node:v1.19.1 --config kind-config.yaml
 Creating cluster "kind" ...
  ✓ Ensuring node image (kindest/node:v1.19.1) 🖼
  ✓ Preparing nodes 📦 📦
  ✓ Writing configuration 📜
  ✓ Starting control-plane 🕹️
  ✓ Installing CNI 🔌
  ✓ Installing StorageClass 💾
  ✓ Joining worker nodes 🚜
 Set kubectl context to "kind-kind"
 You can now use your cluster with:
 ​
 kubectl cluster-info --context kind-kind
 ​
 Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
 ​
 $ kubectl get nodes
 NAME                 STATUS   ROLES    AGE   VERSION
 kind-control-plane   Ready    master   80s   v1.19.1
 kind-worker          Ready    <none>   50s   v1.19.1

删除Kind集群

要想删除 KinD 集群也很简单,直接使用如下所示的命令即可:

 kind delete cluster --name kind

到这里你就可以快速构建你想要的本地K8S集群了。


参考

Kind官网Quick Start

Kind Github

Kind Docker Images

License:  CC BY 4.0