乐趣区

关于部署:使用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 进行蓝绿部署。蓝绿部署是一种备受欢送的部署策略,因为它提供了零停机工夫,并在出错时提供了疾速、简略的回滚形式。

退出移动版