网站建设费如何账务处理凡客优品家居官方网站
news/
2025/9/22 21:44:34/
文章来源:
网站建设费如何账务处理,凡客优品家居官方网站,百度收录最快网站,中国机械加工网订单前言
部署在 Kubernetes 集群中的应用#xff0c;在升级发布时可能会存在的问题#xff1a; 1#xff0c;由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的#xff0c;在升级时如果没有处理好应用优雅退出的问题#xff0c;就很容易导致 http 访问请…前言
部署在 Kubernetes 集群中的应用在升级发布时可能会存在的问题 1由于 Kuberneter 底层 Pod 容器生命周期与网络组件生命周期是异步管理的在升级时如果没有处理好应用优雅退出的问题就很容易导致 http 访问请求 5xx
2原生 Deployment 应用的滚动发布功能是一把梭的全量发布模式没有灰度和分批控制发布的概念一旦出现问题故障影响范围就会迅速扩大 这也是为什么需要灰度发布蓝绿发布彩虹发布金丝雀发布、A/B Test等多样化形式发布的重要原因核心目标只有一个就是为了确保服务的稳定性减少或避免因变更带来的不稳定因素 今天我们主要来聊下如何在不引入第三方插件的情况下来实现简单的灰度发布和蓝绿发布功能 通过 Service 实现灰度发布和蓝绿发布 在 Kubernetes 里面 Pod 的网络通信都是借助 Service 实现的Service 的底层是依赖 Iptables 或者 eBPF 加上 dns 技术实现的具体细节感兴趣可自行探索这里不在展开那么我们来看下如何借助 Service 实现灰度发布和蓝绿发布。 灰度发布
依赖资源1 个 Service 对象两个 Deployment 对象一般称为 blue 和 green
原理每次升级发布都会额外拉起一个 Deployment 然后通过 Service 的 selector 来绑定 Deployment通过在旧的 Deployment上缩容一个副本新的 Deployment 上扩容一个副本类似这样的一缩一扩的方式实现灰度发布。
假设blue_deployment.yaml 是 v1 版本注意我们设置了 selector label
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 现在要灰度升级我们新建一个 green_deployment.yaml 是 v2 版本注意也设置了 label 标签
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
ok现在我们通过 Service 来绑定流量
apiVersion: v1
metadata:name: py-hello-service
kind: Service
spec:selector:app: hello#color: green#color: blueports:- name: webport: 8888protocol: TCPtargetPort: 8888type: ClusterIP
在这个 Service 中我们如果设置 color 标签则可以把流量全部导入v1 或者 v2如果我们不设置 color 标签那么默认会把流量请求在两个 Deployment 中轮询为了实现灰度发布我们需要通过缩扩副本来实现我们例子都只有一个副本所以灰度起来也很简单
# blue 旧服务
kubectl scale deployment/py-hello-blue --replicas1# green 新服务扩容 1就相当于 50% 流量进来如果想要 10% 流量则可以把 bluee 扩容到 9
kubectl scale deployment/py-hello-green --replicas1
注意这里面的流量调控并不是精准的只能实现简单的灰度发布
蓝绿发布
接着灰度发布的例子我们蓝布发布的实现就非常简单了直接在 Service 里面增加 color 标签为 green 就可以把全部流量切换到新拉起的服务中当然如果测试失败了也可以快速进行回滚同理将 color 改回为 blue 即可
apiVersion: v1
metadata:name: py-hello-service
kind: Service
spec:selector:app: hellocolor: green #如果蓝布切换后测试失败可以快速把 color 改为 blue 进行回滚ports:- name: webport: 8888protocol: TCPtargetPort: 8888type: ClusterIP
总结
通过 service 进行灰度发布和蓝绿发布虽然功能比较简单但是对于大部分普通的发布业务也足够用了这种方案可以结合发布平台稍做封装比如一键创建新克隆版本切换流量扩缩容等有了这些基础功能后使用起来会更加流畅
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910477.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!