3.6. FlexVolume을 사용하는 영구 스토리지

OpenShift Container Platform은 실행 가능한 모델을 드라이버와 인터페이스에 사용하는 out-of-tree 플러그인인 FlexVolume을 지원합니다.

플러그인이 기본 제공되지 않는 백엔드의 스토리지를 사용하려면, FlexVolume 드라이버를 통해 OpenShift Container Platform을 확장하고 애플리케이션에 영구 스토리지를 제공할 수 있습니다.

Pod는 flexvolume in-tree 플러그인을 통해 FlexVolume 드라이버와 상호 작용합니다.

추가 리소스

3.6.1. FlexVolume 드라이버 정보

FlexVolume 드라이버는 클러스터의 모든 노드의 올바르게 정의된 디렉터리에 위치하는 실행 파일입니다. flexVolume을 갖는 PersistentVolume 오브젝트가 소스로 표시되는 볼륨을 마운트하거나 마운트 해제해야 할 때마다 OpenShift Container Platform이 FlexVolume 드라이버를 호출합니다.

중요

FlexVolume용 OpenShift Container Platform에서는 연결 및 분리 작업이 지원되지 않습니다.

3.6.2. FlexVolume 드라이버 예

FlexVolume 드라이버의 첫 번째 명령줄 인수는 항상 작업 이름입니다. 다른 매개 변수는 각 작업에 따라 다릅니다. 대부분의 작업에서는 JSON(JavaScript Object Notation) 문자열을 매개변수로 사용합니다. 이 매개변수는 전체 JSON 문자열이며 JSON 데이터가 있는 파일 이름은 아닙니다.

FlexVolume 드라이버에는 다음이 포함됩니다.

  • 모든 flexVolume.options.
  • fsTypereadwrite와 같은 kubernetes.io/ 접두사가 붙은 flexVolume의 일부 옵션.
  • 설정된 경우, kubernetes.io/secret/이 접두사로 사용되는 참조된 시크릿의 콘텐츠

FlexVolume 드라이버 JSON 입력 예

{
	"fooServer": "192.168.0.1:1234", 1
        "fooVolumeName": "bar",
	"kubernetes.io/fsType": "ext4", 2
	"kubernetes.io/readwrite": "ro", 3
	"kubernetes.io/secret/<key name>": "<key value>", 4
	"kubernetes.io/secret/<another key name>": "<another key value>",
}

1
flexVolume.options의 모든 옵션.
2
flexVolume.fsType의 값.
3
flexVolume.readOnly에 따른 Ro/rw.
4
flexVolume.secretRef에서 참조하는 시크릿의 모든 키 및 해당 값.

OpenShift Container Platform은 드라이버의 표준 출력에서 JSON 데이터를 예상합니다. 지정하지 않으면, 출력이 작업 결과를 설명합니다.

FlexVolume 드라이버 기본 출력 예

{
	"status": "<Success/Failure/Not supported>",
	"message": "<Reason for success/failure>"
}

드라이버의 종료 코드는 성공의 경우 0이고 오류의 경우 1이어야 합니다.

작업은 idempotent여야 합니다. 즉, 이미 마운트된 볼륨의 마운트의 경우 작업이 성공적으로 수행되어야 합니다.

3.6.3. FlexVolume 드라이버 설치

OpenShift Container Platform 확장에 사용되는 FlexVolume 드라이버는 노드에서만 실행됩니다. FlexVolumes를 구현하려면 호출할 작업 목록 및 설치 경로만 있으면 됩니다.

