K8S的金丝雀发布(Canary Release)

1.概念

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

  • 总:会有一个对外暴露测试,没有问题再更新剩余的,更新一个对外开放一个

2.相关架构理念

在这里插入图片描述

3.金丝雀发布部署操作

(1)删除之前的pod

#删除之前的pod
kubectl delete deployments.apps nginx-deployment
kubectl get pod

在这里插入图片描述

(2)创建新的资源

kubectl create deployment nginx-wang --image=nginx:1.14 --port=80 --replicas=3
kubectl get pod

在这里插入图片描述

(3)查看详细信息

kubectl describe pod

在这里插入图片描述

(4)另开一个终端进行实时跟踪

kubectl get pod -w

在这里插入图片描述

(5)在原本的终端更新资源类型

kubectl  set image deployment nginx-wang nginx=nginx:1.15 && kubectl rollout pause deployment nginx-wang
kubectl get pod
kubectl get all

在这里插入图片描述

(6)监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w 

在这里插入图片描述

(7)查看详细地址

kubectl get pod -owide

在这里插入图片描述

(8)查看连接并查看版本

curl -I 10.244.1.14
curl -I 10.244.2.17

在这里插入图片描述

4.访问测试

(1)对端口进行外放访问设置

kubectl expose deployment nginx-wang --port=80 --target-port=80 --type=NodePort
#查看设置的内容
kubectl get svc

在这里插入图片描述

(2)浏览器访问测试

http://192.168.174.18:31659/

在这里插入图片描述

(3)查看详细信息

kubectl describe svc nginx-wang

在这里插入图片描述

(4)查看 Kubernetes 集群中的服务端点信息

kubectl get endpoints

在这里插入图片描述

(5)详细信息

kubectl describe endpoints nginx-wang

在这里插入图片描述

5.金丝雀隔离新的pod

  • 测试新的版本是否有问题,给pod做隔离,需要单独的标签

(1)创建新的pod并给端口

kubectl expose deployment nginx-wang --name=new-nginx-nginx-wang --port=80 --target-port=80 --type=NodePort
kubectl get svc
kubectl get endpoints

在这里插入图片描述

(2)编辑服务对象

kubectl edit svc new-nginx-nginx-wang
复制里面的文件内容编辑新的yaml文件
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2023-09-12T07:15:10Z"
  labels:
    app: nginx-wang
    pod-template-hash: 675f9f4c48
  name: new-nginx-nginx-wang
  namespace: default
  resourceVersion: "27300"
  uid: 668a7d78-41a5-42f4-bb0c-ea91c0f633f1
spec:
  clusterIP: 10.96.202.59
  clusterIPs:
  - 10.96.202.59
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 30360
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx-wang
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

(3)获取 Pod 的列表

kubectl get pod --show-labels
kubectl describe pod nginx-wang-675f9f4c48-2s65t 
#编辑yaml文件
vim new-nginx-nginx-wang.yaml
#粘贴并加以修改,做标签分离

在这里插入图片描述
在这里插入图片描述

(4)删除新的标签

kubectl delete svc new-nginx-nginx-wang
#取当前集群中所有服务对象的列表
kubectl get svc
#创建或更新服务对象
kubectl apply -f new-nginx-nginx-wang.yaml
#再次被执行,目的是获取已经更新后的服务对象列表
kubectl get svc

在这里插入图片描述

(5)访问测试

curl -I 10.96.202.59

在这里插入图片描述

6.重建

(1)复制旧的yaml配置文件,复制apiVersion: v1—————— type: NodePort

kubectl edit svc nginx-wang 
#查看标签,复制标签
kubectl get pod --show-labels

在这里插入图片描述

(2)编辑配置文件,将标签粘贴

vim nginx-wang.yaml
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2023-09-12T07:09:22Z"
  labels:
    app: nginx-wang
  name: nginx-wang
  namespace: default
  resourceVersion: "26785"
  uid: 7843e321-f4cf-4500-aad3-98238db50f7d
