k8s使用ingress实现应用的灰度发布升级

这篇具有很好参考价值的文章主要介绍了k8s使用ingress实现应用的灰度发布升级。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx,来测试灰度发布实现过程

一、方案:使用ingress实现应用的灰度发布

1、服务端:正常版本v1,灰度升级版本v2

2、客户端:带有请求头version=v2标识的请求访问版本v2,其他的请求访问版本v1

3、待版本v2稳定后,所有请求切换至版本v2,停止版本v1(删除原deployment,service,ingress)

二、操作步骤

1、创建版本v1的deployment、service、ingress

nginx服务版本v1的deployment和service

nginx-v1.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-v1
spec:
  selector:
    matchLabels:
      app: nginx-v1
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-v1
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.0
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: file
      volumes:
      - name: file
        hostPath:
          path: /data/nginx-v1
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-v1-svc  
  labels:
    app: nginx-v1   
spec:
  type: ClusterIP  
  selector:
    app: nginx-v1
  ports:
  - port: 80
    targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-v1
spec:
  ingressClassName: nginx
  rules:
  - host: test.nginx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-v1-svc 
            port:
              number: 80

验证:apifox 调用test.nginx.com,当前所有请求都正常访问版本v1,即1.14版本nginx

k8s使用ingress实现应用的灰度发布升级,kubernetes,容器,云原生

2、创建版本v2的deployment、service、ingress

nginx服务版本v2的deployment、service

nginx-v2.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-v2
spec:
  selector:
    matchLabels:
      app: nginx-v2
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-v2
    spec:
      containers:
      - name: nginx
        image: nginx:1.20.0
        ports:
        - containerPort: 80
        volumeMounts:
        - mountPath: /usr/share/nginx/html
          name: file
      volumes:
      - name: file
        hostPath:
          path: /data/nginx-v2
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-v2-svc  
  labels:
    app: nginx-v2   
spec:
  type: ClusterIP  
  selector:
    app: nginx-v2
  ports:
  - port: 80
    targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-v2
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-by-header: "version"  #请求头key=version
    nginx.ingress.kubernetes.io/canary-by-header-value: "v2"  #请求头value=v2
spec:
  ingressClassName: nginx
  rules:
  - host: test.nginx.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-v2-svc 
            port:
              number: 80

nginx服务版本v2的ingress,匹配请求头version=2访问

验证:postman调用test.nginx.com,加了请求头version=v2的请求访问版本v2,即1.20版nginx,其他请求访问版本v1

k8s使用ingress实现应用的灰度发布升级,kubernetes,容器,云原生

k8s使用ingress实现应用的灰度发布升级,kubernetes,容器,云原生k8s使用ingress实现应用的灰度发布升级,kubernetes,容器,云原生k8s使用ingress实现应用的灰度发布升级,kubernetes,容器,云原生k8s使用ingress实现应用的灰度发布升级,kubernetes,容器,云原生

三、方案:使用k8s 配置 RollingUpdate 滚动更新实现应用的灰度发布

spec:
  replicas: 1 #运行容器的副本数,修改这里可以快速修改分布式节点数量
  progressDeadlineSeconds: 600 #在Deployment 在进度卡住6分钟后报告
  minReadySeconds: 120 #Pod被认为是可用状态的最小秒数,然后加入nacos 可用。默认是0
  strategy:
    rollingUpdate:
      maxSurge: 1 #升级过程中激增Pod的最大数量
      maxUnavailable: 0 #升级过程中不可用Pod的最大数量
    type: RollingUpdate
文章来源地址https://www.toymoban.com/news/detail-819894.html

apiVersion: v1
kind: Service
metadata:
  name: $IMG_NAME
  namespace: rz-dt
  labels:
    app: $IMG_NAME
spec:
  type: NodePort
  ports:
    - port: 8091
      nodePort: 31082 #service对外开放端口
  selector:
    app: $IMG_NAME
---
apiVersion: apps/v1
kind: Deployment #对象类型
metadata:
  name: $IMG_NAME #名称
  namespace: rz-dt
  labels:
    app: $IMG_NAME #标注
spec:
  replicas: 1 #运行容器的副本数,修改这里可以快速修改分布式节点数量
  progressDeadlineSeconds: 600 #在Deployment 在进度卡住6分钟后报告
  minReadySeconds: 120 #Pod被认为是可用状态的最小秒数,然后加入nacos 可用。默认是0
  strategy:
    rollingUpdate:
      maxSurge: 1 #升级过程中激增Pod的最大数量
      maxUnavailable: 0 #升级过程中不可用Pod的最大数量
    type: RollingUpdate
  selector:
    matchLabels:
      app: $IMG_NAME
  template:
    metadata:
      labels:
        app: $IMG_NAME
    spec:
      containers: #docker容器的配置
        - name: $IMG_NAME
          env:
            - name: aliyun_logs_catalina
              value: stdout
          image: rz-dt-image-server-registry-vpc.cn-shanghai.cr.aliyuncs.com/rz-dt/$IMG_NAME:$IMG_TAG # pull镜像的地址 ip:prot/dir/images:tag
          imagePullPolicy: Always #pull镜像时机,
          #command: ["java","-Dserver.port=8055","-jar","/usr/local/cenobitor/k8s-springboot-demo.jar"]
          ports:
            - containerPort: 8091 #容器对外开放端口,需与springboot配置文件一致
          volumeMounts:
            - name: time-config
              mountPath: /etc/localtime
              readOnly: true
            - name: volume-logs
              mountPath: /logs
              subPath: logs
          resources:
            limits:
              cpu: 500m
              memory: 1Gi
            requests:
              cpu: 10m
              memory: 50Mi
      #从私有仓库拉取镜像凭证
      imagePullSecrets:
        - name: rz-dt-miyue-vpc
      volumes:
        - name: time-config
          hostPath:
            path: /usr/share/zoneinfo/Asia/Shanghai
        - name: volume-logs
          persistentVolumeClaim:
            claimName: rz-dt-nas-volume-claim

