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

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

Fre5h1nd Lv6

💡简介

在日常开发和测试中,常常需要一个独立的 Kubernetes 集群环境进行实验或验证新功能。由于本机已有集群且承担其他任务,不希望相互干扰,因此选择在服务器上通过 kind(Kubernetes IN Docker)快速搭建一个虚拟集群。本文记录了 kind 的安装与使用过程,供有类似需求的同学参考。

🖼️背景

  • 本机已有 k8s 集群,承担日常开发任务,不便随意更改。
  • 需要一个”干净”的测试环境,且希望部署和销毁都足够方便。
  • 服务器资源充足,适合运行 Docker 容器。
  • kind 支持在 Docker 容器中运行多节点 k8s 集群,适合测试和 CI 场景。

🧠思路

  1. 在服务器上安装 Docker。
  2. 安装 kind 工具。
  3. 使用 kind 创建一个新的 k8s 虚拟集群。
  4. 配置 kubectl 访问新集群。
  5. 验证集群可用性,进行简单测试。
  6. 记录常见问题与解决方法。

🔨解决

1. 安装 Docker

如果服务器尚未安装 Docker,可参考相关参考资料。[1]

对于 centos,可使用如下命令:

1
2
3
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl enable docker
sudo systemctl start docker

2. 安装 kind

kind 只是一个二进制文件,因此下载下来放到 bin 目录即可[2]
推荐使用官方 release 版本:

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

可通过 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
    2
    ERROR: 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
  • 若非管理员用户,还会出现以下 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
  • 此外,由于统版内核版本过低(目前服务器还是CentOS Linux release 7.9.2009 (Core),已经停止维护,之前还出现过 vscode 不支持问题,真是麻烦),导致较新版 k8s 不兼容,通过降低 k8s 版本进行解决。具体报错如下:
    1
    2
    3
    4
    ERROR: 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
2
3
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

验证集群连接:

1
2
kubectl cluster-info --context kind-test-cluster
kubectl get nodes

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。

🗺参考文献

[1] 安装 Docker

[2] Kubernetes教程(十五)—使用 kind 在本地快速部署一个 k8s集群

[3] k8s–kind 搭建 k8s 集群

[4] kind 实用指南

[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

[7] Kubernetes permission denied error on config.lock

[8] bashrc、bash_profile傻傻分不清楚?

  • 标题: 【集群】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 进行许可。
评论