spec:
  clusterIP: 10.96.152.69
  clusterIPs:
  - 10.96.152.69
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31659
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    pod-template-hash: 6ff987bf55
  sessionAffinity: None
  type: NodePort
status:
  loadBalancer: {}

(3)删除现有的

kubectl delete svc nginx-wang
#查看已删除的
kubectl get svc
#再次新创建
kubectl apply -f nginx-wang.yaml
#查看创建的
kubectl get svc

在这里插入图片描述

7.获取当前集群中所有的终结点

kubectl get endpoints

在这里插入图片描述

(1)获取当前集群中所有的 Pod 列表

kubectl get pod -owide
#登录新的pod测试
kubectl exec -it nginx-wang-675f9f4c48-2s65t bash

在这里插入图片描述

(2)测试访问

cd /usr/share/nginx/html/
echo "this is exo-update" > index.html
exit

(3)查看端口,并且浏览器访问

kubectl get svc
#此新的就是给测试更新玩家使用
http://192.168.174.19:30360/

在这里插入图片描述

8.登录旧的pod中测试

(1)登录旧1的pod中测试

kubectl get pod
kubectl exec -it nginx-wang-6ff987bf55-fql27 bash
echo "this is bkpp" >> index.html
exit

在这里插入图片描述

(2)登录旧2的pod中测试

kubectl get pod
kubectl exec -it nginx-wang-6ff987bf55-kdsq9 bash
cd /usr/share/nginx/html/
echo "this is lotto" > index.html
exit

在这里插入图片描述

(3)访问测试

kubectl get svc
#访问网页,等待刷新变化
http://192.168.174.19:31659/

在这里插入图片描述
在这里插入图片描述

9.查看更新状态信息

kubectl rollout status deployment nginx-wang
#确保更新的pod没问题了,继续更新
kubectl rollout resume deployment nginx-wang

(1)查看最后的更新情况

kubectl get pods -w 

(2)查看端口及地址

kubectl get svc
#访问测试
curl -I 192.168.174.19:30360
curl -I 10.96.202.59

在这里插入图片描述

总结:

金丝雀发布的声明式管理方法:
create/apply 两个的区别:
当yaml配置文件发送改动后,使用以下两个更新的过程:
create:是一次性的,先delete删除原有的资源再通过yaml’文件再创建。
nginx-wang

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
灰度发布、蓝绿发布金丝雀发布都是软件发布中常用的策略,用于控制新版本的上线范围和风险。 1. 灰度发布(Gray Release): 灰度发布是指将新版本的功能或者代码逐步地、部分地发布给一部分用户或者服务器,以验证新版本的稳定性和可靠性。通过逐步扩大发布范围,可以及时发现和解决问题,减少对用户的影响。在灰度发布中,可以根据不同的条件(如用户ID、地域、设备类型等)来选择参与灰度发布的用户。 2. 蓝绿发布(Blue-Green Deployment): 蓝绿发布是指在生产环境中同时部署两个完全相同的环境,一个环境为蓝色环境(Blue),另一个环境为绿色环境(Green)。初始状态下,蓝色环境对外提供服务,而绿色环境处于闲置状态。当新版本准备就绪时,先将新版本部署到绿色环境中进行测试和验证。当验证通过后,将流量切换到绿色环境,使其成为主要的生产环境,而蓝色环境则成为备份环境。这样可以实现快速回滚,降低发布风险。 3. 金丝雀发布(Canary Release): 金丝雀发布是指将新版本的功能或者代码逐步地、部分地发布给一部分用户或者服务器,以验证新版本的性能和用户体验。与灰度发布不同的是,金丝雀发布更关注新版本的性能指标和用户反馈。通过逐步增加流量,可以及时监测新版本的性能表现,并根据反馈结果决定是否继续全面发布。如果出现问题,可以快速回滚或者停止发布
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值