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

使用,k8s,进行,蓝绿,部署,简明,指南 · 浏览次数 : 268

小编点评

**使用 Kubernetes 实现蓝绿部署的步骤** **1. 创建命名空间** ``` kubectl create namespace blue-green ``` **2. 创建部署** ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-blue labels: app: myapp env: bluespec 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 ``` **3. 创建服务** ```yaml apiVersion: v1 kind: Service metadata: name: myapp-servicespec selector: app: myapp env: green ports: - name: http port: 80 targetPort: 80 type: LoadBalancer ``` **4. 验证部署** ``` kubectl get service myapp-service -n blue-green ``` **5. 执行蓝绿部署** 将流量从蓝色环境切换到绿环境。 **6. 更新绿部署** ```yaml apiVersion: v1 kind: Deployment metadata: name: myapp-green labels: app: myapp env: green template: metadata: labels: app: myapp env: green spec: containers: - name: myapp image: myapp:v2.0 ports: - containerPort: 80 ``` **7. 更新服务** ```yaml apiVersion: v1 kind: Service metadata: name: myapp-servicespec selector: app: myapp env: green ports: - name: http port: 80 targetPort: 80 type: LoadBalancer ``` **8. 验证部署** ``` kubectl get service myapp-service -n blue-green ``` **注意** * 在进行蓝绿部署时,需要考虑存储、DNS和测试等因素。 * 蓝绿部署是一种备受欢迎的部署策略,但它可能并不适用于每种情况。

正文

在之前的应用部署系列文章里,我们已经介绍过什么是蓝绿部署。如需回顾,点击下方文章链接即可重温。本文我们将会介绍如何使用 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 进行蓝绿部署。蓝绿部署是一种备受欢迎的部署策略,因为它提供了零停机时间,并在出错时提供了快速、简单的回滚方式。

与使用K8S进行蓝绿部署的简明实操指南相似的内容:

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

在之前的应用部署系列文章里,我们已经介绍过什么是蓝绿部署。如需回顾,点击下方文章链接即可重温。本文我们将会介绍如何使用 Kubernetes 实现蓝绿部署。 应用部署初探:3个主要阶段、4种常见模式 应用部署初探:微服务的3大部署模式 应用部署初探:6个保障安全的最佳实践 前期准备: Kuberne

Jenkins Pipeline 流水线 - 使用代理节点,Remote SSH 对 K8S 进行升级

Jenkins Pipeline 流水线 - K8S kubectl 升级 使用代理节点 Remote SSH 远程执行命令进行升级 Remote SSH 方式 安装插件 SSH Pipeline Steps Pipeline SSH 脚本 credentialsId: 'K8SMaster' pi

DHorse操作手册

在介绍DHorse的操作之前,我们先来看一下发布一个系统的流程是什么样的。 发布系统的流程 我们以一个Springboot系统为例,来说明一下发布流程。 1.首先从代码仓库下载代码,比如Gitlab; 2.接着是进行打包,比如使用Maven; 3.如果要使用k8s作为编排,还需要把步骤2产生的包制作

Windows 挂载minio 到本地磁盘

# Windows 挂载minio 到本地磁盘 ## 背景 ``` 新公司建议使用minio 进行一些业务操作 已经在各位领导同事的帮助下找到了linux本地s3fs挂载和k8s使用csi方式挂载到pod内的方式. 今天一个帮助过我的同事想用windows平台进行联调. 我感觉很有必要解决这个联调的

五分钟k8s实战-使用Ingress

背景 前两章中我们将应用部署到了 k8s 中,同时不同的服务之间也可以通过 service 进行调用,现在还有一个步骤就是将我们的应用暴露到公网,并提供域名的访问。 这一步类似于我们以前配置 Nginx 和绑定域名,提供这个能力的服务在 k8s 中成为 Ingress。 通过这个描述其实也能看出 I

K8S集群中使用JD KMS服务对敏感数据安全加密

KMS,Key Management Service,即密钥管理服务,在K8S集群中,以驱动和插件的形式启用对Secret,Configmap进行加密。以保护敏感数据

Kubernetes(K8S) yaml 介绍

使用空格做为缩进 缩进的空格数目不重要, 只要相同层级的元素左侧对齐即可 低版本缩进时不允许使用 Tab 键, 只允许使用空格 使用#标识注释, 从这个字符一直到行尾, 都会被解释器忽略 使用 三个 - 进行多项配置 | | | | | | | apiVersion | API版本 可以用 kube

使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- Ingress-Ngnix

前置条件:使用 Kubeadm 部署 Kubernetes(K8S) 安装 安装ingress-nginx组件(在master节点执行) 通过 ip+port 号进行访问,使用 Service 里的 NodePort 实现,把端口对外暴露 缺陷:一个端口只能使用一次,一个端口对应一个应用,实际使用中

使用Prometheus监控docker compose方式部署的ES

需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana 方案 复用现有的监控体系, 通过: Prometheus 监控 ES. 具体实现为: 采集端 el

使用Prometheus监控docker compose方式部署的ES

需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana 方案 复用现有的监控体系, 通过: Prometheus 监控 ES. 具体实现为: 采集端 el