【集群】K8S集群搭建记录——kind搭建隔离测试环境

💡简介
在日常开发和测试中,常常需要一个独立的 Kubernetes 集群环境进行实验或验证新功能。由于本机已有集群且承担其他任务,不希望相互干扰,因此选择在服务器上通过 kind(Kubernetes IN Docker)快速搭建一个虚拟集群。本文记录了 kind 的安装与使用过程,供有类似需求的同学参考。
🖼️背景
- 本机已有 k8s 集群,承担日常开发任务,不便随意更改。
- 需要一个”干净”的测试环境,且希望部署和销毁都足够方便。
- 服务器资源充足,适合运行 Docker 容器。
- kind 支持在 Docker 容器中运行多节点 k8s 集群,适合测试和 CI 场景。
🧠思路
- 在服务器上安装 Docker。
- 安装 kind 工具。
- 使用 kind 创建一个新的 k8s 虚拟集群。
- 配置 kubectl 访问新集群。
- 验证集群可用性,进行简单测试。
- 记录常见问题与解决方法。
🔨解决
1. 安装 Docker
如果服务器尚未安装 Docker,可参考相关参考资料。[1]
对于 centos,可使用如下命令:
1 | sudo yum install docker-ce docker-ce-cli containerd.io |
2. 安装 kind
kind 只是一个二进制文件,因此下载下来放到 bin 目录即可[2]。
推荐使用官方 release 版本:
1 | curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.22.0/kind-linux-amd64 |
可通过
kind --version
验证安装。
3. 创建 kind 集群
1 | kind create cluster --name test-cluster |
- 默认会创建一个单节点集群,若需多节点可自定义配置文件。
- kind 会自动生成 kubeconfig 文件,默认路径为
~/.kube/config
。 - 若非管理员用户,可能会出现以下 docker 权限报错,需要在指令前加上
sudo
(即sudo kind create cluster --name test-cluster
),但后续所有命令都需要加sudo
所以很麻烦。也可以参考[5,6]增加用户组docker
。权限问题报错 1
2ERROR: failed to create cluster: failed to list nodes: command "docker ps -a --filter label=io.x-k8s.kind.cluster=test-cluster --format '{{.Names}}'" failed with error: exit status 1
Command Output: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.44/containers/json?all=1&filters=%7B%22label%22%3A%7B%22io.x-k8s.kind.cluster%3Dtest-cluster%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied- 永久增加用户组方法(若使用 vscode 等软件远程连接,则需要关闭窗口重新打开,否则将会无效。白白害我排查半天。)
增加用户组方法 1
2
3
4
5
6
7
8
9
10
11
12# 创建Docker组
sudo groupadd docker
# 将您的用户添加到docker组中(以下指令三选一)
sudo usermod -aG docker ${USER}
sudo gpasswd -a ${USER} docker
newgrp - docker # 将当前用户加入 docker 组
# 您需要注销并重新登录,以便重新评估您的群组成员资格,或者输入以下命令:
su -s ${USER}
# ≈查看用户所属组
groups ${USER}
# 验证你可以不使用 sudo 运行 docker 命令
docker run hello-world - 一次性赋权方法(每次 docker 重启都需要重新设置)
一次性赋权方法 1
sudo chmod 666 /var/run/docker.sock
- 永久增加用户组方法(若使用 vscode 等软件远程连接,则需要关闭窗口重新打开,否则将会无效。白白害我排查半天。)
- 若非管理员用户,还会出现以下 K8s 权限报错,需要在指令前加上
sudo
(即sudo kind create cluster --name test-cluster
),但后续所有命令都需要加sudo
所以很麻烦。也可以参考[7]增加用户专属配置文件。权限问题报错 1
ERROR: failed to create cluster: failed to lock config file: open /etc/kubernetes/admin.conf.lock: permission denied
- 增加用户专属配置文件(根据[8],环境变量配置一般放在
~/.bash_profile
而非~/.bashrc
。rc系列修改之后,只要重新打开一个终端窗口就可以生效,所以其中内容可以被多次加载;profile系列,需要重新开启新的会话才能生效,所以其中内容仅仅在登录的时候被加载一次。)增加用户专属配置文件方法 1
2
3
4
5
6
7# 复制config文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown -R $(id -u):$(id -g) $HOME/.kube/
# 配置环境变量
echo "export KUBECONFIG=$HOME/.kube/config" >> ~/.bash_profile
source ~/.bash_profile
- 增加用户专属配置文件(根据[8],环境变量配置一般放在
- 此外,由于统版内核版本过低(目前服务器还是
CentOS Linux release 7.9.2009 (Core)
,已经停止维护,之前还出现过 vscode 不支持问题,真是麻烦),导致较新版 k8s 不兼容,通过降低 k8s 版本进行解决。具体报错如下:1
2
3
4ERROR: failed to create cluster: command "docker run --name test-cluster-control-plane --hostname test-cluster-control-plane --label io.x-k8s.kind.role=control-plane --privileged --security-opt seccomp=unconfined --security-opt apparmor=unconfined --tmpfs /tmp --tmpfs /run --volume /var --volume /lib/modules:/lib/modules:ro -e KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER --detach --tty --label io.x-k8s.kind.cluster=test-cluster --net kind --restart=on-failure:1 --init=false --cgroupns=private --volume /dev/mapper:/dev/mapper --publish=127.0.0.1:44259:6443/TCP -e KUBECONFIG=/etc/kubernetes/admin.conf kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245" failed with error: exit status 125
Command Output: WARNING: Your kernel does not support cgroup namespaces. Cgroup namespace setting discarded.
ca8cbcec785528161581ddbb744194bed718bc8cbfe3e6ac73300312d3d0e6d1
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: cgroup namespaces aren't enabled in the kernel: unknown.
4. 配置 kubectl
Kind 只负责创建集群(会配置好 kubeconfig),后续操作集群的话需要手动安装 kubectl[2]。
如未安装 kubectl,可参考:
1 | curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" |
验证集群连接:
1 | kubectl cluster-info --context kind-test-cluster |
5. 常用操作
删除集群:
1
kind delete cluster --name test-cluster
查看集群列表:
1
kind get clusters
自定义集群配置(如多节点、端口映射等),可参考官方文档。
切换回原 K8s
1
2
3
4
5
6# 查看 `${KUBECONFIG}` 文件中 `contexts` 下原`context`的 `name`,假设为`CONTEXT_NAME`
# 通常路径为: "KUBECONFIG=/etc/kubernetes/admin.conf"
# 使用以下命令,相当于修改 `${KUBECONFIG}` 文件中 `current-context` 为 ${CONTEXT_NAME}
$ kubectl config use-context ${CONTEXT_NAME}
# 查看修改后的集群环境
$ kubectl cluster-info
6. 常见问题
- 端口冲突:如需暴露端口,需在 kind 配置文件中映射主机端口。
- 网络问题:服务器需能访问外网拉取镜像,或提前下载好所需镜像。
- 权限问题:如遇到
permission denied
,请检查 Docker 及 kind 的执行权限。
🏥反思
- kind 适合开发、测试、CI 场景,不建议用于生产环境。
- 虚拟集群资源消耗依赖于 Docker 容器,建议合理分配服务器资源。
- kind 支持多节点和自定义配置,灵活性较高,适合多种测试需求。
- 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
- 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。
🗺参考文献
[2] Kubernetes教程(十五)—使用 kind 在本地快速部署一个 k8s集群
[5] How to fix docker: Got permission denied while trying to connect to the Docker daemon socket
[6] 关于Docker时的权限问题解决dial unix /var/run/docker.sock: connect: permission denied
- 标题: 【集群】K8S集群搭建记录——kind搭建隔离测试环境
- 作者: Fre5h1nd
- 创建于 : 2025-05-19 22:07:06
- 更新于 : 2025-05-20 01:39:30
- 链接: https://freshwlnd.github.io/2025/05/19/k8s/k8s-kind-install/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论