第九章 九析带你轻松完爆 service mesh - istio upgrade 升级

系列文章:


总目录索引:九析带你轻松完爆 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.png

        今天杭州阴天,哥的心情不怎么嗨!因为哥前期都在使用 1.4.5 版本,但是这周 istio 官方没经我允许就擅自升级到了 1.5 版本,打了我一个措手不及。但是互联网这十几年没少教育我,于是痛定思痛决定拥抱变化。


2 升级前的准备

        就像你撸管前要先把纸准备好一样,在升级 istio 前,要先做一些前期准备工作。

1 检查 istio 版本是不是 1.4.4 或更高版本

2 确定 istio 安装采用的是 istioctl 安装

        使用如下命令查看当前 istio 安装版本:

istioctl version

        命令截图如下:clipboard2.png

        由此可知,istio 当前的客户端、控制平面、数据平面的版本都是 1.4.5 版本。

        通过查看 istio pod 的镜像也可以确认当前 istio 各组件的相关版本,如下图:clipboard3.png


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 -

        当然很多情况下,你都会遭遇网络情况,如下所示:clipboard4.png

        你能怎么办?你什么感觉?是不是就像大便找不到厕所?或者找到厕所却发现没坑?

        实在下不到,你也不要悲愤,可以告诉哥,哥直接发给你,不用谢!

        如下截图有没有看到,哥可以下,但是你们却下不到,你说气人不?clipboard5.png

3.2 解压缩 istio

        安装 istio 前,首先解压缩:

tar -zxvf istio-1.5.0-linux.tar.gz

        解压缩后的目录结构截图如下:clipboard6.png

        关键目录、文件说明如下:

1 bin/istioctl # 客户端工具

2 install # 底层支持平台的资源文件,istio 可支持 consul、gcp、k8s 平台

3 samples # 学习样例

3.3 设置 istioctl 环境变量

        因为我曾经设置过老版本 istioctl 环境变量,如下图所示:clipboard7.png

        所以首先需要通过如下命令进行删除:

export PATH=`echo $PATH | sed -e 's/:\/root\/istio\/istio-1.4.5\/bin//g'`

        删除后截图如下:clipboard8.png

        将新版本 istioctl 路径添加到系统环境路径中:

cd istio-1.5.0

export PATH=$PATH:$PWD/bin

istioctl version

        执行成功后,验证版本如下图所示,发现当前 istioctl 客户端版本已经更新为 1.5.0,但是控制面和数据面仍然是 1.4.5,这说明当前我们只是完成了 istio 客户端的改造,而控制面和数据面版本要升级完才会更改:clipboard9.png

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 键,发现自动补全功能已经生效:clipboard10.png

3.5 验证新版本 istio 是否兼容老版本

        执行如下命令查看新版本 istio 可兼容的版本范围:

istioctl manifest versions

        如下图所示:clipboard11.png

        明确新版本 istio 可升级,则继续往下操作。

3.6 创建升级配置文件

        我以前安装 istio 采用的 profile 是 demo:

istioctl manifest apply --set profile=demo

        怎么理解 profile,你可以跟下图做类比:clipboard12.png

        也就是同样型号比如 G 级别车,一共有三个版本,每个版本就是一个 profile,每个 profile 的参数或者配置都有区别。

        你也可以通过如下命令查看你的 istio 1.5.0 版本共有几个 profile:clipboard13.png

        但是可惜地是,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

        升级过程截图如下:clipboard14.png

        如果升级过程很顺畅,就可以跳过此小节继续下面的内容;如果升级过程并不顺利,可以根据下面的介绍进行修改。

3.7.1 资源等待错误

        如果在升级过程中遭遇如下日志信息:clipboard15.png

error installer Failed to wait for resource: resources not ready after 10m0s: timed out waiting for the condition

Deployment/istio-system/istiod

        多半是因为镜像下载问题,如下图所示:clipboard16.png

        可以指定 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

        错误截图如下:clipboard17.png

        多半是因为镜像版本冲突,可以执行如下命令查看:

istioctl version

spacer.gifclipboard18.png

        改正办法是删除错误版本的 deployment 后再升级(istioctl upgrade):

kubectl delete deployments.apps -n istio-system istio-egressgateway

        升级成功后的截图如下:clipboard19.png

        再次执行 istioctl version,可以发现 istioctl 的客户端、数据面、控制面都从 1.4.5 变成了 1.5.0。如下截图所示:clipboard20.png

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 命令发现客户端、数据面、控制面的版本都更新到了最新的状态,如下图所示:clipboard21.png

        自此,九析带你轻松完爆 istio 的升级。

猜你喜欢

转载自blog.51cto.com/14625168/2477719