01-Kubernetes 入门:概念与安装
Kubernetes 入门:概念与安装
Part 1:什么是 Kubernetes
概念引入
想象你经营一个巨大的集装箱港口:
- 每天有上百艘货船要停靠(你的应用程序)
- 每艘船需要泊位、电力、工人(CPU、内存、存储)
- 有的船坏了要换一艘顶上(自动修复)
- 旺季来了要多安排船,淡季要减少(自动扩缩)
- 你不可能每艘船都手动管
Kubernetes(简称 K8s)就是那个港口调度系统。你告诉它"我要 3 艘这样的船",它会自动帮你安排泊位、调度工人、坏了就替换、多了就缩减。
名字由来
Kubernetes 来自希腊语,意思是"舵手"或"飞行员"。Google 内部叫它 Borg,2014 年开源后改名 Kubernetes。因为 K 和 s 之间有 8 个字母,所以简称K8s。
原理讲解
K8s 解决什么问题?
在 K8s 之前,你可能这样部署应用:
问题:每台服务器手动操作,不可扩展、容易出错、无法自动修复。
有了 K8s 之后:
你只需要声明"我要什么",K8s 自动帮你实现。
核心概念速览
| 概念 | 比喻 | 说明 |
|---|---|---|
| Cluster | 整个港口 | 一组服务器组成的集群 |
| Node | 港口里的码头 | 集群中的一台服务器 |
| Pod | 一艘货船 | K8s 的最小调度单元,包含一个或多个容器 |
| Deployment | 航运公司的调度计划 | 声明"我要几艘这样的船" |
| Service | 港口接待处 | 稳定的访问入口,不管后面的船怎么换 |
K8s 架构一览
💡现在不用记住每个组件。后面每篇文章会逐步介绍它们。这里只需要知道:控制平面负责"决策",工作节点负责"干活"。
声明式 vs 命令式
K8s 最大的特点是声明式操作:
| 命令式(传统) | 声明式(K8s) | |
|---|---|---|
| 方式 | “在服务器 A 上启动这个容器” | “我要 3 个这样的 Pod” |
| 谁做决策 | 你 | K8s |
| 自动修复 | ❌ 需要手动 | ✅ K8s 自动补上 |
| 示例 | docker run nginx | kubectl apply -f deploy.yaml |
声明式的好处:你写一份 YAML 描述想要的状态,K8s 会持续把现实状态调整到与你声明的一致——即使 Pod 崩溃了、节点宕机了,K8s 都会自动修复。
自检问题
- K8s 的 K 和 s 之间有几个字母?为什么叫 K8s?
- Pod 和容器是什么关系?
- 声明式和命令式的核心区别是什么?
Part 2:安装 Kind
概念引入
现在你知道了 K8s 是什么,但你不可能在港口调度系统上直接练习——你需要一个迷你港口。
Kind(Kubernetes in Docker)就是这样一个迷你港口。它在你电脑的 Docker 里运行一个完整的 K8s 集群,启动只要不到 1 分钟,用完随时删掉。就像在你书桌上放了一个港口模型,可以随便摆弄。
为什么选 Kind?
| 工具 | 启动速度 | 资源占用 | 多节点 | 适合场景 |
|---|---|---|---|---|
| Kind | ⚡ <1分钟 | 小 | ✅ | 本地学习、CI 测试 |
| Minikube | 🐢 2-5分钟 | 大 | ✅ | 需要完整 VM 隔离 |
| Docker Desktop | ⚡ 即开 | 小 | ❌ 单节点 | 只需要简单单节点 |
原理讲解
Kind 的工作原理
Kind 的每个"节点"实际上是一个 Docker 容器。容器里运行着完整的 K8s 组件:
这意味着你可以在一台电脑上创建多节点集群——每个节点就是一个容器。
前提条件
Kind 依赖 Docker。你需要先安装:
- Docker Desktop(macOS/Windows)或Docker Engine(Linux)
- kubectl(K8s 命令行工具)
- Kind本身
🪟Windows 用户:本文所有实验命令均为 Linux/macOS shell 语法。建议通过WSL2学习:
- 在 PowerShell(管理员)中执行
wsl --install,重启后进入 Ubuntu 终端- 安装 Docker Desktop,在 Settings → Resources → WSL Integration 中启用你的 Ubuntu 发行版
- 后续所有命令直接在 WSL2 Ubuntu 终端中执行(走下面的Linux路线即可)
动手实验
步骤 1:安装 Docker
macOS:从 docker.com 下载 Docker Desktop
Linux (Ubuntu):
# 安装 Dockersudoapt-getupdatesudoapt-getinstall-ydocker.iosudousermod-aGdocker$USER# 重新登录使 docker 组生效验证:
dockerversion预期输出:
Client: Version: 29.x.x Server: Version: 29.x.x步骤 2:安装 kubectl
# macOSbrewinstallkubectl# Linuxcurl-LO"https://dl.k8s.io/release/$(curl-L-shttps://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"# 如果上面网络下载不了,试下换谷歌源#curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -L -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"chmod+x kubectlsudomvkubectl /usr/local/bin/验证:
kubectl version--client预期输出:
Client Version: v1.31.0 Kustomize Version: v5.4.2步骤 3:安装 Kind
# macOSbrewinstallkind# Linux[$(uname-m)=x86_64]&&curl-Lo./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64[$(uname-m)=aarch64]&&curl-Lo./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-arm64chmod+x ./kindsudomv./kind /usr/local/bin/kind验证:
kind version预期输出:
kind v0.24.0 go1.22.6 linux/amd64步骤 4:创建你的第一个集群
先创建配置文件(后续 Ingress 和 NodePort 实验需要端口映射):
cat>kind-config.yaml<<'EOF' kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane image: kindest/node:v1.31.0 kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP - containerPort: 30080 hostPort: 30080 protocol: TCP - role: worker image: kindest/node:v1.31.0 - role: worker image: kindest/node:v1.31.0 EOF然后创建集群:
kind create cluster--namek8s-guide--configkind-config.yaml预期输出:
Creating cluster "k8s-guide" ... ✓ Ensuring node image (kindest/node:v1.31.0) 🖼 ✓ Preparing nodes 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-k8s-guide" You can now use your cluster with: kubectl cluster-info --context kind-k8s-guide Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/步骤 5:验证集群
kubectl get nodes预期输出:
NAME STATUS ROLES AGE VERSION k8s-guide-control-plane Ready control-plane 2m29s v1.31.0 k8s-guide-worker Ready <none> 85s v1.31.0 k8s-guide-worker2 Ready <none> 85s v1.31.0kubectl cluster-info预期输出:
Kubernetes control plane is running at https://127.0.0.1:45819 CoreDNS is running at https://127.0.0.1:45819/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy🎉恭喜!你有了一个运行中的 K8s 集群!
步骤 6:清理
实验完成后,删除集群:
kind delete cluster--namek8s-guide💡 如果你还想继续学习,先不要删!后面的文章会继续用这个集群。
自检问题
- Kind 集群的"节点"实际上是什么?
- 为什么 Kind 比 Minikube 启动快?
- kubectl 和 Kind 是什么关系?
下一步
集群准备好了,让我们部署第一个应用:
→ 02. 工作负载:Pod、ReplicaSet 与 Deployment
📚本文来自 K8s Guide—— 开源免费的 Kubernetes 中文学习指南
- 🗺️ 初学者轨道 + 面试轨道,从零基础到拿 Offer 一站式覆盖
- 🧪 每篇文章配套 Kind 实验脚本,本地一键运行
- 🔗 本文源码:docs/beginner/01-what-is-k8s.md / docs/beginner/02-install-kind.md
⭐如果对你有帮助,欢迎 Star!github.com/callmebg/k8s-guide
