概要描述
Workflow 组件的基础镜像有点问题,镜像自带 /etc/yum.repo.d 下的 yum 源在客户自身内网环境里一般是不能连通的;这会导致初始化 TDH-Client 的 init.sh 脚本进行安装 Kerberos 客户端执行 yum 语句一直卡在连接 yum 源 url,最后超时报错。
比如脚本任务执行时出现 Another app is currently holding the yum lock
之类的错误。
本文介绍两个针对该问题的 workaround 方法供参考。
Workflow 安装 TDH-Client 请参考 2.1.2 章节:Workflow 安装TDH-Client
详细说明
方法1:挂载本机 /etc/yum.repos.d 到 Workflow 容器 /etc/yum.repos.d
- 以 Workflow1 服务为例,ssh 登录 TDH Manager 节点,确认正在使用的 Workflow 镜像版本
$ kubectl describe po $(kubectl get po -o wide | grep workflow1 | head -1 | awk '{print $1}') | grep Image:
- workflow1 为对应的组件实例名
- 修改对应镜像版本的 metainfo 文件
根据上面获取的 Workflow 镜像版本,进入目录 /var/lib/transwarp-manager/master/content/meta/services/WORKFLOW/studio-1.5.0-final
编辑 metainfo.yaml
,添加如下挂载信息:
- mountPath: /etc/yum.repos.d
hostPath: /etc/yum.repos.d
name: yum-repo
注意空格和缩进要和上面的挂载一致,保存退出
- 重启 TDH Manager
# 8.x 版本前
$ /etc/init.d/transwarp-manager restart
# 8.x 及其之后版本
$ systemctl restart transwarp-manager
-
登录 TDH Manger 8180 页面,重启 Workflow 服务
-
再次进入 Workflow 的容器,能看到容器内 /etc/yum.repos.d 下的 yum 源已经和宿主机一致
-
注意点:
- 该方法需要重启 Workflow 组件,但只需要修改 metainfo 文件,无需操作每个 Workflow 节点机器
- 只要保证本地的 yum repo 访问正常,容器内也会正常,比较推荐该方法
方法2:修改 TDH-Client/init.sh 脚本
- 以 Workflow1 服务为例,ssh 登录每个 Workflow1 角色的节点,拷贝 /etc/yum.repos.d/os.repo 到 /var/lib/workflow1/ 下
$ cp -rf /etc/yum.repos.d/os.repo /var/lib/workflow1/
- 修改 /var/lib/workflow1/TDH-Client/init.sh,替换
sudo yum install krb5-workstation -y
为sudo yum install krb5-workstation -y -c /var/lib/workflow/os.repo --disablerepo=* --enablerepo=os
- 删除 /var/lib/workflow1/tdh-client.tar
经测试如果不删除该 tar 包,重启 Workflow 后会被重新解压,导致覆盖前面的修改
-
注意点
- 此方法无需重启 Workflow,只要确保不更新 TDH-Client,在本集群会长期有效
- 该方法需要操作每个 Workflow 角色节点
- 如果有脚本任务引用了官方手册的命令:
source /bin/tdh_client_import.sh
, 由于第 3 步删除了 tar 包,会导致重启 Workflow 后容器里不会生成该脚本,导致任务出问题;需要修改脚本任务命令为source /var/lib/workflow/TDH-Client/init.sh n n
- 综上,不推荐方法 2,但可作为无法重启 Workflow 时的一种选择