内容纲要
概要描述
TDH 产品中发布了 LTS 版本,针对这些版本,可以通过打 Patch 的方式解决一些已知问题,本文介绍一下 LTS 版本应该如何打 Patch。
详细说明
TDH 中 Patch 的实现是借助镜像的更新,主要包括以下几步:
- 通过查看 Patch 列表确认当前版本是否符合 Patch 条件。
- 联系我们 确认当前产品是否满足 Patch 条件
- 执行更新脚本
1.确定产品版本可以执行 Patch
- 可以通过查看 patch 列表,确认自己的产品版本支持打 Patch。
- 也可以 联系我们 确认当前产品是否满足 Patch 条件。
修改 image.conf
2.1 获取镜像仓库
# 执行命令:
docker info |grep 'Registry Mirrors' -A 1
# 命令输出
Registry Mirrors:
https://gts-argo322-031:5000/
可以看到镜像仓库是 gts-argo322-031:5000
2.2 修改 image.conf 中 image 信息
将base_image 和 new_image 中的 172.16.1.99 修改为 gts-argo322-031:5000,比如这样:
将后面的版本号,修改为对应的版本号,只需要修改版本号即可,比如这个是给 argodb-3.2.2-final 打 patch ,则修改为 argodb-3.2.2-final 即可,像这样:
3.执行更新脚本
执行 buildImage.sh 脚本,脚本执行完成后将完成 image 的更新并 push 仓库,重启服务后即可应用更新后的image
参考命令:
./buildImage.sh
如果更新完 Patch 之后使用有问题,可以按照如下方式回滚
4.常见异常情况处理
- 应用补丁遇到Final镜像校验报错:
ERROR Baseimage layers check failed, baseimage is not expected release final version!!!
...
WARNING Image with imageID: ca3bd4c80def maybe the expected baseimage!!!
新的补丁机制要求基于final版本构建补丁镜像,该报错意味着当前image.conf里配置的baseimage不是原始的final镜像,因此导致应用失败。
如果有 类似 imageID: ca3bd4c80def
的输出,则修改image.conf 中的 base_image 为这个imageID: ca3bd4c80def 的tag 即可。
如果没有WARNING imageID: ca3bd4c80def
的输出,则请 联系我们 处理。
- 执行Patch 脚本需要 root 权限,如果遇到权限相关的报错,使用 sudo 即可,参考命令为:
sudo /bin/bash ./buildImage.sh
5.回滚
Patch 操作会备份之前的镜像,如果需要回滚,可以参考以下步骤:
- 找到最新的 backup 的镜像,如下图:
[root@argodb-30~]# docker images |grep inceptor |grep backup
argodb-30:5000/transwarp/inceptor transwarp-6.2.2-final-backup-202304170120 b312515cf548 2 weeks ago 4.21GB
argodb-30:5000/transwarp/argodb-inceptor argodb-3.2.2-final-backup-202304200125 2b4d69ad1fa1 2 months ago 1.82GB
argodb-30:5000/transwarp/argodb-inceptor argodb-3.2.2-final-backup-202210251826 685d7643871c 12 months ago 1.82GB
- 可以通过查看 image.conf 文件,找到最初的 base 镜像的 tag,如下图:
[root@argodb-30~]# cat image.conf #config base image of Dockerfile,such as xxx_image=:5000/transwarp/argodb-inceptor:argodb-1.1.0-final
base_image=argodb-30:5000/transwarp/inceptor:transwarp-6.2.2-final
#config new name:tag of Dockerfile
new_image=argodb-30:5000/transwarp/inceptor:transwarp-6.2.2-final
[root@argodb-30~/patch/Patch-inceptor-transwarp622-x86_arm64-20230511-16]#
- 恢复为base_image,只需要讲 backup 的镜像 tag 为 base_image,然后 push 到镜像仓库即可;
[root@argodb-30~]# docker tag argodb-30:5000/transwarp/inceptor:transwarp-6.2.2-final-backup-202304170120 argodb-30:5000/transwarp/inceptor:transwarp-6.2.2-final
[root@argodb-30~]# docker push argodb-30:5000/transwarp/inceptor:transwarp-6.2.2-final
The push refers to repository [argodb-30:5000/transwarp/inceptor]
e46b117d82d1: Preparing
77d5c130a2d7: Waiting
0cd0f9c5c17b: Preparing
...
a7873230c9b8: Layer already exists
5f70bf18a086: Layer already exists
f64116beaa4b: Layer already exists
transwarp-6.2.2-final: digest: sha256:3f77c96e48c6b4c00c33932ca3b6ab996a5d80c0cf843bba6ffac712c45d89f5 size: 19139
- 相关服务需要重启才会使用最新的镜像。