K8S高可用Web应用部署方案

以下是基于 Kubernetes 的高可用 Web 应用部署方案,满足多副本、跨可用区容灾、HTTPS 配置以及滚动更新和回滚的需求:


一、架构设计

  1. 多副本 + 跨可用区容灾

    • 使用 Kubernetes 的 Deployment 部署多副本应用,并通过 Pod 反亲和性 将 Pod 分散到不同可用区。

    • 使用 Cluster Autoscaler 自动扩缩节点,确保资源充足。

  2. 通过 Ingress 暴露服务并配置 HTTPS

    • 使用 Ingress Controller (如 Nginx Ingress)暴露服务,并通过 Cert-Manager 自动管理 TLS 证书。
  3. 滚动更新和回滚机制

    • 使用 Deployment 的滚动更新策略,逐步替换旧版本 Pod。

    • 通过 kubectl rollout 命令实现版本回滚。


二、详细实现步骤

1. 多副本 + 跨可用区容灾
1.1 创建 Deployment
  • 使用以下 YAML 文件创建 Deployment,部署 3 个副本:

    复制代码
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-app
      namespace: default
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: web-app
      template:
        metadata:
          labels:
            app: web-app
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
              - labelSelector:
                  matchExpressions:
                  - key: app
                    operator: In
                    values:
                    - web-app
                topologyKey: topology.kubernetes.io/zone
          containers:
          - name: web-app
            image: my-web-app:1.0.0
            ports:
            - containerPort: 80
            resources:
              requests:
                cpu: "100m"
                memory: "128Mi"
              limits:
                cpu: "500m"
                memory: "512Mi"
    • 关键点

      • replicas: 3:部署 3 个副本。

      • podAntiAffinity:确保 Pod 分散到不同可用区。

1.2 创建 Service
  • 使用以下 YAML 文件创建 Service,暴露 Deployment:

    复制代码
    apiVersion: v1
    kind: Service
    metadata:
      name: web-app
      namespace: default
    spec:
      selector:
        app: web-app
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80

2. 通过 Ingress 暴露服务并配置 HTTPS
2.1 安装 Ingress Controller
  • 使用 Helm 安装 Nginx Ingress Controller:

    复制代码
    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    helm install ingress-nginx ingress-nginx/ingress-nginx
2.2 安装 Cert-Manager
  • 使用 Helm 安装 Cert-Manager:

    复制代码
    helm repo add jetstack https://charts.jetstack.io
    helm install cert-manager jetstack/cert-manager \
      --namespace cert-manager \
      --create-namespace \
      --set installCRDs=true
2.3 创建 Ingress 资源
  • 使用以下 YAML 文件创建 Ingress,配置 HTTPS:

    复制代码
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: web-app
      namespace: default
      annotations:
        nginx.ingress.kubernetes.io/ssl-redirect: "true"
        cert-manager.io/cluster-issuer: "letsencrypt-prod"
    spec:
      tls:
      - hosts:
        - my-web-app.example.com
        secretName: web-app-tls
      rules:
      - host: my-web-app.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-app
                port:
                  number: 80
    • 关键点

      • tls:配置 HTTPS,使用 Cert-Manager 自动签发 Let's Encrypt 证书。

      • host:替换为实际域名。


3. 实现滚动更新和回滚机制
3.1 滚动更新
  • 更新 Deployment 的镜像版本:

    复制代码
    kubectl set image deployment/web-app web-app=my-web-app:2.0.0
  • Kubernetes 会自动执行滚动更新,逐步替换旧版本 Pod。

3.2 回滚机制
  • 查看 Deployment 的更新历史:

    复制代码
    kubectl rollout history deployment/web-app
  • 回滚到上一个版本:

    复制代码
    kubectl rollout undo deployment/web-app
  • 回滚到指定版本:

    复制代码
    kubectl rollout undo deployment/web-app --to-revision=2

三、验证与测试

  1. 验证多副本与跨可用区容灾

    • 查看 Pod 分布:

      复制代码
      kubectl get pods -o wide
    • 确认 Pod 分散到不同可用区。

  2. 验证 HTTPS 配置

    • 访问 https://my-web-app.example.com,确认证书有效且服务正常。
  3. 验证滚动更新与回滚

    • 更新镜像版本,观察 Pod 替换过程。

    • 执行回滚,确认应用恢复到旧版本。


四、总结

通过以上方案,可以实现高可用的 Web 应用部署,满足多副本、跨可用区容灾、HTTPS 配置以及滚动更新和回滚的需求。关键点包括:

  • 使用 Deployment 和 Pod 反亲和性实现多副本与跨可用区容灾。

  • 使用 Ingress 和 Cert-Manager 配置 HTTPS。

  • 利用 Deployment 的滚动更新和回滚机制实现无缝升级与回退。

相关推荐
ulias21213 小时前
Linux系统中的权限问题
linux·运维·服务器
青花瓷14 小时前
Ubuntu下OpenClaw的安装(豆包火山API版)
运维·服务器·ubuntu
问简14 小时前
docker 镜像相关
运维·docker·容器
Dream of maid15 小时前
Linux(下)
linux·运维·服务器
齐鲁大虾15 小时前
统信系统UOS常用命令集
linux·运维·服务器
Benszen15 小时前
Docker容器化技术实战指南
运维·docker·容器
ZzzZZzzzZZZzzzz…15 小时前
Nginx 平滑升级:从 1.26.3 到 1.28.0,用户无感知
linux·运维·nginx·平滑升级·nginx1.26.3·nginx1.28.0
一叶知秋yyds17 小时前
Ubuntu 虚拟机安装 OpenClaw 完整流程
linux·运维·ubuntu·openclaw
斯普信云原生组17 小时前
Prometheus 环境监控虚机 Redis 方案(生产实操版)
运维·docker·容器
safestar201218 小时前
ES批量写入性能调优:BulkProcessor 参数详解与实战案例
java·大数据·运维·jenkins