深入理解 Kubernetes:从容器编排到微服务架构的完整学习路线

详细讲解 Kubernetes 的核心概念、架构设计、部署策略,以及如何构建和管理生产级别的微服务系统。

深入理解 Kubernetes:从容器编排到微服务架构的完整学习路线
目录

深入理解 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 日

相关文章

技术 · 2026-03-21GitHub Actions 自动部署里的 SSH Key 是什么?公钥私钥怎么用?一篇讲透技术 · 2026-03-16如何用 Docker 打包部署你的应用?一篇文章搞定 Docker 的所有核心概念技术 · 2026-03-21FastAPI 后端 Docker + GHCR + GitHub Actions 自动部署实践