下面 是一份从零开始、适配Ubuntu(腾讯云服务器)、带国内加速方案 的 Kind 完整安装+集群搭建教程,每一步都有命令、解释和验证方法,跟着做就能跑起来。
📋 前置条件
你的服务器/电脑需要:
- 系统:Ubuntu 20.04 / 22.04(其他Debian系也通用)
- 内存:至少 2GB 空闲内存(单节点集群),多节点建议 4GB+
- 已开启Docker(下面会教你装)
- 网络能访问外网(会配置国内加速解决拉取慢的问题)
一、第一步:安装并配置 Docker(Kind 的底层依赖)
Kind 是基于 Docker 运行的,所以必须先装好 Docker。
1. 安装 Docker(国内加速版)
通过 宝塔 安装 docker 并且 配置 国内 加速源: https://docker.m.daocloud.io
bash
if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec
2. 配置 Docker 免 sudo(必做!否则Kind会报错)
如果 全程使用 root 用户操作, 则可以 跳过 此步骤。
默认只有root用户能操作Docker,每次加sudo很麻烦,把当前用户加入docker组:
bash
# 将当前用户加入docker组
sudo usermod -aG docker $USER
# 刷新用户组配置(新会话生效,不想退出的话执行下面这条)
newgrp docker
二、第二步:安装 Kind 工具
推荐用二进制安装(无需Go环境,适合所有用户),也给你Go方式的备选。
方式1:二进制安装(推荐)
bash
# 1. 下载对应系统的Kind二进制(amd64架构,服务器通用)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64
# 2. 赋予执行权限
chmod +x ./kind
# 3. 移动到系统目录,全局可用
sudo mv ./kind /usr/local/bin/kind
# 4. 验证安装成功(输出版本号就OK)
kind version
方式2:Go 安装(有Go环境的用户可选)
bash
# 确保Go 1.21+已安装,执行下面的命令
go install sigs.k8s.io/kind@v0.24.0
三、第三步:安装 kubectl(管理K8s集群的工具)
我们需要用kubectl来操作Kind创建的集群,同样用国内源安装:
bash
# 1. 下载kubectl(阿里云镜像,速度快)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 2. 赋予执行权限
chmod +x ./kubectl
# 3. 移动到系统目录
sudo mv ./kubectl /usr/local/bin/kubectl
# 4. 验证安装
kubectl version --client
四、第四步:用 Kind 创建你的第一个 K8s 集群
场景1:快速创建单节点集群(适合新手入门)
这是最简单的方式,1条命令就能创建1个单节点的K8s集群(Control Plane和Worker在同一个容器里):
bash
# 创建名为my-first-cluster的单节点集群
kind create cluster --name my-first-cluster
成功的输出:
sh
root@VM-0-15-ubuntu:~# kind create cluster --name my-first-cluster
Creating cluster "my-first-cluster" ...
✓ Ensuring node image (kindest/node:v1.31.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-my-first-cluster"
You can now use your cluster with:
kubectl cluster-info --context kind-my-first-cluster
Have a nice day! 👋
测试:
sh
# 查看集群节点状态
kubectl get nodes
# 成功结果(你会看到):
NAME STATUS ROLES AGE VERSION
my-first-cluster-control-plane Ready control-plane xxs v1.31.0
只要显示 STATUS=Ready,就代表你的 K8s 集群完全可用!
关键说明:
- 执行后会自动:拉取
kindest/node镜像→启动Docker容器作为节点→配置kubectl上下文 - 首次拉取镜像可能需要1-3分钟,耐心等待即可
- 成功后会输出类似:
Cluster "my-first-cluster" created successfully.
场景2:创建多节点集群(适合学习K8s调度)
如果想体验多节点K8s集群,需要用配置文件定义节点数量。
- 新建配置文件
kind-multi-node.yaml:
yaml
# kind-multi-node.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: multi-node-cluster
nodes:
- role: control-plane # 控制平面节点(1个)
- role: worker # 工作节点1
- role: worker # 工作节点2
- 用配置文件创建集群:
bash
kind create cluster --config kind-multi-node.yaml
五、启动一个 Pod 测试
环境已经完美就绪! 创建 Redis Pod 进行测试。
说明: 新建的 redis pod 是在 my-first-cluster-control-plane 容器中 创建 和 运行的
bash
# 创建名为 redis 的 Pod,使用官方 redis 镜像
kubectl run redis --image=redis
# 验证 Pod 是否创建成功
# 查看所有 Pod(STATUS 变成 Running 就是成功)
kubectl get pods
#输出
NAME READY STATUS RESTARTS AGE
redis 0/1 ImagePullBackOff 0 5m11s
先看懂状态:ImagePullBackOff
这是 K8s 最常见的报错,翻译:镜像拉取失败 → 重试多次还是失败 → 进入等待状态
根本原因:
你用的是腾讯云服务器 ,国内网络直接拉取 Docker 官方的 redis 镜像 超时/失败
Kind 集群的节点容器里,下载不到镜像,所以 Pod 起不来。
Kind 的节点是独立的 Docker 容器,看不到你宿主机的镜像,必须手动把镜像「导入」集群!
sh
### ① 先删掉这个失败的 Pod
kubectl delete pod redis
### ② 宿主机拉取 **国内极速 Redis 镜像**
docker pull redis:latest
### ③ 把本地镜像 **加载进 Kind 集群**(核心命令!)
kind load docker-image redis:latest --name my-first-cluster
### ④ 重新创建 Redis Pod
kubectl run redis --image=redis:latest --image-pull-policy=IfNotPresent
通俗讲原理(为什么要这么做)
- 你的服务器 → Docker(有 redis 镜像)
- Kind 集群 → 是一个独立的 Docker 容器(隔离的,看不见外面的镜像)
- 所以必须用
kind load命令,把镜像强行塞进集群里- 集群有了镜像,Pod 就能直接启动,不用再去国外下载了
重点说明:--image-pull-policy=IfNotPresent
镜像标签是 redis:latest(最新版),K8s 对 latest 标签有强制规则:
无论本地有没有镜像,都会强制去外网重新拉取!
所以哪怕你用 kind load 把镜像装进集群了,它还是会去国外网站下载 → 失败 → ImagePullBackOff
--image-pull-policy=IfNotPresent 意思是: 本地有镜像就用本地的,本地没有才去外网拉
测试:
sh
kubectl get pods
# 输出
NAME READY STATUS RESTARTS AGE
redis 1/1 Running 0 9s
# 进入 Redis 命令行客户端
kubectl exec -it redis -- redis-cli
# 执行后你会进入 127.0.0.1:6379> 交互模式,输入:
set test hello-k8s
get test
exit
六:验证集群是否正常运行
集群创建完成后,用下面的命令验证状态:
bash
# 1. 查看当前kubectl指向的集群上下文
kubectl config current-context
# 2. 查看集群节点状态(STATUS显示Ready就是正常)
kubectl get nodes
# 3. 查看集群组件状态
kubectl cluster-info
# 4. 查看集群运行的所有Pod(kube-system命名空间下的组件都Running)
kubectl get pods -n kube-system
同时你可以用docker ps看到Kind创建的节点容器:
bash
docker ps | grep kindest/node
七、Kind 常用命令&日常操作
1. 集群管理
bash
# 查看所有Kind集群
kind get clusters
# 切换kubectl到指定集群(如果有多个集群)
kubectl config use-context kind-<集群名>
# 删除指定集群
kind delete cluster --name <集群名>
# 删除所有Kind集群(一键清理)
kind delete clusters --all
2. 本地镜像加载(必学!部署应用必备)
你本地构建的Docker镜像,Kind集群默认看不到,需要手动加载进去:
bash
# 假设你本地有个叫my-app:v1的镜像
kind load docker-image my-app:v1 --name <你的集群名>
八、常见问题&排错指南
问题1:拉取kindest/node镜像超时/失败
-
解决:检查Docker镜像加速是否配置成功,或手动拉取国内镜像:
bash# 以v1.29.0为例,拉取国内镜像并打tag docker pull registry.aliyuncs.com/google_containers/kindest-node:v1.29.0 docker tag registry.aliyuncs.com/google_containers/kindest-node:v1.29.0 kindest/node:v1.29.0
问题2:集群创建时提示内存不足
- 解决:单节点集群建议至少2GB空闲内存,多节点建议4GB+,关闭服务器上其他占用内存的进程。
问题3:kubectl 无法连接集群
-
解决:检查Kind集群是否运行正常,执行
kind get clusters确认集群存在,或重新创建集群:bashkind delete cluster --name <集群名> kind create cluster --name <集群名>
补充:和其他工具对比
| 工具 | 启动速度 | 资源占用 | 功能完整性 | 适合场景 |
|---|---|---|---|---|
| Kind | 秒级启动 | 极低(容器级) | 完整K8s集群,支持多节点 | 快速测试、CI/CD、学习K8s基础 |
| k3s | 较快 | 极低(二进制精简版) | 轻量版K8s,部分组件裁剪 | 低配置机器、边缘设备、长期学习 |
| Minikube | 较慢 | 较高(默认VM级) | 功能最全,支持插件 | 本地开发、需要完整功能的场景 |
Kind 最大的优势就是轻量、快速、不挑机器。
九、Kuboard 面板 可视化 操控 k8s
Kuboard 镜像拉取
sh
docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
启动 容器
下面这个是 用 kind 创建的 k8s 集群容器 的基本信息:

Kind 集群运行在 Docker 容器内,Kuboard 也运行在 Docker 容器中,默认网络隔离。
因为 Kuboard 能正常工作的前提 就是 能访问到 Kind 集群。
所以 启动 Kuboard 容器 的核心 就是保证 两个容器 的 网络连通性 。
可以通过 --network 参数 让 Kuboard 容器与 Kind 集群容器在同一网络中
sh
# 1. 查看 Kind 集群使用的网络(默认是 kind 网络)
docker network ls | grep kind
# 2. 启动 Kuboard 并加入 kind 网络
docker run -d \
--name kuboard \
--restart=unless-stopped \
--network=kind # 关键:加入 kind 网络
-p 80:80 \
-p 443:443 \
-v /root/kuboard-data:/data \
swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3
kuboard 控制面板
step1: 打开 面板
sh
http://你的服务器公网IP

初始账号密码为=> 账号:admin 密码:Kuboard123
如果 忘记密码, 可以通过 以下命令 重置密码:
# 进入到 kuboard 后执行: kuboard-admin reset-passwordkuboard-admin reset-password 是一个封装好的运维命令,它的设计初衷就是"一键恢复",命令内部硬编码 了默认密码
Kuboard123。它会自动调用加密算法(通常是 bcrypt)对该明文密码进行哈希处理,然后将生成的密文直接覆盖写入到 etcd 中存储 admin 用户信息的键值对里。
step2: 登录成功后,导入你的 Kind 集群

太棒了!你已经成功进入 Kuboard 主界面了,接下来跟着这 5 步,就能一键连接上你的 Kind 集群:
- 第 1 步:点击「添加集群」按钮
在当前界面中间,有个带+号的「添加集群」卡片,直接点击它,进入集群添加页面。
- 第 2 步:选择「导入已有 Kubernetes 集群」
进入添加页面后,你会看到两种方式,选择:
导入已有 Kubernetes 集群
(不用选创建新集群,我们已经有 Kind 集群了)
- 第 3 步:导出并复制 Kind 集群的 kubeconfig
回到你的服务器终端,执行下面这条命令,导出 Kind 集群的完整配置文件:
bash
kind get kubeconfig --name my-first-cluster
执行后,终端会输出一大段内容(从 apiVersion: v1 开始到最后一行),全选复制所有内容(Ctrl+A → Ctrl+C)。
- 第 4 步:在 Kuboard 中粘贴并提交
回到 Kuboard 的添加集群页面,按下面填写:
- 集群名称 :随便填一个好记的名字,比如
my-kind-cluster - 导入方式:默认就是「使用 kubeconfig 方式导入」,不用改
- kubeconfig 输入框 :把你刚才复制的所有内容,完整粘贴进去

把刚才复制的所有内容,完整粘贴到 kubeconfig 那个黑色的大输入框里。粘贴完成后,你会发现:
下面的 Context 下拉框会自动出现一个选项(一般是 kind-my-first-cluster)
ApiServer 地址 也会自动填充好(比如 https://my-first-cluster-control-plane:6443)
此处 的 重点说明:
在的 ApiServer 地址 https://127.0.0.1:38021 是给宿主机上的 kubectl 用的, 通过 宿主机的端口 映射访问 Kind 集群。
但你的 Kuboard 容器运行在 kind 这个 Docker 网络里,它访问 127.0.0.1 指向的是 Kuboard 容器自己,根本访问不到宿主机的 38021 端口,所以直接提交会连接超时 / 失败。
直接把 ApiServer 地址改成下面这个:
https://my-first-cluster-control-plane:6443
说明:
- Kuboard 容器和 Kind 控制平面容器在同一个 kind Docker 网络里,Docker 网络中可以直接用容器名解析,my-first-cluster-control-plane 就是你的 Kind 控制平面容器名。
6443 是 Kind 集群 ApiServer 的默认端口,容器内部直接监听,同一个网络里的容器可以直接访问,不需要端口映射、也不需要放开安全组。 - 必须是 HTTPS, 因为:1 Kubernetes 强制规范; 2 kubeconfig 自带证书
step3:接入成功 的 界面

step4: 接下来可以直接玩这些核心功能
- 查看节点状态:左侧菜单「Kubernetes 集群」→ 点你的集群 → 「节点」
- 查看所有 Pod:进入集群后,左侧「工作负载」→「Pod」
- 网页进容器终端:点任意 Pod → 右上角「终端」,直接进入容器内部操作
- 部署第一个应用:「工作负载」→「Deployment」→「创建」,可视化部署 Nginx 等应用