数据卷驱逐¶
数据卷迁移和驱逐是 HwameiStor 系统的重要功能,保障 HwameiStor 在生产环境中持续正常运行。 HwameiStor 会将数据卷从一个节点迁移到另一个节点,同时保证数据仍然可用。 当 Kubernetes 节点或者应用 Pod 由于某种原因被驱逐时,系统会自动发现节点或者 Pod 所关联的 HwameiStor 数据卷,并自动将其迁移到其他节点,从而保证被驱逐的 Pod 可以调度到其他节点并正常运行。 此外,运维人员也可以主动迁移数据卷,从而平衡系统资源,保证系统平稳运行。
驱逐节点¶
在 Kubernetes 系统中,可以使用下列命令驱逐节点,将正在该节点上运行的 Pod 移除并迁移到其他节点上。 同时,也将 Pod 使用的 HwameiStor 数据卷从该节点迁移到其他节点,保证 Pod 可以在其他节点上正常运行。
可以使用下列命令查看所关联的 HwameiStor 数据卷是否迁移成功。
输出类似于:
apiVersion: hwameistor.io/v1alpha1
kind: LocalStorageNode
metadata:
creationTimestamp: "2022-10-11T07:41:58Z"
generation: 1
name: k8s-node-1
resourceVersion: "6402198"
uid: c71cc6ac-566a-4e0b-8687-69679b07471f
spec:
hostname: k8s-node-1
storageIP: 10.6.113.22
topogoly:
region: default
zone: default
status:
...
pools:
LocalStorage_PoolHDD:
class: HDD
disks:
- capacityBytes: 17175674880
devPath: /dev/sdb
state: InUse
type: HDD
freeCapacityBytes: 16101933056
freeVolumeCount: 999
name: LocalStorage_PoolHDD
totalCapacityBytes: 17175674880
totalVolumeCount: 1000
type: REGULAR
usedCapacityBytes: 1073741824
usedVolumeCount: 1
volumeCapacityBytesLimit: 17175674880
volumes: # 确保 volumes 为空
state: Ready
同时,可以使用下列命令查看被驱逐节点上是否还有 HwameiStor 的数据卷。
输出类似于:
NAME CAPACITY NODE STATE SYNCED DEVICE AGE
pvc-1427f36b-adc4-4aef-8d83-93c59064d113-957f7g 1073741824 k8s-node-3 Ready true /dev/LocalStorage_PoolHDD-HA/pvc-1427f36b-adc4-4aef-8d83-93c59064d113 20h
pvc-1427f36b-adc4-4aef-8d83-93c59064d113-qlpbmq 1073741824 k8s-node-2 Ready true /dev/LocalStorage_PoolHDD-HA/pvc-1427f36b-adc4-4aef-8d83-93c59064d113 30m
pvc-6ca4c0d4-da10-4e2e-83b2-19cbf5c5e3e4-scrxjb 1073741824 k8s-node-2 Ready true /dev/LocalStorage_PoolHDD/pvc-6ca4c0d4-da10-4e2e-83b2-19cbf5c5e3e4 30m
pvc-f8f017f9-eb09-4fbe-9795-a6e2d6873148-5t782b 1073741824 k8s-node-2 Ready true /dev/LocalStorage_PoolHDD-HA/pvc-f8f017f9-eb09-4fbe-9795-a6e2d6873148 30m
在一些情况下,重启节点时,用户希望仍然保留数据卷在该节点上。可以通过在该节点上添加下列标签实现:
驱逐 Pod¶
当 Kubernetes 节点负载过重时,系统会选择性地驱逐一些 Pod,从而释放一些系统资源,保证其他 Pod 正常运行。 如果被驱逐的 Pod 使用了 HwameiStor 数据卷,系统会捕捉到这个被驱逐的 Pod,自动将相关的 HwameiStor 数据卷迁移到其他节点,从而保证该 Pod 能正常运行。
迁移 Pod¶
运维人员可以主动迁移应用 Pod 和其使用的 HwameiStor 数据卷,从而平衡系统资源,保证系统平稳运行。 可以通过下列两种方式进行主动迁移:
-
方法 1
-
方法 2
$ cat << EOF | kubectl apply -f - apiVersion: hwameistor.io/v1alpha1 kind: LocalVolumeMigrate metadata: name: migrate-pvc-6ca4c0d4-da10-4e2e-83b2-19cbf5c5e3e4 spec: sourceNode: k8s-node-1 targetNodesSuggested: - k8s-node-2 - k8s-node-3 volumeName: pvc-6ca4c0d4-da10-4e2e-83b2-19cbf5c5e3e4 migrateAllVols: true EOF $ kubectl delete pod mysql-pod