26.6. raw ブロックデバイスの設定
ローカルのボリュームプロビジョナーを使用すると、raw ブロックデバイスを静的にプロビジョニングできます。この機能はデフォルトでは無効になっており、追加の設定が必要です。
Raw ブロックデバイスを設定するには以下を行います。
全マスターで、
BlockVolume
機能ゲートを有効化します。全マスターでマスター設定ファイルを編集または作成 (デフォルトは /etc/origin/master/master-config.yaml) して、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
以下のように、すべての ConfigMaps に、
kubeletArguments
の機能ゲートアレイにBlockVolume=true
が含まれていることを確認します。node configmap feature-gates setting
kubeletArguments: feature-gates: - RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true,BlockVolume=true
- マスターを再起動します。ノードは、設定の変更後に自動的に再起動されます。これは数分かかる可能性があります。
26.6.1. raw ブロックデバイスの準備
プロビジョナーを起動する前に、Pod が使用できるすべての raw ブロックデバイスを /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
デバイスと、/mnt/local-storage/ の
SELinux
ラベルを変更します。$ 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
Raw ブロックデバイスのストレージクラスを作成します。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: block-devices provisioner: kubernetes.io/no-provisioner volumeBindingMode: WaitForFirstConsumer
プロビジョナーは、このブロックデバイス /dev/dm-36 を使用する準備ができ、PV としてプロビジョニングします。