通过 Kind 快速构建 k8s 集群

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