• 使用K8S进行蓝绿部署的简明实操指南


    在之前的应用部署系列文章里,我们已经介绍过什么是蓝绿部署。如需回顾,点击下方文章链接即可重温。本文我们将会介绍如何使用 Kubernetes 实现蓝绿部署。
     

    应用部署初探:3个主要阶段、4种常见模式
    应用部署初探:微服务的3大部署模式
    应用部署初探:6个保障安全的最佳实践

     

    前期准备:

    • Kubernetes 集群
    • kubectl
    • 要部署的应用程序的 Docker 镜像
       

    如果你已经准备就绪,那么我们就开始部署啦!

     

    Step 1:创建命名空间

    首先,我们需要创建命名空间来部署我们的应用程序。输入以下命令即可:
    kubectl create namespace blue-green
     

    Step 2:创建部署

    接下来,我们需要创建2个部署,一个是蓝环境,另一个是绿环境。除了标签之外,两个部署应该是相同的(标签主要是为了辨别哪个是蓝环境,哪个是绿环境)。以下是部署 manifest 示例:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-blue
      labels:
        app: myapp
        env: blue
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
          env: blue
      template:
        metadata:
          labels:
            app: myapp
            env: blue
        spec:
          containers:
          - name: myapp
            image: myapp:v1.0
            ports:
            - containerPort: 80
    

    将 manifest 保存为 blue-deployment.yaml,并使用以下命令在蓝环境中创建部署:

    kubectl apply -f blue-deployment.yaml -n blue-green
     

    同理,通过在 manifest 文件中更改名称和标签来在绿环境中创建另一个部署,并将其保存为 green-deployment.yaml。接下来,使用以下命令将其部署在绿环境:

    kubectl apply -f green-deployment.yaml -n blue-green
     

    Step 3:创建服务

    现在,我们需要创建服务将我们的应用程序暴露给外部世界。该服务应该使用 label selector 来将流量路由到蓝部署和绿部署中。以下是服务 manifest 示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-service
    spec:
      selector:
        app: myapp
      ports:
      - name: http
        port: 80
        targetPort: 80
      type: LoadBalancer
    

     

    将 manifest 保存为 service.yaml,并使用以下命令创建服务:
    kubectl apply -f service.yaml -n blue-green
     

    Step 4:验证部署

    现在,我们来验证部署和服务是否能正常运行。首先,我们需要获得服务的外部IP地址:
    kubectl get service myapp-service -n blue-green
     

    该命令将输出服务的外部IP地址。使用这个IP地址可以在浏览器内访问应用。你应该可以看到应用在蓝环境中运行。
     

    Step 5:执行蓝绿部署

    既然蓝绿部署都在运行,我们就可以通过从蓝环境路由流量到绿环境来执行蓝绿部署。
     

    Step 6:更新绿部署

    首先,我们需要使用应用程序的新版本更新绿部署。在绿部署的 manifest 里用新版本的 Docker 镜像来更新镜像字段并将其保存为 green-deployment-v2.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: myapp-green
      labels:
        app: myapp
        env: green
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: myapp
          env: green
      template:
        metadata:
          labels:
            app: myapp
            env: green
        spec:
          containers:
          - name: myapp
            image: myapp:v2.0
            ports:
            - containerPort: 80
    

     

    使用以下命令,应用更新好的绿部署:

    kubectl apply -f green-deployment-v2.yaml -n blue-green
    

     

    Step 7:更新服务

    接下来,我们需要更新服务以将流量路由到绿部署。首先,在服务的manifest里更新 label selector,以选择绿部署:

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-service
    spec:
      selector:
        app: myapp
        env: green
      ports:
      - name: http
        port: 80
        targetPort: 80
      type: LoadBalancer
    

     

    使用以下命令应用更新完毕的服务:

    kubectl apply -f service.yaml -n blue-green
    

     

    Step 8:验证部署

    最后,我们需要验证部署是否成功。首先,使用 kubectl get service 命令获取服务的外部IP地址,并在浏览器中访问应用程序。你应该看到已经更新好的应用版本在绿环境中运行。
     

    Step 9:回滚

    如果在部署期间发生错误,我们可以轻松回滚到之前的应用版本:通过在服务的manifest里更新 label selector 来选择蓝环境并重新应用服务 manifest。

    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-service
    spec:
      selector:
        app: myapp
        env: blue
      ports:
      - name: http
        port: 80
        targetPort: 80
      type: LoadBalancer
    

     

    应用更新完毕的服务:

    kubectl apply -f service.yaml -n blue-green
    

     

    需要考虑的因素

    当您在 Kubernetes 中进行蓝绿部署时,需要考虑一些其他因素:
     

    • 存储:如果你的应用程序需要持久化存储,你要确保蓝绿部署都使用相同的持久卷。否则,你可能会在部署过程中丢失数据。
    • DNS:如果你的应用程序属于自定义域名,那么当从蓝部署切换到绿部署时,你需要更新 DNS 记录以指向新的IP地址。
    • 测试:在将流量切换到绿部署之前,彻底地测试应用新版本以保证其正常工作是至关重要的。也可以使用金丝雀发布来将流量逐步切换的新版本并监控其性能。
       

    总结

    尽管蓝绿部署是一种高效的部署应用程序的方法,但它可能并不适用于每种情况。例如,如果你的应用需要进行大量的数据迁移或更改数据库格式,蓝绿部署可能不是最佳策略,因为它会导致蓝绿环境之间数据不一致。
     

    此外,对于需要持久性存储的有状态的应用程序来说,蓝绿部署的实施可能具有挑战性,因为数据必须在蓝色和绿色环境之间同步进行。在这些情况下,你也许需要考虑其他部署策略,比如滚动更新或金丝雀部署。
     

    在本文中,我们了解了如何使用 Kubernetes 进行蓝绿部署。蓝绿部署是一种备受欢迎的部署策略,因为它提供了零停机时间,并在出错时提供了快速、简单的回滚方式。

  • 相关阅读:
    苍穹外卖day12 (Apache POI) 数据统计-Excel报表
    2022.11.4 英语背诵
    MATLAB | 两种上色方式的旭日图绘制
    spark jdbc操作
    js中判断一个对象是否有某个属性,存在性检查
    JavaWeb-HTML
    [论文-ing]Weakly Supervised Universal Fracture Detectionin Pelvic X-rays
    多行多列按钮多选1
    2022计算机保研夏令营记录
    电商项目高级篇-02 elasticsearch-下
  • 原文地址:https://www.cnblogs.com/sealio/p/17235291.html