虚拟化容器,大数据,DBA,中间件,监控。

Kubernetes(k8s)蓝绿发布

06 08月
作者:admin|分类:容器虚拟化

Kubernetes(k8s)蓝绿发布

蓝绿部署:

一些应用程序只需要部署一个新版本,并需要立即切到这个版本。因此,我们需要执行蓝/绿部署。在进行蓝/绿部署时,应用程序的一个新副本(绿)将与现有版本(蓝)一起部署。然后更新应用程序的入口/路由器以切换到新版本(绿)。然后,您需要等待旧(蓝)版本来完成所有发送给它的请求,但是大多数情况下,应用程序的流量将一次更改为新版本;Kubernetes不支持内置的蓝/绿部署。目前最好的方式是创建新的部署,然后更新应用程序的服务(如service)以指向新的部署;蓝绿部署是不停老版本,部署新版本然后进行测试,确认OK后将流量逐步切到新版本。蓝绿部署无需停机,并且风险较小。

实战

lan.yaml配置文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:  name: myapp-v1
  namespace: blue-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp      version: v1
  template:
    metadata:
     labels:
      app: myapp      version: v1
    spec:
       containers:
       - name: myapp
         image: janakiramm/myapp:v1
         imagePullPolicy: IfNotPresent
         ports:
         - containerPort: 80

lv.yaml配置文件内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:  name: myapp-v2
  namespace: blue-green
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp      version: v2
  template:
    metadata:
     labels:
       app: myapp       version: v2
    spec:
      containers:
      - name: myapp
        image: janakiramm/myapp:v2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

service_lanlv.yaml 配置文件内容如下:

apiVersion: v1
kind: Service
metadata:  name: myapp-lan
  namespace: blue-green
  labels:
     app: myapp     version: v1
spec:
   type: NodePort
   ports:
   - port: 80
     nodePort: 30062
     name: http
   selector:
     app: myapp     version: v1

当前指向版本v1(也就是蓝)

创建

kubectl apply -f lan.yaml
kubectl apply -f lv.yaml
kubectl get pods -n blue-green

显示如下:

上面可以看到有两个pod,一个是myapp-v1这个是蓝程序(升级之前的程序),一个是myapp-v2这个是绿程序(升级之后的程序),蓝绿程序一起运行

kubectl apply -f service_lanlv.yaml

kubectl get svc -n blue-green

在浏览器访问http://<k8s集群任何一个节点ip>:port,显示如下:

我是版本v1,蓝色哦..

修改service_lanlv.yaml配置文件,修改标签,让其指向到绿程序(升级之后的程序)

service_lv.yaml文件内容如下:

apiVersion: v1
kind: Service
metadata:  name: myapp-lan
  namespace: blue-green
  labels:
     app: myapp     version: v2
spec:
   type: NodePort
   ports:
   - port: 80
     nodePort: 30062
     name: http
   selector:
     app: myapp     version: v2
kubectl apply -f service_lv.yaml

在浏览器访问http://<k8s集群任何一个节点ip>:port

显示如下:

我是版本v2,绿色哦..


作者:半兽人
链接:https://www.orchome.com/9779
来源:OrcHome
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


浏览780 评论0
返回
目录
返回
首页
Linux Shell脚本实现自动输入密码登录服务器 ORACLE 中文与英文日间区别,插入时间会报错,显示'无效的月份'