Istio蓝绿升级

news/2024/7/4 7:47:57 标签: istio, 云原生

背景

k8s集群使用istio做为网关,istio使用的是老旧版本1.12.6。这次新项目需要使用istio的新特性vs.spec.http.directResponse,所以升级集群的istio版本为1.18.6

参考istio官方文档对istio进行蓝绿升级。

大概步骤和原理

  1. 通过revision关键字在集群中安装新版本的istio
  2. 更改ns的注入标签,
  3. 重启deployment控制器
  4. 确认旧版本的istiod控制平面没有服务依赖,清理控制平面及其他的crd

refer

https://istio.io/latest/zh/docs/setup/upgrade/canary/
https://jimmysong.io/blog/istio-canary-upgrade/

实施

下载新版本的istio

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.18.6 TARGET_ARCH=x86_64 sh -
curl -x socks5://xxx.xxx.xxx.xx:xxxx -LO https://github.com/istio/istio/releases/download/1.18.6/istio-1.18.6-linux-amd64.tar.gz
tar xf istio-1.18.6-linux-amd64.tar.gz

检查集群是否支持当前版本istio

/opt/istio-1.18.6/bin/istioctl x precheck

安装

/opt/istio-1.18.6/bin/istioctl install --set revision=1-18-6
kubectl get pod -n istio-system
# 查看控制面的istiod的镜像版本
kubectl describe pod istiod-858c757664-btcnx
# 验证版本
/opt/istio-1.18.6/bin/istioctl version

测试新版本的istio自动注入

kubectl create ns istio-test
# 先将ns打上默认的注入label
kubectl label ns istio-test istio-injection=enabled
kubectl apply -n istio-test -f /opt/istio-1.18.6/samples/sleep/sleep.yaml
kubectl get pod -n istio-test
# 验证注入的istio仍然是旧版本的istio
kubectl describe pod sleep-74f54c8d5d-mv9jc -n istio-test
# 为ns打上新的label
kubectl label ns istio-test istio-injection- istio.io/rev=1-18-6
# 重启deployment使得新的istio-proxy自动注入
kubectl rollout restart deployment -n istio-test
# 验证
kubectl describe pod sleep-5cdd998d69-t4ngn -n istio-test
/opt/istio-1.18.6/bin/istioctl proxy-status |grep istio-test

测试没问题之后将istio默认的注入crd删掉,并将默认的tag设置为新版本的istio

kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io istio-sidecar-injector
/opt/istio-1.18.6/bin/istioctl tag set default --revision 1-18-6
# 有报错信息的话 执行强制覆盖
/opt/istio-1.18.6/bin/istioctl tag set default --revision 1-18-6 --overwrite

验证集群中是否存在directResponse资源字段

kubectl explain vs.spec.http

总结

还有其他的升级方法:使用operator执行蓝绿升级,原地升级。或者istioctl原地升级

其他可能会用到的命令

kubectl get endpoints -n istio-system -o "custom-columns=NAME:.metadata.name,PODS:.subsets[*].addresses[*].targetRef.name"

kubectl get pods -n istio-system -o=jsonpath='{range .items[*]}{.metadata.name}{" "}{.metadata.namespace}{"\n"}{end}' | xargs -I{} sh -c 'echo "{}" && kubectl get pod {} -o jsonpath="{.spec.volumes[*].configMap.name}"'

kubectl get pod istio-ingressgateway-5f64bc6cb6-nbwsh -o json | jq '.kind, .metadata.name, .spec.volumes' | grep injector
kubectl get pods -n istio-system -o=jsonpath='{range .items[*]}{.metadata.name}{" "}{.metadata.namespace}{"\n"}{end}'

http://www.niftyadmin.cn/n/5348663.html

相关文章

护眼落地灯哪个牌子更好更专业?经典落地灯排名

不知道各位家长有没有发现,近几年来小小年纪就戴眼镜的孩子真的越来越多了! 根据专家数据统计,在全国青少年近视率中小学生就占其40%比重,也代表了10个学生中就有4、5个是戴眼镜的。造成这个趋势的原因也不难理解,一是…

【王道数据结构】【chapter2线性表】【P43t13】

设有一头指针为L的带有表头结点的非循环双向链表,其每个结点中除有prior(前驱指针),data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被起用前&#xff0…

java servlet运输公司管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web运输公司管理系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

matlab--------矩阵的运算

用rand函数生成0~1的随机数字 exp(x)是对矩阵的元素进行指数运算; round(x,2)是把全是小数的矩阵的元素保留2位小数; mod(x,3)是计算矩阵元素除以三后的余数; sum函数:求和函数,sum(A,1)可以简写成sum(A);sum(sum(…

如何解决云计算中的性能和延迟问题?

随着云计算的普及,越来越多的企业开始将业务迁移到云端。然而,随着业务的发展和数据量的增长,云计算中的性能和延迟问题也逐渐凸显出来。这些问题不仅会影响用户体验,还会对企业的业务发展造成负面影响。因此,如何解决…

智能AI系统开发,专业软件硬件物联网开发公司,探索未来科技新纪元

在信息时代,人工智能(AI)、物联网等前沿技术日益受到人们的关注。智能AI系统、专业软件硬件物联网开发公司应运而生。今天,我们将向大家介绍一家位于XX城的专业公司,致力于智能AI系统开发和软件硬件物联网领域的创新研…

实现负载均衡

1.安装依赖 sudo apt insta11 libgd-dev 2.下载nginx wget http://nginx.org/download/nginx-1.22.1.tar.gz 3.解压nginx tar -zvxf nginx-1.22.1.tar.g2 4.编译安装 cd nginx-1.22.1 5.编译并指定安装位置,执行安装之后会创建指定文件夹/www/env/nginx ./configure…

༺༽༾ཊ—Unity之-03-建造者模式—ཏ༿༼༻

首先我们打开一个项目 在这个初始界面我们需要做一些准备工作 建基础通用包 创建一个Plane 重置后 缩放100倍 加一个颜色 更换天空盒(个人喜好) 任务:使用【UI】点击生成6种车零件组装不同类型车 【建造者模式】 首先资源商店下载车模型 将C…