蓝绿发布基本原理

蓝绿发布是一种应用升级发布方式,这种发布方式可以瞬间在老版本与新版本之间切换。可以做到用户体验无中断。在这里插入图片描述
为了让K8S中的应用可以支持蓝绿发布,需要在POD yaml文件、nodeport service yaml文件中,添加一个新的label - version。

为了完成发布,应用升级,需要将NodePort Service中的version值手动修改为新版本。这样就完成了蓝绿切换,流量切换。

后续,如新版本POD发布,应用验证没有问题,可以把老的POD删除掉。

如果新版本有问题,则依然修改NodePort Service中的version值,让流量切回老版本。

基于Service/Selector/Label实现蓝绿发布

本实验我们需要创建3个YAML文件。

  1. petclinic-pod-v1.0.0.yml
  2. petclinic-pod-v1.0.1.yml
  3. petclnic-service.yml

petclinic-pod-v1.0.0.yml文件内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: petclinic-v1.0.0
  labels:
    app: petclinic
    version: v1.0.0
spec:
  containers:
  - name: petclinic
    image: spring2go/spring-petclinic:1.0.0.RELEASE

petclinic-pod-v1.0.1.yml文件内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: petclinic-v1.0.1
  labels:
    app: petclinic
    version: v1.0.1
spec:
  containers:
  - name: petclinic
    image: spring2go/spring-petclinic:1.0.1.RELEASE

petclnic-service.yml文件内容如下:注意selector下,增加了一个version标签。

apiVersion: v1
kind: Service
metadata:
  # Unique key of the Service instance
  name: petclinic
spec:
  ports:
    # Accept traffic sent to port 80
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 31080
  selector:
    app: petclinic
    version: v1.0.0
  type: NodePort

发布两个版本POD

#当前目录3个YAML文件
ls
#查看当前K8S中运行的service/pod。
kubectl get all
#把当前目录的所有文件,一次性发布。
kubectl apply -f .
kubectl get all # 查看2个POD,1个Nodeport Service

浏览器校验已发布的应用。http://localhost:31080

#显示POD的标签信息
kubectl get po --show-labels
#显示Service的详情,找到selector指向
kubectl describe svc petclinic

蓝绿切换

更新nodeport service yaml文件。
修改petclnic-service.yml文件内容如下

apiVersion: v1
kind: Service
metadata:
  # Unique key of the Service instance
  name: petclinic
spec:
  ports:
    # Accept traffic sent to port 80
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 31080
  selector:
    app: petclinic
    version: v1.0.1
  type: NodePort

切换命令,由于POD没变化,所以可以直接发布当前目录所有文件。

kubectl apply -f .
kubectl get all
kubectl describe svc petclinic

浏览器校验已发布的应用。http://localhost:31080

环境清理 用于实验环境清理。

删除所有POD

kubectl delete po --all

删除所有Service, 虽然也会删除掉service/kubernetes,但是它会马上自动启动。

kubectl delete svc --all

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