前置条件
请在升级之前,进行如下场景检查:
检查是否进行调整PV的服务端连接位置操作,如果执行过,需要确保满足以下条件:
如果PV只会被一个Pod挂载,不受影响。
如果PV被多个Pod挂载,请确保全部的Pod都没有进行过重启,或者全部完成了重启。
检查是否在HBlock侧执行过卷的target迁移操作(此处的卷为CSI侧的PV对应的HBlock侧的实例):
如果Kubernetes版本低于1.21,请确保挂载了该PV的Pod全部完成了重启。
Kubernetes版本为1.21及以上,不受影响。
说明
如果对升级方案有任何问题,请联系我们协助处理。如果升级前没有进行检查就执行了升级操作,可能会导致iSCSI连接无法断开,如果遇到此问题,请联系我们进行处理。
iscsid守护进程位置不变的升级
下列情况使用该方案升级:
升级前的版本values.yaml中没有参数iscsiOnHost(1.5.1之前版本不能设置该参数),升级后版本values.yaml中没有iscsiOnHost或者values.yaml中参数iscsiOnHost设置为false。
升级前的版本values.yaml中iscsiOnHost为false,升级后版本values.yaml中的参数iscsiOnHost设置为false。
升级前升级后values.yaml中的参数iscsiOnHost都为true。
升级步骤
更新驱动镜像:请根据逐台导入镜像的方式或docker私仓导入镜像的方式章节的步骤,导入最新安装包的驱动。
在升级版本的charts/csi-driver-stor下修改values.yaml,使其HBlock相关配置与升级前版本的相同。
在升级版本的charts/csi-driver-stor下执行下列命令升级:
helm upgrade stor ./升级后检查:
可以在宿主机启动样例POD,进行基础流程测试,确认功能正常。
重启Kubernetes所有的slave宿主机节点,确认各存量POD能正确启动。(如果不验证重启恢复的场景,可跳过这步。)
从低版本(小于等于1.6.0)升级到高版本(大于等于1.6.1)后,如存在业务POD,确保在没有正在新建或者删除POD的前提下,执行命令kubectl get pod -A | grep csi-storplugin-node| awk '{print $2}' | xargs -I {} kubectl exec {} -c storplugin-node -- sh -c'/storadm--upgrade add-missing-trackfile',补齐缺失的trackfile。
注意
kubectl get pod -A | grep csi-storplugin-node的作用是过滤出所有CSI节点的驱动POD。执行此命令前需管理员检查此处需要与驱动实际部署方案一致,如果不一样,请修改为对应CSI节点的驱动POD。
命令执行完成后,将显示添加成功与失败的 tracefile 数量。若存在添加失败的情况(如提示“Failed to add x file(s)”),管理员需及时排查原因并处理。
如果用户使用了自定义的驱动部署方案,请注意:storadm工具的执行依赖于环境变量DRIVER_NAME和KUBE_NODE_NAME,因此必须在 CSI Node Server 的Pod中配置这两个环境变量,否则可能导致功能异常。
env: - name: DRIVER_NAME value: 驱动名 - name: KUBE_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName
iscsid守护进程移动到宿主机的升级
升级前的版本values.yaml中没有参数iscsiOnHost(1.5.1之前版本不能设置该参数),升级后values.yaml中参数iscsiOnHost设置为true。
升级前的版本values.yaml中参数iscsiOnHost设置为false,升级后values.yaml中参数iscsiOnHost设置为true。
升级步骤
暂停CSI相关业务,以及存量计算节点POD所有业务,留出升级时间。执行下列命令后,禁止用户执行创建PV、删除PV、POD挂载存储、卸载POD等CSI相关的业务。
kubectl delete daemonset csi-storplugin-node在Kubernetes所有的slave节点宿主机安装iSCSI工具,并配置/etc/iscsi/iscsid.conf。
安装iSCSI工具。
如果操作系统是CentOS/RHEL,请安装iscsi-initiator-utils,安装命令如下:
yum -y install iscsi-initiator-utils如果操作系统是Ubuntu/Debian,安装命令如下:
apt install open-iscsi
修改/etc/iscsi/iscsid.conf配置文件。
#如需启用iscsi target迁移自动恢复, 那么得将iscsid.safe_logout设置为No iscsid.safe_logout = No在各宿主机启动iSCSI进程。
systemctl enable iscsid systemctl restart iscsid # 确认iSCSI进程状态正常 systemctl status iscsid
在Kubernetes所有的slave节点宿主机配置MPIO。
安装 MPIO。
说明
如果已安装MPIO,忽略此步骤。
对于CentOS:
yum -y install device-mapper-multipath device-mapper-multipath-libs对于Ubuntu:
apt install multipath-tools
配置 MPIO。
复制 /usr/share/doc/device-mapper-multipath-X.Y.Z/multipath.conf(其中X.Y.Z为multipath的实际版本号,请根据实际情况查找multipath.conf)到/etc/multipath.conf。
在/etc/multipath.conf中增加如下配置:
注意
配置文件multipath.conf中,如果multipath部分与devices部分中有相同参数,multipath中的参数值会覆盖devices中的参数值。为了正常使用HBlock卷,需要删除multipath中的与下列字段相同的参数。
如果升级前修改过stor-multipath-conf(可通过kubectl describe cm stor-multipath-conf查看文件内容),且与下列文件不一致,请务必联系天翼云客服后再做操作,否则可能会引起升级失败或者异常。
defaults { user_friendly_names yes find_multipaths yes uid_attribute "ID_WWN" } devices { device { vendor "CTYUN" product "iSCSI LUN Device" path_grouping_policy failover path_checker tur path_selector "round-robin 0" hardware_handler "1 alua" rr_weight priorities no_path_retry queue prio alua } }
重启multipathd服务。
对于CentOS:
systemctl restart multipathd systemctl enable multipathd对于Ubuntu:
systemctl restart multipath-tools.service
更新驱动镜像:请根据逐台导入镜像的方式或docker私仓导入镜像的方式章节的步骤,导入最新安装包的驱动。
在升级版本的charts/csi-driver-stor下修改values.yaml:
使其HBlock相关配置与升级前版本的相同。
iscsiOnHost设置为true。
在升级版本的charts/csi-driver-stor下执行下列命令升级:
helm upgrade stor ./升级后检查:
进入各CSI POD,执行ps -ef,确认容器内没有进程:multipathd -f、iscsid -f。
可以在宿主机启动样例POD,进行基础流程测试,确认功能正常。
重启Kubernetes所有的slave宿主机节点,确认各存量POD能正确启动。(如果不验证重启恢复的场景,可跳过这步。)
从低版本(小于等于1.6.0)升级到高版本(大于等于1.6.1)后,如存在业务POD,确保在没有正在新建或者删除POD的前提下,执行命令kubectl get pod -A | grep csi-storplugin-node| awk '{print $2}' | xargs -I {} kubectl exec {} -c storplugin-node -- sh -c'/storadm--upgrade add-missing-trackfile',补齐缺失的trackfile。
注意
kubectl get pod -A | grep csi-storplugin-node的作用是过滤出所有CSI节点的驱动POD。执行此命令前需管理员检查此处需要与驱动实际部署方案一致,如果不一样,请修改为对应CSI节点的驱动POD。
命令执行完成后,将显示添加成功与失败的 tracefile 数量。若存在添加失败的情况(如提示“Failed to add x file(s)”),管理员需及时排查原因并处理。
如果用户使用了自定义的驱动部署方案,请注意:storadm工具的执行依赖于环境变量DRIVER_NAME和KUBE_NODE_NAME,因此必须在 CSI Node Server 的Pod中配置这两个环境变量,否则可能导致功能异常。
env: - name: DRIVER_NAME value: 驱动名 - name: KUBE_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName