使用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 是使用 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集群了。