6.2.4.2. 升级 Red Hat Gluster Storage Registry Pod
必须在客户端计算机上执行以下命令。
以下是为 glusterfs 更新 DaemonSet 的步骤:
执行以下步骤停止 Heketi pod,以防止它接受任何新卷创建或卷删除请求:
执行以下命令访问项目:
# oc project <project_name>例如:
# oc project storage-project执行以下命令以获取
DeploymentConfig:# oc get dc执行以下命令,将 heketi 服务器设置为仅接受来自 local-client 的请求:
# heketi-cli server mode set local-client等待持续操作完成,并执行以下命令来监控是否有持续操作:
# heketi-cli server operations info执行以下命令,将副本数从 1 减少为 0。这会关闭 heketi pod:
# oc scale dc <heketi_dc> --replicas=0执行以下命令来验证 heketi pod 不再存在:
# oc get pods
执行以下命令查找 gluster 的 DaemonSet 名称
# oc get ds执行以下命令删除 DaemonSet:
# oc delete ds <ds-name> --cascade=false在删除旧 DaemonSet 时,使用
--cascade=false选项不会删除 glusterfs_registry pod,而是只删除 DaemonSet。删除旧的 DaemonSet 后,您必须加载新的 DaemonSet。手动删除旧 pod 时,所创建的新 pod 将具有新 DaemonSet 的配置。例如,
# oc delete ds glusterfs-registry --cascade=false daemonset "glusterfs-registry" deleted执行以下命令验证所有旧的 pod 是否都正常运行:
# oc get pods例如,
# oc get pods NAME READY STATUS RESTARTS AGE glusterblock-storage-provisioner-dc-1-ffgs5 1/1 Running 0 3m glusterfs-storage-5thpc 1/1 Running 0 9d glusterfs-storage-hfttr 1/1 Running 0 9d glusterfs-storage-n8rg5 1/1 Running 0 9d heketi-storage-4-9fnvz 2/2 Running 0 8d执行以下命令,以删除旧的 glusterfs 模板。
# oc delete templates glusterfs执行以下命令以注册新的 glusterfs 模板。
# oc create -f /usr/share/ansible/openshift-ansible/roles/openshift_storage_glusterfs/files/glusterfs-template.yml template "glusterfs" created执行以下命令来编辑旧的 glusterfs 模板。
如果模板具有 IMAGE_NAME,请按如下所示更新 glusterfs 模板:例如:
# oc edit template glusterfs - description: Labels which define the daemonset node selector. Must contain at least one label of the format \'glusterfs=<CLUSTER_NAME>-host\' displayName: Daemonset Node Labels name: NODE_LABELS value: '{ "glusterfs": "registry-host" }' - displayName: GlusterFS container image name name: IMAGE_NAME required: true value: registry.redhat.io/rhgs3/rhgs-server-rhel7:v3.11.8 - description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances displayName: GlusterFS cluster name name: CLUSTER_NAME value: registry如果模板包含 IMAGE_NAME 和 IMAGE_VERSION,则按以下方式更新 glusterfs 模板:例如:
# oc edit template glusterfs - description: Labels which define the daemonset node selector. Must contain at least one label of the format \'glusterfs=<CLUSTER_NAME>-host\' displayName: Daemonset Node Labels name: NODE_LABELS value: '{ "glusterfs": "registry-host" }' - displayName: GlusterFS container image name name: IMAGE_NAME required: true value: registry.redhat.io/rhgs3/rhgs-server-rhel7 - description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances - displayName: GlusterFS container image version name: IMAGE_VERSION required: true value: v3.11.8 - displayName: GlusterFS cluster name name: CLUSTER_NAME value: registry注意- 确保 CLUSTER_NAME 变量设置为正确的值
- 如果集群有超过 1000 个卷,请参阅 如何更改 Openshift Container Storage 的默认 PVS 限制 ,并在进行升级前添加必要的参数。
标记具有 Red Hat Gluster Storage pod 的所有 OpenShift Container Platform 节点:
使用以下命令检查是否使用适当的标签标记节点:
# oc get nodes -l glusterfs=registry-host
- name: kernel-modules mountPath: "/usr/lib/modules" readOnly: true
- name: host-rootfs mountPath: "/rootfs"
- name: kernel-modules hostPath: path: "/usr/lib/modules"
- name: host-rootfs hostPath: path: "/"
- displayName: heketi 容器镜像名称:IMAGE_NAME required: true value: registry.redhat.io/rhgs3/rhgs-volmanager-rhel7
displayName: heketi 容器镜像版本名称:IMAGE_VERSION required: true value: v3.11.8
执行以下命令来创建 gluster DaemonSet:
# oc process glusterfs | oc create -f -例如,
# oc process glusterfs | oc create -f - Deamonset “glusterfs-registry” created执行以下命令来标识需要删除的旧 glusterfs_registry pod:
# oc get pods例如,
# oc get pods NAME READY STATUS RESTARTS AGE glusterblock-storage-provisioner-dc-1-ffgs5 1/1 Running 0 3m glusterfs-storage-5thpc 1/1 Running 0 9d glusterfs-storage-hfttr 1/1 Running 0 9d glusterfs-storage-n8rg5 1/1 Running 0 9d heketi-storage-4-9fnvz 2/2 Running 0 8d执行以下命令并确保 brick 不超过 90%:
# df -kh | grep -v ^Filesystem | awk '{if(int($5)>90) print $0}'注意如果 brick 接近 100% 利用率,则这些 brick 的逻辑卷管理器(LVM)激活可能需要很长时间,或者在 pod 或节点重启后可能会卡住。建议关闭该 brick 的利用率或扩展使用逻辑卷(LV)的物理卷。
注意df命令不适用于属于块卷(BHV)的 brick。在 BHV 上,由df命令生成的 brick 的 used 大小是该 Gluster 卷的 blockvolumes 添加的大小,它不是 blockvolumes 中驻留的数据量。如需更多信息,请参阅 Openshift Container Storage 中如何识别块卷和块卷。执行以下命令来删除旧的 glusterfs-registry pod。
glusterfs-registry pod 应该遵循滚动升级。因此,您必须确保新 pod 正在运行,然后才能删除下一个旧的 glusterfs-registry pod。我们支持 OnDelete Strategy DaemonSet 更新策略。使用 OnDelete Strategy 更新策略时,只有在您手动删除旧的 DaemonSet pod 时,才会创建新的 DaemonSet pod。要删除旧的 glusterfs-registry pod,请执行以下命令:
# oc delete pod <gluster_pod>例如,
# oc delete pod glusterfs-registry-4cpcc pod “glusterfs-registry-4cpcc” deleted注意在删除下一个 pod 之前,必须进行自我修复检查:
运行以下命令访问 glusterfs-registry pod 上的 shell:
# oc rsh <gluster_pod_name>运行以下命令检查所有卷的自我修复状态:
# for eachVolume in $(gluster volume list); do gluster volume heal $eachVolume info ; done | grep "Number of entries: [^0]$"
删除 pod 命令将终止旧的 pod 并创建一个新 pod。运行
# oc get pods -w并检查 pod 的 Age,并且 READY 状态应当为 1/1。以下是显示从终止到创建 pod 的终止的状态进度的输出。# oc get pods -w NAME READY STATUS RESTARTS AGE glusterfs-registry-4cpcc 1/1 Terminating 0 3d …
执行以下命令来验证 pod 是否正在运行:
# oc get pods例如,
# oc get pods NAME READY STATUS RESTARTS AGE glusterblock-storage-provisioner-dc-1-ffgs5 1/1 Running 0 3m glusterfs-storage-5thpc 1/1 Running 0 9d glusterfs-storage-hfttr 1/1 Running 0 9d glusterfs-storage-n8rg5 1/1 Running 0 9d heketi-storage-4-9fnvz 2/2 Running 0 8d执行以下命令来验证是否将 pod 升级到最新版本:
# oc rsh <gluster_registry_pod_name> glusterd --version例如:
# oc rsh glusterfs-registry-abmqa glusterd --version glusterfs 6.0# rpm -qa|grep gluster在其中一个 glusterfs-registry pod 上执行以下命令来检查 Red Hat Gluster Storage op-version。
# gluster vol get all cluster.op-version升级 Gluster pod 后,请确保将 Heketi 设置为运营模式:
扩展 DC(部署配置)。
# oc scale dc <heketi_dc> --replicas=1
在任意 pod 中将 cluster.op-version 设置为 70200:
注意在更改 cluster.op-version 前,确保所有 glusterfs-registry pod 都已更新。
# gluster volume set all cluster.op-version 70200执行以下步骤在所有卷上启用 server.tcp-user-timeout。
注意"server.tcp-user-timeout" 选项指定从应用传输的最大时间(以秒为单位)。
它用于检测强制断开连接和死连接(如果意外关闭,防火墙会被提前激活,等等),并使应用程序能够减少整体故障转移时间。
使用以下命令列出 glusterfs pod:
# oc get pods例如:
# oc get pods NAME READY STATUS RESTARTS AGE glusterblock-storage-provisioner-dc-1-ffgs5 1/1 Running 0 3m glusterfs-storage-5thpc 1/1 Running 0 9d glusterfs-storage-hfttr 1/1 Running 0 9d glusterfs-storage-n8rg5 1/1 Running 0 9d heketi-storage-4-9fnvz 2/2 Running 0 8d远程 shell 到 glusterfs-registry pod 中的一个。例如:
# oc rsh glusterfs-registry-g6vd9执行以下命令:
# for eachVolume in `gluster volume list`; do echo $eachVolume; gluster volume set $eachVolume server.tcp-user-timeout 42 ; done例如:
# for eachVolume in `gluster volume list`; do echo $eachVolume; gluster volume set $eachVolume server.tcp-user-timeout 42 ; done volume1 volume set: success volume2 volume set: success
如果 gluster-block-registry-provisoner-pod 已经存在,则通过执行以下命令来删除它:
# oc delete dc <gluster-block-registry-dc>例如:
# oc delete dc glusterblock-registry-provisioner-dc执行以下命令,以删除旧的 glusterblock provisioner 模板。
# oc delete templates glusterblock-provisioner创建 glusterblock provisioner 模板。例如:
# oc create -f /usr/share/ansible/openshift-ansible/roles/openshift_storage_glusterfs/files/glusterblock-provisioner.yml template.template.openshift.io/glusterblock-provisioner created根据 OCP 版本,编辑 glusterblock-provisioner 模板以更改 IMAGE_NAME 和 NAMESPACE。
# oc edit template glusterblock-provisioner - displayName: glusterblock provisioner container image name name: IMAGE_NAME required: true value: registry.redhat.io/rhgs3/rhgs-gluster-block-prov-rhel7:v3.11.8 - description: The namespace in which these resources are being created displayName: glusterblock provisioner namespace name: NAMESPACE required: true value: glusterfs-registry - description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances displayName: GlusterFS cluster name name: CLUSTER_NAME value: registry如果模板包含 IMAGE_NAME 和 IMAGE_VERSION,则按如下所示更新 glusterblock-provisioner 模板。
例如:# oc edit template glusterblock-provisioner - displayName: glusterblock provisioner container image name name: IMAGE_NAME required: true value: registry.redhat.io/rhgs3/rhgs-gluster-block-prov-rhel7 - displayName: glusterblock provisioner container image version name: IMAGE_VERSION required: true value: v3.11.8 - description: The namespace in which these resources are being created displayName: glusterblock provisioner namespace name: NAMESPACE required: true value: glusterfs-registry - description: A unique name to identify which heketi service manages this cluster, useful for running multiple heketi instances displayName: GlusterFS cluster name name: CLUSTER_NAME value: registry
从旧 pod 中删除以下资源
# oc delete clusterroles.authorization.openshift.io glusterblock-provisioner-runner # oc delete serviceaccounts glusterblock-registry-provisioner # oc delete clusterrolebindings.authorization.openshift.io glusterblock-registry-provisioner在运行 oc process 前,请确定正确的
置备程序名称。如果集群中有多个gluster 块置备程序,该名称必须与所有其他置备程序不同。
例如,
-
如果有 2 个或多个置备程序,则名称应该为
gluster.org/glusterblock-<namespace>,使用置备程序部署在的命名空间名称替换 <namespace>。 -
如果只有一个置备程序,在 3.11.8 之前安装,
gluster.org/glusterblock就足够。如果当前使用的名称已经有唯一的命名空间后缀,则重复利用现有名称。
-
如果有 2 个或多个置备程序,则名称应该为
编辑模板后,执行以下命令创建部署配置:
# oc process glusterblock-provisioner -o yaml | oc create -f -例如:
# oc process glusterblock-provisioner -o yaml | oc create -f - clusterrole.authorization.openshift.io/glusterblock-provisioner-runner created serviceaccount/glusterblock-registry-provisioner created clusterrolebinding.authorization.openshift.io/glusterblock-registry-provisioner created deploymentconfig.apps.openshift.io/glusterblock-registry-provisioner-dc createdBrick 多路是一个功能,允许在一个进程中添加多个 brick。这可以减少资源消耗,并允许我们运行超过相同内存消耗的 brick 数。从 Container-Native Storage 3.6 点启用它。在从 Container-Native Storage 3.10 升级到 Red Hat Openshift Container Storage 3.11 的过程中,要打开 brick 多路,请执行以下命令:
要执行到 Gluster pod 中,请执行以下命令以及 rsh 到 gluster pod:
# oc rsh <gluster_pod_name>验证 brick 多路状态:
# gluster v get all all如果被禁用,则执行以下命令以启用 brick 多路:
注意确保所有卷都处于 stop 状态,或者没有在启用了 brick 多路的情况下运行任何 brick。
# gluster volume set all cluster.brick-multiplex on例如:
# oc rsh glusterfs-registry-g6vd9 sh-4.2# gluster volume set all cluster.brick-multiplex on Brick-multiplexing is supported only for container workloads (Independent or Converged mode). Also it is advised to make sure that either all volumes are in stopped state or no bricks are running before this option is modified.Do you still want to continue? (y/n) y volume set: success列出受信存储池中的所有卷。只有在执行卷设置操作时,才需要执行此步骤:
例如:
# gluster volume list heketidbstorage vol_194049d2565d2a4ad78ef0483e04711e ... ...重启所有卷。只有在卷集操作和上一步中执行时才需要执行此步骤:
# gluster vol stop <VOLNAME> # gluster vol start <VOLNAME>
在 Red Hat Openshift Container Storage 中对 S3 兼容对象存储的支持处于技术预览阶段。要启用 S3 兼容对象存储,请参阅 https://access.redhat.com/documentation/en-us/red_hat_openshift_container_storage/3.11/html/operations_guide/s3_object_store。
注意升级 glusterfs registry pod 后,继续执行 第 6.3 节 “启动 Heketi Pod” 中列出的步骤,返回您的 heketi pod,然后执行 第 6.4 节 “升级 Red Hat OpenShift Container Platform 节点上的客户端” 中列出的步骤来升级 Red Hat Openshift Container Platform 节点上的客户端。
使用 gluster 块卷置备的所有存储类必须与集群中的一个置备程序名称完全匹配。要检查在给定
命名空间中引用块置备程序的存储类列表,请运行以下命令:# oc get sc -o custom-columns=NAME:.metadata.name,PROV:.provisioner,RSNS:.parameters.restsecretnamespace | grep 'gluster.org/glusterblock' | grep <namespace>例如:
# oc get sc -o custom-columns=NAME:.metadata.name,PROV:.provisioner,RSNS:.parameters.restsecretnamespace | grep 'gluster.org/glusterblock' | grep infra-storage glusterfs-registry-block gluster.org/glusterblock infra-storage如果每个存储类
置备程序名称,如果它与为那个命名空间配置的块置备程序名称不匹配,则需要更新它。如果块置备程序名称已与配置的置备程序名称匹配,则不需要进行任何其他操作。使用上面生成的列表,并包括必须更新指定名称的所有存储类名称。
对于此列表中的每个存储类,请执行以下操作:# oc get sc -o yaml <storageclass> > storageclass-to-edit.yaml # oc delete sc <storageclass> # sed 's,gluster.org/glusterblock$,gluster.org/glusterblock-<namespace>,' storageclass-to-edit.yaml | oc create -f -例如:
# oc get sc -o yaml glusterfs-registry-block > storageclass-to-edit.yaml # oc delete sc glusterfs-registry-block storageclass.storage.k8s.io "glusterfs-registry-block" deleted # sed 's,gluster.org/glusterblock$,gluster.org/glusterblock-infra-storage,' storageclass-to-edit.yaml | oc create -f - storageclass.storage.k8s.io/glusterfs-registry-block created