当前位置: 首页 > news >正文

保定 网站建设软件开发安徽天长建设局网站

保定 网站建设软件开发,安徽天长建设局网站,抖音代运营广州,平湖网站制作前言 部署在 Kubernetes 集群中的应用#xff0c;在升级发布时可能会存在的问题#xff1a; 1#xff0c;由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的#xff0c;在升级时如果没有处理好应用优雅退出的问题#xff0c;就很容易导致 http 访问请…前言 部署在 Kubernetes 集群中的应用在升级发布时可能会存在的问题 1由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的在升级时如果没有处理好应用优雅退出的问题就很容易导致 http 访问请求 5xx 2原生 Deployment 应用的滚动发布功能是一把梭的全量发布模式没有灰度和分批控制发布的概念一旦出现问题故障影响范围就会迅速扩大 这也是为什么需要灰度发布蓝绿发布彩虹发布金丝雀发布、A/B Test等多样化形式发布的重要原因核心目标只有一个就是为了确保服务的稳定性减少或避免因变更带来的不稳定因素 今天我们主要来聊下如何在不引入第三方插件的情况下来实现简单的灰度发布和蓝绿发布功能 通过 Ingress 实现灰度发布和蓝绿发布 在 Kubernetes 里面 Pod 的网络通信都是借助 Service 实现的Service 的底层是依赖 Iptables 或者 eBPF 加上 dns 技术实现的具体细节感兴趣可自行探索Ingress 负责 k8s 集群内外的流量通信本身属于七层负载的工作范围所以可以将流量反向代理到四层负载的 Service 中在七层负载中支持 Http 协议所以可以实现的功能更加强大 工作原理 Kubernetes 自带的 Ingress Controller 组件的底层是 Nginx 所以基于七层负载的能力我们就可以做更多与流量分配相关的功能目前基于 Nginx 的 Ingress 支持通过 HeaderCookie 和 Weight 三种流量切分的策略这三种策略又可以实现以下两种发布场景 按请求级别的灰度用户流量 通过 header 和 cookie 路由流量进行灰度 按比例级别的灰度用户流量 通过 weight 权重设置 支持的Nginx Annotation介绍 nginx.ingress.kubernetes.io/canary-by-header 基于Header的流量切分。如果请求头中包含指定的 header并且值为“always”就将该请求转发给Canary Ingress定义的对应后端服务。如果值为“never”则不转发可用于回滚到旧版本。如果为其他值则忽略该annotation并通过优先级将请求流量分配到其他规则。 nginx.ingress.kubernetes.io/canary-by-header-value 必须与canary-by-header一起使用可自定义请求头的取值包含但不限于“always”或“never”。当请求头的值命中指定的自定义值时请求将会转发给Canary Ingress定义的对应后端服务如果是其他值则忽略该annotation并通过优先级将请求流量分配到其他规则。 nginx.ingress.kubernetes.io/canary-by-header-pattern 与canary-by-header-value类似唯一区别是该annotation用正则表达式匹配请求头的值而不是某一个固定值。如果该annotation与canary-by-header-value同时存在该annotation将被忽略。 nginx.ingress.kubernetes.io/canary-by-cookie 基于Cookie的流量切分。与canary-by-header类似该annotation用于cookie仅支持“always”和“never”无法自定义取值。 nginx.ingress.kubernetes.io/canary-weight 基于服务权重的流量切分适用于蓝绿部署。表示Canary Ingress所分配流量的百分比取值范围[0-100]。例如设置为100表示所有流量都将转发给Canary Ingress对应的后端服务。 注解规则会按优先级进行评估优先级为canary-by-header - canary-by-cookie - canary-weight。 灰度发布 依赖资源2 个 Ingress 对象2 个 Service 对象两个 Deployment 对象 操作流程为服务创建两个 Ingress一个为常规 Ingress另一个为带有 nginx.ingress.kubernetes.io/canary: true注解的 Ingress称为 Canary Ingress在 Canary Ingress 上配置切分策略。 两个 Deployment 对象分别对应升级过程中的两个版本 v1v2 apiVersion: apps/v1 kind: Deployment metadata:name: py-hello-blue spec:selector:matchLabels:app: hellocolor: bluereplicas: 1template:metadata:labels:app: hellocolor: bluespec:terminationGracePeriodSeconds: 30containers:- name: helloimagePullPolicy: Alwaysimage: localhost:5001/py-http:1ports:- containerPort: 8888resources:requests:memory: 50Milimits:memory: 200Milifecycle:preStop:exec: command: [sleep, 5]# command: [/usr/bin/tini, --, bash, -c]command: [sh, -c]args:- |python app.py apiVersion: apps/v1 kind: Deployment metadata:name: py-hello-green spec:selector:matchLabels:app: hellocolor: greenreplicas: 1template:metadata:labels:app: hellocolor: greenspec:terminationGracePeriodSeconds: 30containers:- name: helloimagePullPolicy: Alwaysimage: localhost:5001/py-http:2ports:- containerPort: 8888resources:requests:memory: 50Milimits:memory: 200Milifecycle:preStop:exec: command: [sleep, 5]# command: [/usr/bin/tini, --, bash, -c]command: [sh, -c]args:- |python app.py 两个 Service 对象分别对应 v1v2 的Deployment apiVersion: v1 metadata:name: py-hello-blue-service kind: Service spec:selector:app: hello#color: greencolor: blueports:- name: webport: 8888protocol: TCPtargetPort: 8888type: ClusterIP apiVersion: v1 metadata:name: py-hello-green-service kind: Service spec:selector:# app: hellocolor: green# color: blueports:- name: webport: 8888protocol: TCPtargetPort: 8888type: ClusterIP 两个 Ingress 对象进行灰度流量的分配 kind: Ingress apiVersion: networking.k8s.io/v1 metadata:name: py-hello-ingress-normal spec:rules:- host: py-hello.test.comhttp:paths:- path: /pathType: Prefixbackend:service: port: number: 8888name: py-hello-blue-servicekind: Ingress apiVersion: networking.k8s.io/v1 metadata:name: py-hello-ingress-canaryannotations:kubernetes.io/ingress.class: nginxnginx.ingress.kubernetes.io/canary: true # 启用Canary#基于 Header 的灰度#nginx.ingress.kubernetes.io/canary-by-header: Region#nginx.ingress.kubernetes.io/canary-by-header-pattern: hz|lg #基于 Cookie 的灰度#nginx.ingress.kubernetes.io/canary-by-cookie: qdl # Cookie中包含user_from_bj的请求转发到Canary Ingress#基于 weight 的灰度 nginx.ingress.kubernetes.io/canary-weight: 20 # 将20%的流量转发到Canary Ingressspec:rules:- host: py-hello.test.comhttp:paths:- path: /pathType: Prefixbackend:service: port: number: 8888name: py-hello-green-service实现灰度发布就是把 canary 里面的流量分配策略进行修改即可 蓝绿发布 实现蓝绿发布就是在灰度发布的基础上把 canary 里面的weight流量分配权重改为 100 即可。 注意 相同服务的Canary Ingress仅能够定义一个从而使后端服务最多支持两个版本。即使流量完全切到了Canary Ingress上旧版服务仍需存在否则会出现报错。 总结 通过 ingress 进行灰度发布和蓝绿发布可以实现更加复杂的流量分配策略但对应的操作也变得复杂了对于大部分复杂的发布业务也足够用了这种方案也可以结合发布平台稍做封装比如一键创建新克隆版本切换流量配比设置流量策略等有了这些基础功能后再配合发布平台就可以流畅的操作了
http://www.zqtcl.cn/news/985585/

