Red Hat Training

A Red Hat training course is available for OpenShift Container Platform

26.6. 원시 블록 장치 구성

로컬 볼륨 프로비저너를 사용하여 원시 블록 장치를 정적으로 프로비저닝할 수 있습니다. 이 기능은 기본적으로 비활성화되어 있으며 추가 구성이 필요합니다.

원시 블록 장치를 구성하려면 다음을 수행합니다.

  1. 모든 마스터에서 BlockVolume 기능 게이트를 활성화합니다. 모든 마스터(기본적으로/etc/origin/master/master-config.yaml )에서 마스터 구성 파일을 편집하거나 생성한 후 apiServerArguments 및 controllerArguments 섹션에 BlockVolume=true 를 추가합니다.

    apiServerArguments:
       feature-gates:
       - BlockVolume=true
    ...
    
     controllerArguments:
       feature-gates:
       - BlockVolume=true
    ...
  2. 노드 구성 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
  3. 예를 들면 모든 ConfigMap에 kubeletArguments 의 기능 게이트 배열에 BlockVolume=true 가 포함되어 있는지 확인합니다.

    노드 configmap feature-gates 설정

    kubeletArguments:
       feature-gates:
       - RotateKubeletClientCertificate=true,RotateKubeletServerCertificate=true,BlockVolume=true

  4. 마스터를 다시 시작합니다. 구성이 변경되면 노드가 자동으로 다시 시작됩니다. 이 작업은 몇 분 정도 걸릴 수 있습니다.

26.6.1. 원시 블록 장치 준비

프로비저너를 시작하기 전에 Pod에서 사용할 수 있는 모든 원시 블록 장치를 /mnt/local-storage/<storage 클래스> 디렉터리 구조에 연결합니다. 예를 들어 /dev/dm-36 디렉토리를 사용할 수 있도록 하려면 다음을 수행합니다.

  1. /mnt/local-storage 에 장치 스토리지 클래스의 디렉토리를 생성합니다.

    $ mkdir -p /mnt/local-storage/block-devices
  2. 장치를 가리키는 심볼릭 링크를 만듭니다.

    $ ln -s /dev/dm-36 dm-uuid-LVM-1234
    참고

    가능한 이름 충돌을 방지하려면 심볼릭 링크의 이름과 /dev/disk/ by-uuid 또는 /dev/disk/by- id 디렉토리의 링크와 동일한 이름을 사용합니다.

  3. 프로비저너를 구성하는 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
    1
    StorageClass의 이름입니다.
    2
    호스트의 디렉터리 경로입니다. /mnt/local-storage 의 하위 디렉터리여야 합니다.
    3
    프로비저너 Pod의 디렉터리 경로입니다. 호스트에서 사용하는 디렉터리 구조를 사용하는 경우 mountDir 매개변수를 생략합니다.
  4. 장치의 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
  5. 원시 블록 장치에 대한 스토리지 클래스를 생성합니다.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
     name: block-devices
    provisioner: kubernetes.io/no-provisioner
    volumeBindingMode: WaitForFirstConsumer

프로비저너에서 블록 장치 /dev/dm-36 을 사용할 준비가 되었으며 PV로 프로비저닝되었습니다.