사전 요구 사항

  • FlexVolume 드라이버는 다음 작업을 구현해야 합니다.

    init

    드라이버를 초기화합니다. 이는 모든 노드를 초기화하는 동안 호출됩니다.

    • 인수: 없음
    • 실행 위치: 노드
    • 예상 출력: 기본 JSON
    Mount

    디렉터리에 볼륨을 마운트합니다. 여기에는 장치를 검색한 다음 장치를 마운트하는 등 볼륨을 마운트하는 데 필요한 모든 항목이 포함됩니다.

    • 인수: <mount-dir> <json>
    • 실행 위치: 노드
    • 예상 출력: 기본 JSON
    unmount

    디렉터리에서 볼륨의 마운트를 해제합니다. 여기에는 마운트 해제 후 볼륨을 정리하는 데 필요한 모든 항목이 포함됩니다.

    • 인수: <mount-dir>
    • 실행 위치: 노드
    • 예상 출력: 기본 JSON
    mountdevice
    개별 Pod가 마운트를 바인딩할 수 있는 디렉터리에 볼륨의 장치를 마운트합니다.

이 호출은 FlexVolume 사양에 지정된 "시크릿"을 전달하지 않습니다. 드라이버에 시크릿이 필요한 경우 이 호출을 구현하지 마십시오.

  • 인수: <mount-dir> <json>
  • 실행 위치: 노드
  • 예상 출력: 기본 JSON

    unmountdevice
    디렉터리에서 볼륨의 장치를 마운트 해제합니다.
  • 인수: <mount-dir>
  • 실행 위치: 노드
  • 예상 출력: 기본 JSON

    • 다른 모든 작업은 {"status": "Not supported"}1의 종료 코드와 함께 JSON을 반환해야 합니다.

절차

FlexVolume 드라이버를 설치하려면 다음을 수행합니다.

  1. 실행 가능한 파일이 클러스터의 모든 노드에 있는지 확인합니다.
  2. 볼륨 플러그인 경로(/etc/kubernetes/kubelet-plugins/volume/exec/<vendor>~<driver>/<driver>)에 실행 가능 파일을 배치합니다.

예를 들어, foo 스토리지용 FlexVolume 드라이버를 설치하려면 실행 파일을 /etc/kubernetes/kubelet-plugins/volume/exec/openshift.com~foo/foo에 배치합니다.

3.6.4. FlexVolume 드라이버를 사용한 스토리지 사용

OpenShift Container Platform의 각 PersistentVolume 오브젝트는 볼륨과 같이 스토리지 백엔드에서 1개의 스토리지 자산을 나타냅니다.

절차

  • PersistentVolume 오브젝트를 사용하여 설치된 스토리지를 참조합니다.

FlexVolume 드라이버를 사용한 영구 볼륨 오브젝트 정의 예

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001 1
spec:
  capacity:
    storage: 1Gi 2
  accessModes:
    - ReadWriteOnce
  flexVolume:
    driver: openshift.com/foo 3
    fsType: "ext4" 4
    secretRef: foo-secret 5
    readOnly: true 6
    options: 7
      fooServer: 192.168.0.1:1234
      fooVolumeName: bar

1
볼륨의 이름입니다. 영구 볼륨 클레임을 통해 또는 Pod에서 식별되는 방법입니다. 이 이름은 백엔드 스토리지의 볼륨 이름과 다를 수 있습니다.
2
이 볼륨에 할당된 스토리지의 용량입니다.
3
드라이버의 이름입니다. 이 필드는 필수입니다.
4
볼륨에 존재하는 파일 시스템입니다. 이 필드는 선택 사항입니다.
5
시크릿에 대한 참조입니다. 이 시크릿의 키와 값은 호출 시 FlexVolume 드라이버에 제공됩니다. 이 필드는 선택 사항입니다.
6
읽기 전용 플래그입니다. 이 필드는 선택 사항입니다.
7
FlexVolume 드라이버에 대한 추가 옵션입니다. options 필드에 있는 사용자가 지정한 플래그 외에도 다음 플래그도 실행 파일에 전달됩니다.
"fsType":"<FS type>",
"readwrite":"<rw>",
"secret/key1":"<secret1>"
...
"secret/keyN":"<secretN>"
참고

시크릿은 호출을 마운트하거나 마운트 해제하기 위해서만 전달됩니다.