首页 > 其他分享 >kubernetes ingress 蓝绿发布

kubernetes ingress 蓝绿发布

时间:2023-03-21 16:44:19浏览次数:40  
标签:blue ingress kubernetes -- 蓝绿 nginx see green bye

1.蓝绿发布介绍

蓝绿发布就是现网运行的业务在系统1,计划升级的版本部署了系统2。

新版本的系统2部署出来以后将进行充分的测试、验证。通过之后,将业务切换到系统2,即完成了版本更新。

Kubernetes本身是不支持蓝绿发布的,当前主要是通过新的deployment文件配合service label完成。

  1. 优点:

    更新过程不用停机,在线完成,风险低;

    回滚方便,效率高;

  2. 缺点:

     两套一样的系统,占用资源,成本较高。

     负载均衡、代理、路由等处理不当,可能导致业务没正常切换。

本文演示通过service的selector切换服务进行蓝绿发布

2.部署greenservice

green_service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-green
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx-green
  template:
    metadata:
      labels:
        app: nginx-green
    spec:
      containers:
      - name: nginx-green
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
        - name: www
          configMap:
            name: nginx-green
---
apiVersion: v1
kind: ConfigMap
metadata:
    name: nginx-green
data:
  index.html: |
        green green green  -->  If you see  this message  --> The  route to green,bye ~~~;

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-green
  labels:
    app: nginx-green
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: nginx-green

部署:

kubectl apply -f green_service.yaml

 

查看pods:

qiteck@server:~/program/k8s/blue_green_split$ sudo kubectl get pod

nginx-green-78968cd575-bngtx   1/1     Running            0                79m

nginx-green-78968cd575-cv986   1/1     Running            0                79m

nginx-green-78968cd575-pkpcr   1/1     Running            0                79m

nginx-green-78968cd575-xz4dj   1/1     Running            0                79m

查看service:

qiteck@server:~/program/k8s/blue_green_split$ sudo kubectl get service 
nginx-green     ClusterIP   10.96.255.252   <none>        80/TCP                                                                                                                                              79m

 

3. 部署blueservice

 

blue_service.yaml
 apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-blue
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx-blue
  template:
    metadata:
      labels:
        app: nginx-blue
    spec:
      containers:
      - name: nginx-blue
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
      volumes:
        - name: www
          configMap:
            name: nginx-blue
---
apiVersion: v1
kind: ConfigMap
metadata:
    name: nginx-blue
data:
  index.html: |
        blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-blue
  labels:
    app: nginx-blue
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  selector:
    app: nginx-blue

 

部署:

kubectl apply -f blue_service.yaml

查看pods:

qiteck@server:~/program/k8s/blue_green_split$ sudo kubectl get pods |grep nginx
nginx-blue-766b9f6df4-4ldzx    1/1     Running            0                  38m
nginx-blue-766b9f6df4-bmd85    1/1     Running            0                  38m
nginx-blue-766b9f6df4-h5bdd    1/1     Running            0                  38m
nginx-blue-766b9f6df4-qsn5w    1/1     Running            0                  38m
nginx-green-78968cd575-bngtx   1/1     Running            0                  97m
nginx-green-78968cd575-cv986   1/1     Running            0                  97m
nginx-green-78968cd575-pkpcr   1/1     Running            0                  97m
nginx-green-78968cd575-xz4dj   1/1     Running            0                  97m

查看service:

qiteck@server:~/program/k8s/blue_green_split$ sudo kubectl get service |grep nginx
nginx-blue      ClusterIP   10.96.95.252    <none>        80/TCP                                                                                                                                              39m
nginx-green     ClusterIP   10.96.255.252   <none>        80/TCP                                                                                                                                              98m

目前可以看到blue和green两套服务都是存在的

 4.部署选择greeningress

ingress.yaml
apiVersion:  networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: nginx.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-green
            port:
              number: 80

域名nginx.test.com映射到nginx_green服务:

部署:

sudo kubectl apply -f ingress.yaml

 

查看ingress

qiteck@server:~/program/k8s/blue_green_split$ sudo kubectl get ingress
NAME    CLASS    HOSTS                 ADDRESS        PORTS   AGE
nginx   <none>   nginx.test.com   10.96.180.91   80      49s

