前置条件
请在升级之前,进行如下场景检查:
检查是否进行调整PV的服务端连接位置操作,如果执行过,需要确保满足以下条件:
如果PV只会被一个Pod挂载,不受影响。
如果PV被多个Pod挂载,请确保全部的Pod都没有进行过重启,或者全部完成了重启。
检查是否在HBlock侧执行过卷的target迁移操作(此处的卷为CSI侧的PV对应的HBlock侧的实例):
如果Kubernetes版本低于1.21,请确保挂载了该PV的Pod全部完成了重启。
Kubernetes版本为1.21及以上,不受影响。
说明
如果对升级方案有任何问题,请联系我们协助处理。如果升级前没有进行检查就执行了升级操作,可能会导致iSCSI连接无法断开,如果遇到此问题,请联系我们进行处理。
iscsid守护进程位置不变的升级
下列情况使用该方案升级:
升级前版本安装时中没设置参数--iscsi-on-host(1.5.1之前版本不能设置该参数),升级后版本也没有设置该参数。
升级前升级后版本都设置了参数--iscsi-on-host。
升级步骤
更新驱动镜像:请根据逐台导入镜像的方式或docker私仓导入镜像的方式章节的步骤,导入最新安装包的驱动。
在升级版本的对应文件下修改HBlock相关配置:
修改deploy/csi-plugin-conf/csi-configMap.yaml,确保与升级前版本的配置一致。
修改deploy/csi-plugin-conf/csi-secret.yaml,确保与升级前版本的配置一致。
修改deploy/csi-plugin-conf/csi-secret-decrypt.yaml ,确保与升级前版本的配置一致。
在升级版本的/deploy下执行下列命令升级:
升级前版本安装时中没设置参数--iscsi-on-host(1.5.1之前版本不能设置该参数),升级后版本也没有设置该参数,执行下列命令:
./deploy.sh升级前升级后版本都设置了参数--iscsi-on-host,执行下列命令:
./deploy.sh [ --iscsi-on-host ] [ --driver-name=driver_name ] [ --driver-namespace=driver_namespace ]说明
如果升级前--iscsi-on-host打开状态,则
--iscsi-on-host:是必选参数。
--driver-name:升级前版本的驱动名称,如果升级前版本的驱动名称为默认值stor.csi.k8s.io,可以不填此参数。
--driver-namespace:升级前版本绑定的Kubernetes命名空间,如果升级前版本绑定的Kubernetes命名空间为默认值default,此参数可以不填写。
升级后检查:
可以在宿主机启动样例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守护进程移动到宿主机的升级
下列情况使用该方案升级:升级前版本安装时中没设置参数--iscsi-on-host(1.5.1之前版本不能设置该参数),升级后版本设置设置参数--iscsi-on-host。
升级步骤
暂停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
删除多余的配置文件:
kubectl delete cm stor-multipath-conf -n namespace更新驱动镜像:请根据逐台导入镜像的方式或docker私仓导入镜像的方式章节的步骤,导入最新安装包的驱动。
在升级版本的对应文件下修改HBlock相关配置:
修改deploy/csi-plugin-conf/csi-configMap.yaml,确保与升级前版本的配置一致。
修改deploy/csi-plugin-conf/csi-secret.yaml,确保与升级前版本的配置一致。
修改deploy/csi-plugin-conf/csi-secret-decrypt.yaml,确保与升级前版本的配置一致。
在升级版本的/depoly目录下执行下列命令升级:
./deploy.sh --iscsi-on-host [ --driver-name=driver_name ] [ --driver-namespace=driver_namespace ]说明
--iscsi-on-host:是必选参数。
--driver-name:升级前版本的驱动名称,如果升级前版本的驱动名称为默认值stor.csi.k8s.io,可以不填此参数。
--driver-namespace:升级前版本绑定的Kubernetes命名空间,如果升级前版本绑定的Kubernetes命名空间为默认值default,此参数可以不填写。
升级后检查:
进入各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