Kind 简介

Kind 是一个在 Docker 容器中运行 Kubernetes 集群的工具,主要是为了测试 Kubernetes 本身而设计的,但也可以用于本地开发或 CI。



Kind 下载、安装

# AMD架构
wget -O /usr/bin/kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x /usr/bin/kind
 
# ARM架构
wget -O /usr/bin/kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-arm64
chmod +x /usr/bin/kind
 
# 查看版本信息
kind version

Kind 部署 Kubernetes 集群

1、准备工作

# 关闭防火墙
systemctl disable --now firewalld
 
# 关闭 selinxu
setenforce 0
sed -i ’s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config
 
# 清空 iptables 规则
iptables -F && iptables -t nat -F
 
# 禁用 swap 分区
swapoff -a
sed -i '/swap / s/^\(.*\)$/#\1/g' /etc/fstab
 
# 升级内核版本
🔔 部分低版本内核会出现报错 cgroup namespaces aren't enabled in the kernel: unknown
yum update -y
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum install -y --enablerepo=elrepo-kernel kernel-ml    # 安装新内核(例如,最新的稳定版本是 kernel-ml)
grub2-mkconfig -o /boot/grub2/grub.cfg                 # 更新 GRUB 引导菜单
grub2-set-default 0                                    # 修改默认引导顺序,使新内核成为默认引导
cat /proc/cmdline                                      # 重启服务器后查看是否生效
# 配置主机间 SSH 免密(详细过程略)
# 安装 docker、kubectl(详细过程略)
🔔 docker 需要安装 20 以上版本,否则会出现报错 unknown flag: --cgroupns

2、部署集群

  • 部署单节点集群

kind create cluster
 
🔔 可选配置项
# --image kindest/node:v1.xx.xx           # 指定集群版本
# --name xxx                              # 指定集群上下文名称(不指定则默认为 kind)
# --wait 5s / 5m                          # 指定安装超时时间
# --retain                                # 保留日志,并通过 kind export logs 导出
# --config xx.yaml                        # 创建多节点集群,需要指定 yaml 文件
  • 部署多节点集群

kind create cluster --config config.yaml
 
# config.yaml 配置示例(1 Master + 2 Node)
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
  image: kindest/node:v1.27.3
- role: worker
  image: kindest/node:v1.27.3
- role: worker
  image: kindest/node:v1.27.3

3、实测结果

  • Kind 部署 Kubernetes 集群非常简单、方便

  • 可以提前下载 Kind 集群镜像,方便离线部署

Kind 常用命令

kind --help
kind creates and manages local Kubernetes clusters using Docker container 'nodes'
 
Usage:
  kind [command]
 
Available Commands:
  build       Build one of [node-image]
  completion  Output shell completion code for the specified shell (bash, zsh or fish)
  create      Creates one of [cluster]
  delete      Deletes one of [cluster]
  export      Exports one of [kubeconfig, logs]
  get         Gets one of [clusters, nodes, kubeconfig]
  help        Help about any command
  load        Loads images into nodes
  version     Prints the kind CLI version
 
Flags:
  -h, --help              help for kind
      --loglevel string   DEPRECATED: see -v instead
  -q, --quiet             silence all stderr output
  -v, --verbosity int32   info log verbosity, higher value produces more output
      --version           version for kind
 
Use "kind [command] --help" for more information about a command.
# 查看集群信息
kind get clusters
 
# 查看集群节点
kind get nodes
 
# 查看集群上下文
kind get kubeconfig
 
# 集群节点导入主机镜像
kind load docker-image <镜像名称>
 
# 集群节点导入打包镜像(tar文件)
kind load image-archive xxxx.tar
 
# 导出日志到指定目录
kind export logs somedir
.
├── docker-info.txt
├── kind-control-plane
│   ├── alternatives.log
│   ├── containerd.log
│   ├── containers
│   ├── images.log
│   ├── inspect.json
│   ├── journal.log
│   ├── kubelet.log
│   ├── kubernetes-version.txt
│   ├── pods
│   └── serial.log
└── kind-version.txt
 
# 删除集群
kind delete cluster