测试访问一下:

qiteck@server:~/program/k8s/blue_green_split$ for i in `seq 20`;do curl nginx.test.com;done
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;
green green green  -->  If you see  this message  --> The  route to green,bye ~~~;

 可以看到green服务正常提供服务

 

5.部署选择blueingress

ingress.yaml
apiVersion:  networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: nginx.test.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-blue
            port:
              number: 80

域名nginx.test.com映射到nginx_blue服务:

部署:

sudo kubectl apply -f ingress.yaml

 

查看ingress

qiteck@server:~/program/k8s/blue_green_split$ sudo kubectl get ingress
NAME    CLASS    HOSTS                 ADDRESS        PORTS   AGE
nginx   <none>   nginx.test.com   10.96.180.91   80      49s

测试访问一下:

qiteck@server:~/program/k8s/blue_green_split$ for i in `seq 20`;do curl nginx.test.com;done
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;
blue blue blue  --> If you see  this message  --> The  route to blue,bye ~~~;

 可以看到现在是blue服务在提供服务

这样就实现了蓝绿切换

标签:blue,ingress,kubernetes,--,蓝绿,nginx,see,green,bye
From: https://www.cnblogs.com/zhanchenjin/p/17240455.html

相关文章

  • kubernetes 集群环境搭建 (kubeadm方式)
    1、前置知识点目前生产部署Kubernetes集群主要有两种方式:(1)kubeadmKubeadm是一个K8s部署工具,提供kubeadminit和kubeadmjoin,用于快速部署Kubernetes集群。官方地......
  • Kubernetes 学习总结(19)—— Kubernetes 集群管理平台如何选择?Rancher vs KubeSphere
    Kubernetes学习总结(19)——Kubernetes集群管理平台如何选择?RanchervsKubeSphere 前言Kubernetes(K8s)集群管理平台都是基于Kubernetes提供功能,可以说他们是在K8s......
  • 基于Kubernetes的CI/CD实践
    K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点......
  • Kubernetes学习
    1、K8S简介kubernetes,是一个全新的基于容器技术的分布式架构领先方案,是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本,于2014年9月发布第一个版本,2015年7月发......
  • 基于Kubernetes的平台设计和实现
    一、背景介绍1.1问题随着移动互联网的蓬勃发展,业务逻辑愈发复杂,规模愈发庞大,更新迭代愈发频繁,用户对应用程序的Qps和SLA有了更高的要求:更高效、更灵活和更可靠。面......
  • KCL v0.4.6 alpha 发布!- 更多 Kubernetes 工具集成,更好的 IDE 错误提示
    简介KCL团队很高兴地宣布KCLv0.4.6-alpha.1版本现在已经可用!您可以在KCLv0.4.6-alpha.1发布页面或者KCL官方网站获得KCL二进制下载链接和更多详细发布信息......
  • 使用K8S进行蓝绿部署的简明实操指南
    在之前的应用部署系列文章里,我们已经介绍过什么是蓝绿部署。如需回顾,点击下方文章链接即可重温。本文我们将会介绍如何使用Kubernetes实现蓝绿部署。 应用部署初探:3......
  • Kubernetes安装篇(下):基于Kubeadm方式的集群部署
    Kubernetes安装篇(下):基于Kubeadm方式的集群部署2022-05-22 346举报简介: 在实际生产环境中,Kubernetes环境就比这复杂的多,起码也是集群起步,因此,本文将从生产环境出发,为你......
  • 使用kubernetes 官网工具kubeadm部署kubernetes(使用阿里云镜像)
    使用kubernetes官网工具kubeadm部署kubernetes(使用阿里云镜像)  系列目录kubernetes简介Kubernetes节点架构图:kubernetes组件架构图:准备基础环境我们将......
  • kubeadm安装kubernetes和istio记录
    周末两天想折腾下k8s和istio学习下。于是用虚拟机搭了一个ubuntu22.04的服务器。国内、国内、国内环境我一开始将ip固定成192.168.50.100了一、使用kubeadm安装单机版的......