本章目录(点击跳转):
- 2.1 学习路线选择
- 2.2 安装 kubectl(命令行工具)
- 2.2.1 Windows
- 2.2.2 macOS
- 2.2.3 Linux
- 2.3 安装并启动 minikube
- 2.3.1 Windows(WSL2,推荐)
- 2.3.2 macOS
- 2.3.3 Linux
- 2.3.4 启动集群
- 2.3.5 常用 minikube 命令
- 2.4 跑第一个应用:Hello Kubernetes
- 2.4.1 命令行方式(30 秒上手)
- 2.4.2 用 YAML 方式(正式做法)
- 2.4.3 用 Deployment + Service(生产形态)
- 2.5 备选方案:用 kind 建集群(了解)
- 2.6 环境检查清单
- 2.7 常见问题 FAQ
- 2.8 本章小结
本章目标:在你自己的电脑上装好一个可以随便折腾的 Kubernetes 集群,并跑通第一个应用。学 K8s 一定要动手,不要只看不练。
2.1 学习路线选择
初学者学习 K8s 有几种典型路径:
| 方案 | 说明 | 适合谁 |
|---|---|---|
| minikube(本书推荐) | 在本机起一个单节点集群,一条命令搞定 | 所有初学者 |
| kind | 用 Docker 容器模拟 K8s 节点,轻量 | 已会 Docker 的人、CI 场景 |
| k3s | 轻量版 K8s,一个二进制文件 | 想在一台小服务器上玩真集群 |
| 云厂商托管集群(ACK/EKS/GKE) | 花钱,最接近生产 | 想直接体验生产环境 |
建议:先用 minikube 把本书所有内容跑通,之后想体验"多节点真集群"再上 k3s 或云上集群。本书所有命令在 minikube / kind / 云上集群都通用。
本章以 minikube 为主线(Windows + WSL2 / macOS / Linux 都支持),附带 kind 的安装方法。
2.2 安装 kubectl(命令行工具)
kubectl 是操作集群的"遥控器",任何方案都要装它。
2.2.1 Windows
# 方式一:winget 一键安装(推荐)
winget install kubectl
# 方式二:scoop
scoop install kubectl
# 验证
kubectl version --client
2.2.2 macOS
# 方式一:Homebrew
brew install kubectl
# 方式二:官方脚本
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# 验证
kubectl version --client
2.2.3 Linux
# 以 Ubuntu/Debian 为例
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://packages.cloud.google.com/apt kubernetes-main $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubectl
# 验证
kubectl version --client
安装完成后应该看到类似输出:
Client Version: v1.35.0
Kustomize Version: v5.x.x
2.3 安装并启动 minikube
minikube 依赖一个虚拟机/容器运行时(Docker、Hyper-V、WSL2 等)。
2.3.1 Windows(WSL2,推荐)
- 安装 WSL2:
# 管理员 PowerShell
wsl --install
# 重启后安装一个发行版,比如:
wsl --install -d Ubuntu
- 在 WSL2(Ubuntu)里安装 Docker Desktop 的 WSL 集成,或直接在 WSL2 里装 minikube 使用 docker 驱动。最简单的组合是 Docker Desktop + WSL2 后端:
# 安装 Docker Desktop(Windows)
winget install Docker.DockerDesktop
- Docker Desktop 设置里勾选 "Use the WSL 2 based engine"。
- 安装 minikube(在 WSL2 的 Ubuntu 里执行,这样网络和文件系统最快):
curl -Lo minikube https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
minikube version
2.3.2 macOS
brew install minikube
minikube version
2.3.3 Linux
curl -Lo minikube https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
chmod +x minikube
sudo mv minikube /usr/local/bin/
2.3.4 启动集群
# Windows(用 Docker 驱动)
minikube start --driver=docker
# macOS(默认虚拟机驱动即可)
minikube start
# 查看状态
minikube status
minikube ip
启动成功的输出末尾会有:
Done! kubectl is now configured to use "minikube" cluster
2.3.5 常用 minikube 命令
minikube status # 看状态
minikube stop # 关机(省内存)
minikube start # 再开机
minikube delete # 彻底删除,从头再来
minikube dashboard # 打开 Web 控制台(浏览器里看集群)
minikube service list # 看暴露的服务
提示:
minikube dashboard是新手的好朋友:浏览器里能看 Pod、日志、YAML,不用背命令也能感受集群。
2.4 跑第一个应用:Hello Kubernetes
现在开始真刀真枪。
2.4.1 命令行方式(30 秒上手)
# 1) 创建一个 nginx Pod
kubectl run hello-web --image=nginx:1.27
# 2) 查看它是否 Running
kubectl get pods
# 3) 打开浏览器访问(minikube 特殊方式)
minikube service hello-web --url
# 或者端口转发到本地
kubectl port-forward pod/hello-web 8080:80
# 浏览器打开 http://localhost:8080 ,应该看到 "Welcome to nginx!"
kubectl get pods 输出:
NAME READY STATUS RESTARTS AGE
hello-web 1/1 Running 0 30s
字段含义:
| 字段 | 含义 |
|---|---|
| NAME | Pod 名字 |
| READY | 就绪容器数/总容器数,1/1 表示 1 个容器且已就绪 |
| STATUS | 状态,Running 才算正常 |
| RESTARTS | 重启次数,持续增加说明容器一直崩溃 |
| AGE | 存在时长 |
2.4.2 用 YAML 方式(正式做法)
创建文件 hello-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: hello-web
labels:
app: hello-web
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
应用它:
kubectl apply -f hello-pod.yaml
# 验证
kubectl get pod hello-web -o wide
# 查看完整定义(学习资源结构的好方法)
kubectl get pod hello-web -o yaml
# 清理
kubectl delete -f hello-pod.yaml
2.4.3 用 Deployment + Service(生产形态)
创建文件 hello-app.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-web
spec:
replicas: 2
selector:
matchLabels:
app: hello-web
template:
metadata:
labels:
app: hello-web
spec:
containers:
- name: nginx
image: nginx:1.27
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: hello-web
spec:
selector:
app: hello-web
ports:
- port: 80
targetPort: 80
kubectl apply -f hello-app.yaml
kubectl get deploy,pod,svc
现在试试"自愈":
# 干掉一个 Pod
kubectl delete pod -l app=hello-web
# 3 秒后看,K8s 会自动补一个新的
kubectl get pods -w
恭喜!你已经体验了 Kubernetes 的核心魅力:声明 2 个副本,集群里永远有 2 个。
2.5 备选方案:用 kind 建集群(了解)
如果你更喜欢"纯 Docker"的方式,kind 10 分钟就能起一个集群:
# 1) 安装 kind(Linux/macOS)
curl -Lo kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x kind && sudo mv kind /usr/local/bin/
# Windows 用户在 WSL2 里安装:
curl -Lo kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x kind && sudo mv kind /usr/local/bin/
# 2) 创建集群
kind create cluster --name mycluster
# 3) 验证
kubectl get nodes -o wide
# 4) 用完删除
kind delete cluster --name mycluster
2.6 环境检查清单
开始后面的章节前,确认这些都通过:
# 1) kubectl 能连上集群
kubectl cluster-info
# 2) 节点健康
kubectl get nodes
# 3) 能拉镜像、能跑容器(再跑一遍 hello world)
kubectl run check --image=busybox:1.36 --rm -- sh -c 'echo ok'
# 4) 核心组件都 Running
kubectl get pods -n kube-system
2.7 常见问题 FAQ
Q1:minikube start 报错,提示驱动不可用? 先确保 Docker Desktop(Windows/macOS)已启动且 WSL2 后端已开启,再 minikube start --driver=docker。
**Q2:kubectl get pods 提示 "The connection to the server was refused"?** 集群没启动。minikube start 后执行 minikube dashboard 或 kubectl get nodes 验证。
**Q3:Pod 一直 ImagePullBackOff?** 镜像拉不下来:多半是网络问题或镜像名写错。国内环境可给镜像加前缀,例如 docker.io/library/nginx:1.27 换成可用的镜像源(如阿里云 ACR 的公共镜像)。
Q4:minikube 太占内存? minikube config set memory 4096(分配 4G),然后 minikube delete && minikube start。
Q5:想完全重来?
minikube delete
minikube start
2.8 本章小结
- 用 minikube 在本机建了单节点集群;kubectl 是所有操作的入口。
- 跑通了三种形态:单 Pod、YAML 定义的 Pod、Deployment + Service。
- 体验了 K8s 自愈:删 Pod 自动补。
- 记住排障起点:
kubectl get pods看 STATUS 列。
下一章:深入 Pod——K8s 最基础也最重要的对象。
原文链接:第2章 环境搭建,转载请注明来源!
