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 的滚动更新和回滚机制实现无缝升级与回退。

相关推荐
掘金者说6 分钟前
docker系列-DockerDesktop报错信息(Windows Hypervisor is not present)
运维·docker·容器
2302_7995257440 分钟前
【Linux】第十六章 分析和存储日志
linux·运维·服务器
愚润求学1 小时前
【Linux】Ext系列文件系统
linux·运维·服务器·笔记
微刻时光1 小时前
影刀RPA网页自动化总结
运维·人工智能·python·低代码·自动化·rpa·影刀rpa
2301_787552871 小时前
Lightpanda开源浏览器:专为 AI 和自动化而设计的无界面浏览器
运维·自动化
胖大和尚2 小时前
完整的 CentOS 6.10 虚拟机安装启动脚本
linux·运维·centos
酷爱码2 小时前
Nginx的核心功能--正向代理、反向代理、缓存和Rewrite
运维·nginx·缓存
菜鸟康3 小时前
Linux——CMake的快速入门上手和保姆级使用介绍、一键执行shell脚本
linux·运维·服务器
卷卷的小趴菜学编程4 小时前
Linux系统之----基础IO
linux·运维·服务器·文件·fopen·文件操作符·位图传递标志位
码上飞扬4 小时前
Java大师成长计划之第22天:Spring Cloud微服务架构
java·运维·云计算