系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 升级前的准备
3 升级步骤
3.1 下载新版本的 istio
3.2 解压缩 istio
3.3 设置 istioctl 环境变量
3.4 设置 istio 自动补全功能
3.5 验证新版本 istio 是否兼容老版本
3.6 创建升级配置文件
3.7 升级 istio
3.7.1 资源等待错误
3.7.2 资源冲突错误
3.8 重设数据平面
1 前言
如果你对博客有任何疑问,请告诉我。
今天杭州阴天,哥的心情不怎么嗨!因为哥前期都在使用 1.4.5 版本,但是这周 istio 官方没经我允许就擅自升级到了 1.5 版本,打了我一个措手不及。但是互联网这十几年没少教育我,于是痛定思痛决定拥抱变化。
2 升级前的准备
就像你撸管前要先把纸准备好一样,在升级 istio 前,要先做一些前期准备工作。
1 检查 istio 版本是不是 1.4.4 或更高版本
2 确定 istio 安装采用的是 istioctl 安装
使用如下命令查看当前 istio 安装版本:
istioctl version
命令截图如下:
由此可知,istio 当前的客户端、控制平面、数据平面的版本都是 1.4.5 版本。
通过查看 istio pod 的镜像也可以确认当前 istio 各组件的相关版本,如下图:
3 升级步骤
3.1 下载新版本的 istio
执行如下命令下载最新版的 istio:
curl -L https://istio.io/downloadIstio | sh -
也可以直接下载指定版本的 istio:
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.5.0 sh -
当然很多情况下,你都会遭遇网络情况,如下所示:
你能怎么办?你什么感觉?是不是就像大便找不到厕所?或者找到厕所却发现没坑?
实在下不到,你也不要悲愤,可以告诉哥,哥直接发给你,不用谢!
如下截图有没有看到,哥可以下,但是你们却下不到,你说气人不?
3.2 解压缩 istio
安装 istio 前,首先解压缩:
tar -zxvf istio-1.5.0-linux.tar.gz
解压缩后的目录结构截图如下:
关键目录、文件说明如下:
1 bin/istioctl # 客户端工具
2 install # 底层支持平台的资源文件,istio 可支持 consul、gcp、k8s 平台
3 samples # 学习样例
3.3 设置 istioctl 环境变量
因为我曾经设置过老版本 istioctl 环境变量,如下图所示:
所以首先需要通过如下命令进行删除:
export PATH=`echo $PATH | sed -e 's/:\/root\/istio\/istio-1.4.5\/bin//g'`
删除后截图如下:
将新版本 istioctl 路径添加到系统环境路径中:
cd istio-1.5.0
export PATH=$PATH:$PWD/bin
istioctl version
执行成功后,验证版本如下图所示,发现当前 istioctl 客户端版本已经更新为 1.5.0,但是控制面和数据面仍然是 1.4.5,这说明当前我们只是完成了 istio 客户端的改造,而控制面和数据面版本要升级完才会更改:
3.4 设置 istio 自动补全功能
将 istio 安装包 tools 目录下的 istioctl.bash 拷贝到用户根目录下:
cp istio-1.5.0/tools/istioctl.bash ~
编辑 ~/.bash_profile 文件,在文件末尾添加如下内容:
PATH=$PATH:$HOME/bin
PATH=$PATH:/root/istio/istio-1.5.0/bin
export PATH
source /root/.istioctl.bash
添加完毕后,加载配置使之生效:
source ~/.bash_profile
然后输入 istioctl 然后按两次 tab 键,发现自动补全功能已经生效:
3.5 验证新版本 istio 是否兼容老版本
执行如下命令查看新版本 istio 可兼容的版本范围:
istioctl manifest versions
如下图所示:
明确新版本 istio 可升级,则继续往下操作。
3.6 创建升级配置文件
我以前安装 istio 采用的 profile 是 demo:
istioctl manifest apply --set profile=demo
怎么理解 profile,你可以跟下图做类比:
也就是同样型号比如 G 级别车,一共有三个版本,每个版本就是一个 profile,每个 profile 的参数或者配置都有区别。
你也可以通过如下命令查看你的 istio 1.5.0 版本共有几个 profile:
但是可惜地是,istio 安装时支持 set 参数,比如你可以使用如下命令安装:
istioctl manifest apply --set profile=demo
但是 istioctl upgrade 命令不支持 --set 选项,因此,如果前期在安装的时候使用了 --set 选项,那么在升级时需要创建一个等效的配置选项文件。
使用如下命令创建 profile 为 demo 的等效配置文件:
istioctl profile dump demo > demo.yaml
3.7 升级 istio
执行如下命令来升级 istio:
istioctl upgrade -f demo.yaml
升级过程截图如下:
如果升级过程很顺畅,就可以跳过此小节继续下面的内容;如果升级过程并不顺利,可以根据下面的介绍进行修改。
3.7.1 资源等待错误
如果在升级过程中遭遇如下日志信息:
error installer Failed to wait for resource: resources not ready after 10m0s: timed out waiting for the condition
Deployment/istio-system/istiod
多半是因为镜像下载问题,如下图所示:
可以指定 aliyun 作为镜像源:
touch /etc/docker/daemon.json
vim /etc/docker/daemon.json
添加如下内容:
{
"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
}
添加完成后执行如下操作:
systemctl daemon-reload
systemctl restart docker
3.7.2 资源冲突错误
如果在安装过程中出现如下错误:
Error: failed to read the current Istio version, error: different versions of Istio components found
错误截图如下:
多半是因为镜像版本冲突,可以执行如下命令查看:
istioctl version
改正办法是删除错误版本的 deployment 后再升级(istioctl upgrade):
kubectl delete deployments.apps -n istio-system istio-egressgateway
升级成功后的截图如下:
再次执行 istioctl version,可以发现 istioctl 的客户端、数据面、控制面都从 1.4.5 变成了 1.5.0。如下截图所示:
3.8 重设数据平面
从上面的截图中,其实可以发现一个端倪,就是 data plane version 有一个 proxy 仍是 1.4.5。产生这样的原因是我在升级 istio 版本前就已经手工注入了一个 deployment,现在需要重置原有数据平面。执行如下命令重置原有被注入的 nginx deployment:
istioctl kube-inject -f nginx-deploy.yaml | kubectl apply -f -
再次执行 istioctl version 命令发现客户端、数据面、控制面的版本都更新到了最新的状态,如下图所示:
自此,九析带你轻松完爆 istio 的升级。