走向生产

已发行

本章内容概览:

  • 部署微服务到 Kubernetes 集群
  • 本地和云端 Kubernetes 部署
  • Kubernetes 核心概念
  • 部署清单文件

本章学习将微服务部署到生产环境。

6.1 为什么选择 Kubernetes?

Kubernetes 是开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。

主要优势:

  • 自动化部署和更新应用
  • 根据负载自动扩展
  • 自动重启失败的容器
  • 自动分发网络流量
  • 零停机部署应用
  • 避免云厂商锁定

6.2 核心概念

Pod:

  • 最小部署单元
  • 共享网络和存储
  • 生命周期短暂

Deployment:

  • 管理 Pod 的副本数量和更新策略
  • 声明式管理、滚动更新、回滚

Service:

  • 为 Pod 提供稳定的网络访问端点
  • 类型:ClusterIP、NodePort、LoadBalancer、Ingress

ConfigMap 和 Secret:

  • ConfigMap:存储配置数据
  • Secret:存储敏感数据(密码、密钥)
图 6.1 Kubernetes 架构
图 6.1 Kubernetes 架构

架构组件:

控制平面:

  • API Server:集群统一入口
  • Scheduler:调度 Pod 到节点
  • Controller Manager:维护集群状态
  • etcd:存储集群配置

工作节点:

  • Kubelet:管理容器
  • Kube-proxy:网络代理和负载均衡
  • Container Runtime:运行容器

6.3 本地 Kubernetes

Docker Desktop 包含本地 Kubernetes 实例。

启用步骤:

  1. 打开 Docker Desktop
  2. Settings → Kubernetes
  3. Enable Kubernetes
  4. Apply & Restart

验证安装:

kubectl version
kubectl cluster-info
kubectl get nodes

部署第一个应用:

kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-node --type=NodePort --port=8080

6.4 部署清单

Deployment 清单:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: video-streaming
spec:
  replicas: 3
  selector:
    matchLabels:
      app: video-streaming
  template:
    metadata:
      labels:
        app: video-streaming
    spec:
      containers:
      - name: video-streaming
        image: registry/video-streaming:latest
        ports:
        - containerPort: 3000

Service 清单:

apiVersion: v1
kind: Service
metadata:
  name: video-streaming
spec:
  type: LoadBalancer
  selector:
    app: video-streaming
  ports:
  - port: 80
    targetPort: 3000

应用部署:

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl get pods
kubectl get services

6.5 云端 Kubernetes

6.5.1 Azure Kubernetes Service (AKS)

优势:

  • 托管控制平面
  • 自动升级和修补
  • 集成 Azure 生态
  • 简化操作

6.5.2 创建 AKS 集群

az group create --name myResourceGroup --location eastus
az aks create --resource-group myResourceGroup \
  --name myAKSCluster \
  --node-count 2 \
  --enable-addons monitoring \
  --generate-ssh-keys

6.5.3 连接到集群

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
kubectl get nodes

6.6 部署到云端

部署流程:

  1. 构建并推送 Docker 镜像
  2. 创建 Kubernetes 资源
  3. 配置负载均衡器
  4. 验证部署

监控部署:

kubectl get deployments
kubectl get pods
kubectl get services
kubectl logs <pod-name>
图 6.2 在 Kubernetes 上运行的微服务应用
图 6.2 在 Kubernetes 上运行的微服务应用

总结

  • Kubernetes 是强大的容器编排平台
  • Pod、Deployment、Service 是核心概念
  • ConfigMap 和 Secret 管理配置和敏感数据
  • Docker Desktop 包含本地 Kubernetes,适合开发测试
  • 云服务商提供托管 Kubernetes 服务
  • kubectl 是主要交互工具
  • YAML 文件定义 Kubernetes 资源
  • 提供自动化部署、弹性伸缩和自我修复

下一章学习使用 Terraform 实现基础设施即代码。

创建于 2026/01/06 更新于 2026/01/06 871 字 阅读约 2 分钟

提交勘误/建议