K8s学习笔记:Kind集群搭建与第一个Pod

目标:在 WSL2 中用 Kind 起一个 K8s 集群,部署第一个 Pod


1.1 Kind 集群搭建

什么是 Kind

Kind(Kubernetes IN Docker)把 K8s 的每个节点跑在 Docker 容器里。一台机器就能模拟多节点集群。对学习来说足够用,5 分钟起一个。

前置检查

你的 WSL2 Ubuntu 应该已经有 Docker:

1
2
docker --version
# Docker version 26.x.x ...

如果没有,先装 Docker。

安装 kubectl

1
2
3
4
5
6
7
8
9
10
11
# 下载最新稳定版
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# 太慢了就多线程下载
aria2c -x 16 -s 16 -o kubectl \
"https://dl.k8s.io/release/v1.36.2/bin/linux/amd64/kubectl"

# 安装
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

# 验证
kubectl version --client

kubectl 是你和 K8s 对话的唯一入口。所有操作都通过它。

安装 Kind

1
2
3
4
5
6
7
8
# 下载二进制
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
# 将kind放入环境变量(/usr/local/bin)
sudo mv ./kind /usr/local/bin/kind

# 验证
kind version

创建第一个集群

1
2
3
4
5
6
kind create cluster --name my-first

#--------------------------------------
# kind | 调用 kind 工具
# create cluster | 子命令:创建一个新集群
# --name my-first | 给集群起名叫 my-first

输出:

1
2
3
4
5
6
7
Creating cluster "my-first" ...
✓ Ensuring node image (kindest/node:v1.28.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾

注意:Kind 在国内拉镜像可能慢。如果卡住,设置 Docker 镜像加速:

1
2
3
4
5
6
{
"registry-mirrors": [
"https://docker.xuanyuan.me/",
"https://docker.1ms.run"
]
}

验证集群

1
2
3
4
5
# 集群信息
kubectl cluster-info

# 查看节点
kubectl get nodes

期望输出:

1
2
3
4
5
6
7
8
9
root@bote798-ubuntu:~# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:41165
CoreDNS is running at https://127.0.0.1:41165/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

root@bote798-ubuntu:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
my-first-control-plane Ready control-plane 31s v1.27.3

常用 Kind 命令速查

1
2
3
kind get clusters          # 列出所有集群
kind delete cluster --name my-first # 删除集群
kind create cluster --name k8s-lab # 创建新集群

1.2 第一个 Pod

概念:Pod 是什么

Pod 是 K8s 的最小调度单位。一个 Pod 里可以有 1 个或多个容器,它们共享网络和存储。

1
2
3
4
5
6
7
8
┌────────── Pod ──────────┐
shared IP: 10.244.1.5
│ ┌────────┐ ┌────────┐ │
│ │ nginx │ │ sidecar │ │
│ │ :80 │ │ :8080 │ │
│ └────────┘ └────────┘ │
│ 共享 localhost │
└─────────────────────────┘

大多数时候一个 Pod 只跑一个容器,就像 Docker 里 docker run 一样。

创建一个 Pod

1
kubectl run my-nginx --image=nginx:alpine --port=80

查看 Pod

1
2
3
4
5
6
7
kubectl get pods
# NAME READY STATUS RESTARTS AGE
# my-nginx 1/1 Running 0 10s

kubectl get pods -o wide # 显示 IP 和所在节点
# NAME READY STATUS RESTARTS AGE IP NODE
# my-nginx 1/1 Running 0 20s 10.244.0.5 my-first-control-plane

查看 Pod 详细信息

1
kubectl describe pod my-nginx

重点关注输出里的 Events 部分——Pod 从创建到运行的每一步都有记录。出了问题先看这里。

1
2
3
4
5
6
7
8
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 30s default-scheduler Successfully assigned...
Normal Pulling 29s kubelet Pulling image "nginx:alpine"
Normal Pulled 25s kubelet Successfully pulled image
Normal Created 25s kubelet Created container nginx
Normal Started 25s kubelet Started container nginx

查看日志

1
2
kubectl logs my-nginx
kubectl logs -f my-nginx # 实时追踪(类似 tail -f)

进入 Pod 内部

1
2
3
4
5
6
7
kubectl exec -it my-nginx -- sh

# 进去后可以探索:
ls /
cat /etc/nginx/nginx.conf
wget -qO- localhost # 访问本地 nginx
exit

端口转发(从你的电脑访问 Pod)

1
2
3
4
5
kubectl port-forward pod/my-nginx 8080:80

# 另开一个终端
curl localhost:8080
# 或者在 Windows 浏览器访问 IP:8080

删除 Pod

1
2
kubectl delete pod my-nginx
kubectl get pods # 确认已删除

1.3 章节练习

完成以下练习,确认掌握了本章内容后再进入第二章。

练习 1:集群操作

1
2
3
# 1. 删除当前集群,重新创建一个叫 k8s-lab 的集群
# 2. 确认集群运行正常(kubectl cluster-info)
# 3. 查看节点的详细信息(kubectl describe node)

练习 2:Pod 生命周期

1
2
3
4
5
6
# 1. 创建一个名为 hello-world 的 Pod,使用 nginx:alpine 镜像
# 2. 查看 Pod 的 IP 地址和所在节点
# 3. 用 kubectl describe 查看 Pod 的 Events,理解每一步
# 4. 用 port-forward 将 Pod 的 80 端口映射到本地 9090,浏览器访问看是否通
# 5. 进入 Pod 内部,确认 nginx 配置文件路径
# 6. 删除 Pod,确认已删除

练习 3:排查故障

1
2
3
4
5
6
# 1. 故意创建一个使用不存在镜像的 Pod:
# kubectl run bad-pod --image=does-not-exist:v99
# 2. 用 kubectl get pods 查看状态(应该看到 ImagePullBackOff 或 ErrImagePull)
# 3. 用 kubectl describe 查看 Events,找到错误原因
# 4. 用 kubectl logs 尝试查看日志(应该为空)
# 5. 删除这个 Pod

自检清单

  • 能创建和删除 Kind 集群
  • 理解 kubectl get / describe / logs / exec / port-forward 五个核心命令
  • 知道 Pod 状态含义:Running / Pending / ImagePullBackOff / CrashLoopBackOff
  • 能进入 Pod 内部执行命令
  • 能从本地浏览器访问 Pod 里的服务

K8s学习笔记:Kind集群搭建与第一个Pod
https://bote798.top/2026/07/12/K8s学习笔记-01-Kind集群搭建与第一个Pod/
作者
bote798
发布于
2026年7月12日
更新于
2026年7月12日
许可协议