概览

创建时间:2024-04-02 最近修改时间:2024-04-02

#1. 概览

容器化部署模式下,DeepFlow 通过 K8s 管理所有状态。因此 Hot Patch 一般以更新容器镜像方式提供。pre_patch 及 post_patch 需进入 mntnct 容器内执行。

#1.1 Patch 升级方法

制作Patch的注意事项:

  • pre_patch.sh: 可选,若存在必须可执行,内含升级Patch之前需要执行的内容。
  • 容器镜像: 可选,必须是小版本 tag
  • post_patch.sh: 可选,若存在必须可执行,内含升级Patch之后需要执行的内容。

打 Patch 的注意事项

  • 不支持在x86/arm控制器上远程升级arm/x86环境的采集器。
  • 请保持 patch 目录的路径与 gitlab上一致,例如路径后缀需要形如/5.6/5.6.3-R3/01-20201022-13434-BUG,否则会影响 DeepFlow 版本信息生成。
  • 确保 values-custom.yaml 中的 DeepFlow Version 信息符合要求 e.g. "DeepFlow-V6.0.1" "DeepFlow-V6.0.1-01" "DeepFlow-V6.0.1-21"

#1.2 自动升级流程

仅支持 6.0.0 及以后版本

#1.2.1 功能

  • 支持容器镜像及 post_patch.sh 、mysql_issu.sql 的升级
  • 支持专属采集器、ESXI 采集器自动升级
  • 不支持 trident kvm 采集器自动升级
  • 聚合 Patch 自动升级 (需使用聚合 Patch 包)

#1.2.2 升级流程

  • 获取 Patch 压缩包 / 聚合 Patch 压缩包
  • 执行 patch 命令
    Usage:bash deepflow-patch [--allpatch] [Patch File Path]
                        [Patch File Path]           # 直接使用 Patch 文件路径作为第一个参数 e.g. /root/5.7.3_09-20211126-16616-BUG.tar.gz
                        -k,  --quick                # 多个 Patch 时可使用 -k 参数关闭 helm 升级操作,仅最后一个 Patch 时再统一升级,可减少 Patch 时间
                        -a,  --allpatch             # 聚合 Patch 包升级模式,必须使用聚合 Patch 包
                        -h,  --help                 # help how to use
    
    # 单个普通 Patch 升级
    /usr/local/deepflow/bin/deepflow-patch 15-20211213-16728-BUG.tar.gz
    # 多个普通 Patch 快速升级(-k 参数关闭本次 helm 升级操作,仅最后一个 Patch 时再统一升级,可减少 Patch 时间)
    /usr/local/deepflow/bin/deepflow-patch --quick 15-20211213-16728-BUG.tar.gz
    # 聚合 Patch 一键升级
    /usr/local/deepflow/bin/deepflow-patch --allpatch 15-20211213-16728-BUG.tar.gz
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

注意

  • mntnct pod 需运行在拥有 kubectl 的 master1 上,多控制器节点场景如遇 mt 在其他控制器 node 上,可使用 kubectl cordon/uncordon node 禁止调度/开放调度命令临时禁止调度到其他节点,重启 pod 后实现迁移 mt 运行节点。
  • 从区域升级 Patch 暂需手动升级,不执行 post_patch.sh 及 mysql issu

#1.3 手动升级流程

  • 下载并解压 01-patch 到指定目录
    • tar -zxvf xxx_patch.tar.gz -C /usr/local/deepflow/patch
  • 合并 patch 中的 registry 文件夹与原 registry,无需 mv 原 registry,参考如下命令,注意修改成正确路径
    • /bin/cp -rvf /usr/local/deepflow/patch/5.7/5.7.3/02-20211118-16589-BUG/registry/* /usr/local/deepflow/registry/
  • 如有部署模板更新,需按照路径合并,举例:
    • /bin/cp -rvf /usr/local/deepflow/patch/5.7/5.7.3/02-20211118-16589-BUG/templates/* /usr/local/deepflow/templates/
  • 根据 patch_image_tag_list.txt中的镜像 tag 修改 /usr/local/deepflow/templates/values.yaml 组件对应 tag
  • MySQL 数据升级
    # 进入mntnct 服务对应的 POD 执行 kubectl exec -it -n deepflow pod-xxxxxxxx sh
    mysql -hmysql -uroot -p -P30130 deepflow < /usr/local/deepflow/patch/5.7/5.7.3/02-20211118-16589-BUG/mysql_issu.sql
    
    1
    2
  • 进入 mt 容器环境, , 并进入 /usr/local/deepflow/patch 中具体 Patch 目录,执行 post_patch 脚本
    • bash /usr/local/deepflow/patch/5.7/5.7.3/01-20211104-16397-FEATURE/post_patch.sh
  • 修改 values.yaml 中的 deepflowVersion ,尾部增加 "-{最新patch号}",示例:"deepflowVersion: DeepFlow-V5.7.3-14"
  • 安装 DeepFlow 相关组件 /usr/local/deepflow/bin/deepflow-deploy -d
  • 升级 DeepFlow 相关组件 /usr/local/deepflow/bin/deepflow-deploy -u
  • 重启 df-web kubectl rollout restart -n deepflow deploy/df-web-deployment
  • 待 Pod 全都 Running 后登入前端,检查功能是否正常,检查版本号是否正确