目录
深入理解 Kubernetes:从容器编排到微服务架构
作者:文文
Kubernetes 是什么?
Kubernetes (K8s) 是谷歌开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。
核心功能
- 🎯 自动部署:将容器分配到节点并自动调度
- 🔄 自我修复:监控容器状态,失败时自动重启
- 📊 负载均衡:分散流量到多个容器
- 🚀 灰度发布:支持滚动更新和回滚
- 💾 持久化存储:管理有状态应用的数据
Kubernetes 架构
┌─────────────────────────────────────────┐
│ Kubernetes 集群 │
├─────────────────────────────────────────┤
│ │
│ Master Node (控制平面) │
│ ├─ API Server │
│ ├─ Scheduler │
│ ├─ Controller Manager │
│ └─ etcd (配置数据存储) │
│ │
│ Worker Nodes (计算节点) │
│ ├─ kubelet (节点代理) │
│ ├─ kube-proxy (网络代理) │
│ └─ Container Runtime (Docker/containerd)│
└─────────────────────────────────────────┘
核心概念
Pod(最小部署单元)
Pod 是 Kubernetes 中最小的可部署对象,一个 Pod 可以包含一个或多个容器(通常是一个)。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Deployment(应用部署)
Deployment 管理 Pod 的副本集,支持自动扩展和滚动更新。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Service(服务暴露)
Service 为 Pod 提供稳定的网络访问接口。
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer # 暴露到外网
常用命令
# 查看资源
kubectl get pods # 列出所有 Pod
kubectl get services # 列出所有 Service
kubectl get deployments # 列出所有 Deployment
# 创建和删除
kubectl apply -f deployment.yaml # 创建资源
kubectl delete -f deployment.yaml # 删除资源
# 查看详情
kubectl describe pod <pod-name> # 查看 Pod 详情
kubectl logs <pod-name> # 查看 Pod 日志
kubectl exec -it <pod-name> sh # 进入 Pod 容器
# 扩展和更新
kubectl scale deployment nginx-deployment --replicas=5
kubectl set image deployment/nginx-deployment nginx=nginx:1.21
微服务架构示例
# api-gateway-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-gateway
spec:
replicas: 2
selector:
matchLabels:
app: api-gateway
template:
metadata:
labels:
app: api-gateway
spec:
containers:
- name: gateway
image: api-gateway:latest
ports:
- containerPort: 8000
env:
- name: USER_SERVICE_URL
value: "http://user-service:8001"
---
# user-service-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: user-service
spec:
replicas: 3
selector:
matchLabels:
app: user-service
template:
metadata:
labels:
app: user-service
spec:
containers:
- name: user-service
image: user-service:latest
ports:
- containerPort: 8001
livenessProbe: # 健康检查
httpGet:
path: /health
port: 8001
initialDelaySeconds: 30
periodSeconds: 10
生产级别最佳实践
1. 资源限制
resources:
requests: # 保证的资源
cpu: "100m"
memory: "128Mi"
limits: # 最多使用的资源
cpu: "500m"
memory: "512Mi"
2. 健康检查
livenessProbe: # 检查容器是否活跃
httpGet:
path: /health
port: 8000
initialDelaySeconds: 30
readinessProbe: # 检查容器是否准备好接收流量
httpGet:
path: /ready
port: 8000
initialDelaySeconds: 10
3. 持久化存储
volumes:
- name: data
persistentVolumeClaim:
claimName: data-pvc
文文,2026 年 3 月 16 日
