26.6. 配置原始块设备
可以使用本地卷置备程序静态置备原始块设备。此功能默认为禁用,需要其他配置。
配置原始块设备:
在所有 master 上启用
BlockVolume
功能门。在所有 master(默认为/etc/origin/master/master-config.yaml )上编辑或创建 master 配置文件,并在apiServerArguments
和controllerArguments
部分中添加BlockVolume=true
:apiServerArguments: feature-gates: - BlockVolume=true ... controllerArguments: feature-gates: - BlockVolume=true ...
通过编辑节点配置 ConfigMap,在所有节点中启用功能门:
$ oc edit configmap node-config-compute --namespace openshift-node $ oc edit configmap node-config-master --namespace openshift-node $ oc edit configmap node-config-infra --namespace openshift-node
确保所有 ConfigMap 都包含
kubeletArguments
的功能门数组中的BlockVolume=true
,例如:节点 configmap 功能门设置
kubeletArguments: feature-gates: - RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true,BlockVolume=true
- 重启 master。节点在配置更改后自动重启。这可能需要几分钟时间。
26.6.1. 准备原始块设备
在启动置备程序前,请链接 pod 可用于 /mnt/local-storage/<storage class> 目录结构的所有原始块设备。例如,使目录 /dev/dm-36 可用:
在 /mnt/local-storage 中为设备的存储类创建一个目录:
$ mkdir -p /mnt/local-storage/block-devices
创建指向该设备的符号链接:
$ ln -s /dev/dm-36 dm-uuid-LVM-1234
注意为了避免可能的名称冲突,请将相同的名称用于符号链接,以及 /dev/disk/by-uuid 或 /dev/disk/by-id 目录的链接。
创建或更新配置置备程序的 ConfigMap:
apiVersion: v1 kind: ConfigMap metadata: name: local-volume-config data: storageClassMap: | block-devices: 1 hostDir: /mnt/local-storage/block-devices 2 mountDir: /mnt/local-storage/block-devices 3
更改设备的
SELinux
标签和 /mnt/local-storage/ :$ chcon -R unconfined_u:object_r:svirt_sandbox_file_t:s0 /mnt/local-storage/ $ chcon unconfined_u:object_r:svirt_sandbox_file_t:s0 /dev/dm-36
为原始块设备创建存储类:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: block-devices provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
块设备 /dev/dm-36 现在可供置备程序使用,并置备为 PV。