到了这里,关于k8s使用ingress实现应用的灰度发布升级的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s)当中安装并使用ingress暴露应用

    当我们使用不同类型的服务来暴露应用的时候会遇到一下问题: LoadBalancer :当我们在使用LoadBalancer类型的Service暴露服务的时候,一般都需要占用一个公网或者是内网IP地址。使用ingress我们就可以通过一个IP地址暴露多个服务。Ingress会根据客户端输入的不同的域名来确定我们

    2024年02月11日
    浏览(29)
  • 【kubernetes】关于k8s集群的资源发布方式(灰度/滚动发布)

    目录 一、常见的发布方式 二、详解kubectl陈述式方式做灰度发布(金丝雀发布) 步骤一:先基于deployment控制器创建pod,然后发布 步骤二:基于命令行灰度发布 步骤三:测试等到版本稳定以后,再完成继续发布 三、滚动发布详解 蓝绿发布:两套环境交替升级,旧版本保留一定

    2024年04月23日
    浏览(38)
  • [Kubernetes]9. K8s ingress讲解借助ingress配置http,https访问k8s集群应用

    前面讲解了使用Helm部署mysql集群,这里来看看使用Ingress搭建负载均衡功能 功能类似 Nginx ,可以根据域名、路径把请求转发到不同的 Service , Ingress 为外部访问集群提供了一个 统一 入口, 避免 了 对外暴露集群端口 ,可以配置 https,http访问集群应用,接下来看看如何通过腾讯云来

    2024年01月22日
    浏览(45)
  • 用Kubernetes(k8s)的ingress部署https应用

    我之前有一片文章写的是用ingress暴露应用,这篇文章接着上一片文章继续讲使用ingress暴露https的应用。请先参考上一片文章将ingress先在Kubernetes集群当中安装上: ingress暴露应用文章地址:https://blog.csdn.net/m0_51510236/article/details/132536519 因为是暴露https,所以需要域名证书。分以

    2024年02月10日
    浏览(34)
  • k8s Ingress使用详解

    在上一篇关于k8s之service的使用一篇中提到,Service对集群之外暴露服务的主要方式有两种,NotePort和LoadBalancer,但这两种方式,都有一定的缺点,具体来说: NodePort 会占用很多集群机器的端口,当集群服务变多的时候,过多的端口会给k8s的运维人员带来诸多的不便; 而LB的缺

    2024年02月02日
    浏览(34)
  • 【K8s】Ingress的使用

    上一章中,NotePort和LoadBalancer类型的Service可给集群外部机器提供访问,但这两种类型都有缺点: NodePort方式会占用很多集群机器的端口,当集群服务变多的时候,这个缺点愈发明显 LB方式的缺点是每个service需要一个LB,浪费、麻烦,并且需要k8s之外设备的支持 由此,Ingress资

    2024年04月10日
    浏览(62)
  • k8s实战3-使用Helm在AKS上发布应用

    AKS(Azure Kubenetes Service)是微软云azure上的K8s服务。 主要分为三步 1 连接到AKS 2 用kubectl发布应用 3 用Helm发布应用 1 登录 az login 2 连接 dp-npr-dsm-aks(Dsm项目的AKS) az account set --subscription {{subID}} az aks get-credentials --resource-group {{resource-group-name}} --name {{aks-name}} --admin 3 测试是否连接成

    2024年02月13日
    浏览(24)
  • K8S集群实现外部访问(INGRESS)

    环境: master node01 node02 192.168.1.40 192.168.1.41 192.168.1.42 作用:Ingress 是对集群中服务的外部访问进行管理的 API 对象。 PS:创建nginx和httpd PS:namespace为ingress-nginx PS:它现在已经有一个模板,用来描述Ingress资源能够收集到的信息了 PS:有DNS的话可以设置解析,没有的话必须在h

    2024年01月19日
    浏览(35)
  • K8S应用笔记 —— 签发自签名证书用于Ingress的https配置

    在本地签发自命名证书,用于 K8S 集群的 Ingress 的https配置。 前提条件: 完成 K8S 集群搭建。 完成证书制作机器的 openssl 服务安装。 2.1.1 CA.sh脚本准备 注意事项: openssl 服务默认 CA.sh 地址为: /etc/pki/tls/misc/CA.sh ,为证书拷贝方便基于原 CA.sh 进行复制对其原部分路径改写(改

    2024年02月12日
    浏览(28)
  • k8s---ingress实现https代理访问

    创建证书 密钥 secrets保存密钥信息,部署pod时把secrets挂载到pod 也可以实现负载均衡。 traefik ingress controller traefik 是一个为了让部署微服务更加快捷而诞生的一个http反向代理,负载均衡。 traefik设计时就能够实时的和k8s API交互,可以感知后端service和pod的变化,还可以自动更新

    2024年01月19日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包