进阶实战:云原生初探 (K8s)
当你拥有成百上千个容器分布在几十台服务器上时,Docker Compose 就显得无能为力了。这时我们需要 Kubernetes (K8s) —— 容器编排界的霸主。
1. 为什么叫 K8s?
K-u-b-e-r-n-e-t-e-s 单词共有 10 个字母,K 和 s 之间有 8 个字母,故名 K8s。它在希腊语中意为“舵手”或“飞行员”。
2. 核心架构:大脑与四肢
K8s 集群主要由两部分组成:
- API Server: 集群的入口,所有指令都通过它。
- Etcd: 集群的数据库,存储了所有的状态信息。
- Scheduler: 决定容器该跑在哪台机器上。
- Kubelet: 节点上的管家,负责与 Master 沟通。
- Container Runtime: 负责拉取镜像并运行(如 containerd 或 CRI-O)。
3. 三大核心资源对象
在 K8s 中,我们不再直接操作容器,而是操作对象:
- Pod (豌豆荚): K8s 的最小调度单位。一个 Pod 可以包含一个或多个容器,它们共享网络和存储。
- Deployment (部署): 定义应用的副本数量、升级策略(滚动更新)。
- Service (服务): 为 Pod 提供一个稳定的 IP 或域名,实现负载均衡。
4. 声明式 API:云原生的精髓
思维转变
- 命令式 (Docker): “帮我启动一个 Nginx 容器”。
- 声明式 (K8s): “我想要集群里永远运行着 3 个 Nginx 副本,请帮我维持这个状态”。
这种“最终一致性”的设计让 K8s 具备了强大的自愈能力:如果某个节点挂了,K8s 会自动在其他节点上重新拉起丢失的 Pod。
5. 快速上手:Minikube
想在本地尝试 K8s?Minikube 是最好的选择。
# 启动本地集群
minikube start
# 查看状态
kubectl get nodes
# 部署第一个应用
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39