使用 Kind 运行本地Kubernetes集群

Kind 是 Kubernetes In Docker 的缩写,顾名思义,就是把 Kubernetes 运行在 Docker容器里面。

特点

创建、启动k8s集群非常快速,资源消耗较低。

支持创建多节点的k8s集群,包括高可用模式。

kind 支持 Linux, macOS and Windows

它是CNCF认证的k8s集群安装方式之一

可以做什么

  • 快速创建一个或多个 Kubernetes 集群(几分钟);

  • 支持 HA master 部署高可用的 Kubernetes 集群;

  • 支持从源码构建并部署一个 Kubernetes 集群;

  • 可以快速低成本体验一个最新的 Kubernetes 集群,并支持 Kubernetes 的绝大部分功能;

  • 支持本地离线运行一个多节点集群。

优势

  • 最小的安装依赖,仅需要安装 Docker 即可

  • 使用快速简单,使用 Kind CLI 工具即可快速创建集群

  • 使用容器来模似 Kubernetes 节点

  • 内部使用 kubeadm 的官方主流部署工具

  • 使用了 Containerd

  • 通过了 CNCF 官方的 K8s conformance 测试

工作原理

Kind 使用容器来模拟每一个 Kubernetes 节点,并在容器里面运行 Systemd 。 容器里的 Systemd 托管了 Kubelet 和 Containerd ,然后容器内部的 Kubelet 把其它 Kubernetes 组件: Kube-Apiserver 、 Etcd 、 CNI 等等组件运行起来。

Kind 内部使用了 Kubeadm 这个工具来做集群的部署,包括高可用集群也是借助 Kubeadm 提供的特性来完成的。在高用集群下还会额外部署了一个 Nginx 来提供负载均衡 VIP。

Kind 的镜像分为两个,一个 node 镜像,一个 base 镜像。

base 镜像使用 Ubuntu:19.04 作为基础镜像。

创建节点源代码: https://github.com/kubernetes-sigs/kind/blob/master/pkg/build/node/node.go

Kind vs Minikube

  • Kind 不是打包一个虚拟化镜像,而是直接将 K8S 组件运行在 Docker。
  • 不需要运行 GuestOS 占用资源更低。
  • 不基于虚拟化技术,可以在 VM 中使用。
  • 文件更小,更利于移植。
  • 支持多节点 K8S 集群和 HA
  • Kind 支持多角色的节点部署,可以通过配置文件控制你需要几个 Master 节点,几个 Worker 节点,以更好的模拟生产中的实际环境。

另一个本地运行kubernetes集群工具:Mac使用Colima运行Docker

安装

1
brew install kind

or 下载二进制文件:

1
2
3
4
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/bin/kind
kind version

使用

使用说明

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$ kind    
kind creates and manages local Kubernetes clusters using Docker container 'nodes'    
 
    
Usage:    
  kind [command]    
 
    
Available Commands:    
  build       Build one of [base-image, node-image]    
  create      Creates one of [cluster]    
  delete      Deletes one of [cluster]    
  export      exports one of [logs]    
  get         Gets one of [clusters, nodes, kubeconfig-path]    
  help        Help about any command    
  load        Loads images into nodes    
  version     prints the kind CLI version    
 
    
Flags:    
  -h, --help              help for kind    
      --loglevel string   logrus log level [panic, fatal, error, warning, info, debug] (default "warning")    
      --version           version for kind    
 
    
Use "kind [command] --help" for more information about a command.

常用选项的含义:

  • build:用来从 Kubernetes 源代码构建一个新的镜像。

  • create:创建一个 Kubernetes 集群。

  • delete:删除一个 Kubernetes 集群。

  • get:可用来查看当前集群、节点信息以及 Kubectl 配置文件的地址。

  • load:从宿主机向 Kubernetes 节点内导入镜像。

快速的创建k8s集群

1
2
3
4
kind create cluster --name myk8s-01

## 查看创建集群节点
kubectl get nodes

可以通过配置文件创建k8s集群,同时可在配置文件中配置镜像源,

让新建的k8s集群从私有http仓库加载镜像,示例如下:

1
2
3
4
5
6
7
8
9
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
containerdConfigPatches:
- |-
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors."harbor.xxxx.top:60666"]
    endpoint = ["http://harbor.xxxx.top:60666"]
nodes:
- role: control-plane
- role: worker

完整的配置文件示例: https://raw.githubusercontent.com/kubernetes-sigs/kind/main/site/content/docs/user/kind-example-config.yaml

参考