相关文章:

  • 网页制作软件三剑客网站优化排名的方法
  • 购物网站开发背景及目的做百度推广网站咱们做
  • 漳州最专业的网站建设公司网站建设工作方案
  • 江西省建设厅网站官网网站备案期间可以用二级域名访问网站吗
  • 三丰云做网站步骤php网站建设视频教程
  • 赤峰网站开发公司wordpress电子商务主题 中文
  • 网站建设运营工作业绩怎样查看网站备案号
  • 江苏常州网站建设公司外贸网站建设盲区
  • 响应式网站设计教程wordpress 医院主题
  • 手机上怎么上传网站吗舟山做网站
  • 程序员做个网站要多少钱呢网站开发设计技术路线
  • 企业网站优化与推广哪个网站seo做的最好
  • 学做网站 软件合肥市建设投资有限公司
  • 网站开发优势用php制作一个个人信息网站
  • wordpress百度推送代码兰州网站关键字优化
  • 有了域名怎么建设网站在线crm免费将夜2
  • 网站建设 技术方案模板长沙手机网站公司
  • 游戏网站建设免费版百度只更新快照不收录网站
  • html小清新类型网站网站建设中应注意哪些问题
  • 网站开发技术和seo的联系精品课程网站建设 公司
  • 大型网站建设一般多少钱wordpress 调用百度前端公众库
  • 个人电脑做网站服务器网站地方网站域名用全拼
  • 我们网站在那里登陆后台系统管理成都app制作开发
  • 可以做问卷调查的网站仙居网站建设
  • 知名网站建设公司电话做一个小程序需要多少钱
  • 外贸找客户有什么网站个人如何做网站
  • 旅游项目网站开发ui界面设计分析
  • 企业建设网站没有服务器代理网页浏览
  • 深圳网站建设新闻网站建设营销的企业
  • 建筑设计网站软件排名工具