27.12.2. FlexVolume 드라이버
FlexVolume 드라이버는 마스터와 노드 모두 클러스터의 모든 머신에 있는 잘 정의된 디렉터리에 있는 실행 파일입니다. flexVolume
을 소스로 사용하여 a PersistentVolume
에서 표시하는 볼륨을 연결, 분리, 마운트 또는 마운트해야 할 때마다 OpenShift Container Platform은 FlexVolume 드라이버를 호출합니다.
드라이버의 첫 번째 명령줄 인수는 항상 작업 이름입니다. 다른 매개 변수는 각 작업에 따라 다릅니다. 대부분의 작업에서는 JSON(JavaScript Object Notation) 문자열을 매개변수로 사용합니다. 이 매개변수는 전체 JSON 문자열이며 JSON 데이터가 있는 파일 이름은 아닙니다.
FlexVolume 드라이버에는 다음이 포함됩니다.
-
모든
flexVolume.options
. -
fsType
및readwrite
와 같은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>", }
OpenShift Container Platform은 드라이버의 표준 출력에서 JSON 데이터를 예상합니다. 지정하지 않으면, 출력이 작업 결과를 설명합니다.
FlexVolume 드라이버 기본 출력
{ "status": "<Success/Failure/Not supported>", "message": "<Reason for success/failure>" }
드라이버의 종료 코드는 성공의 경우 0
이고 오류의 경우 1
이어야 합니다.
작업은 멱등이어야 합니다. 즉, 이미 연결된 볼륨의 첨부 또는 이미 마운트된 볼륨의 마운팅으로 인해 작업이 성공적으로 수행되어야 합니다.
FlexVolume 드라이버는 다음 두 가지 모드로 작동할 수 있습니다.
attach/detach
작업은 OpenShift Container Platform 마스터에서 노드에 볼륨을 연결하고 노드에서 볼륨을 분리하는 데 사용됩니다. 이는 노드가 어떠한 이유로도 응답하지 않을 때 유용합니다. 그런 다음 마스터는 노드의 모든 포드를 종료하고 해당 포드에서 모든 볼륨을 분리한 다음, 원래 노드에 연결할 수 없는 상태에서 애플리케이션을 다시 시작하도록 다른 노드에 볼륨을 연결할 수 있습니다.
일부 스토리지 백엔드가 다른 시스템에서 볼륨의 마스터 시작 분리를 지원하는 것은 아닙니다.
27.12.2.1. 마스터 시작 attach/detach가 있는 FlexVolume 드라이버
마스터 제어 연결/분리를 지원하는 FlexVolume 드라이버는 다음 작업을 구현해야 합니다.
init
드라이버를 초기화합니다. 이는 마스터와 노드를 초기화하는 동안 호출됩니다.
- 인수: 없음
- 실행 위치: master, node
- 예상 출력: 기본 JSON
getvolumename
볼륨의 고유 이름을 반환합니다. 후속
분리
호출에서<volume-name>
으로 사용되므로 이 이름은 모든 마스터 및 노드 간에 일관성을 유지해야 합니다.<volume-name>
의 모든/
문자는 자동으로~
로 바뀝니다.-
인수:
<json>
- 실행 위치: master, node
예상 출력: 기본 JSON +
volumeName
:{ "status": "Success", "message": "", "volumeName": "foo-volume-bar" 1 }
- 1
- 스토리지 백엔드
foo
의 볼륨의 고유 이름입니다.
-
인수:
attach
JSON으로 표시된 볼륨을 지정된 노드에 연결합니다. 이 작업은 알려진 경우 노드의 장치 이름을 반환해야 합니다(실행 전에 스토리지 백엔드에서 할당한 경우). 장치를 알 수 없는 경우 이후
waitforattach
작업을 통해 노드에서 장치를 찾아야 합니다.-
인수:
<json>
<node-name>
- 실행 위치: master
예상 출력: 알려진 경우 기본 JSON +
장치
:{ "status": "Success", "message": "", "device": "/dev/xvda" 1 }
- 1
- 알려진 경우 노드의 장치 이름입니다.
-
인수:
waitforattach
볼륨이 노드에 완전히 연결되고 해당 장치가 표시될 때까지 기다립니다. 이전
연결
작업이<device-name>
을 반환한 경우 입력 매개 변수로 제공됩니다. 그렇지 않으면<device-name>
이 비어 있으며 작업에서 노드에서 장치를 찾아야 합니다.-
인수:
<device-name>
<json>
- 실행 위치: 노드
예상 출력: 기본 JSON +
장치
{ "status": "Success", "message": "", "device": "/dev/xvda" 1 }
- 1
- 노드의 장치 이름입니다.
-
인수:
분리
노드에서 지정된 볼륨을 분리합니다.
<volume-name>
은getvolumename
작업에서 반환한 장치의 이름입니다.<volume-name>
의 모든/
문자는 자동으로~
로 바뀝니다.-
인수:
<volume-name>
<node-name>
- 실행 위치: master
- 예상 출력: 기본 JSON
-
인수:
isattached
볼륨이 노드에 연결되어 있는지 확인합니다.
-
인수:
<json>
<node-name>
- 실행 위치: master
예상 출력: 기본 JSON +
연결
{ "status": "Success", "message": "", "attached": true 1 }
- 1
- 노드에 볼륨 연결 상태입니다.
-
인수:
mountdevice
볼륨의 장치를 디렉터리에 마운트합니다.
<device-name>
은 이전waitforattach
작업에서 반환한 장치의 이름입니다.-
인수:
<mount-dir>
<device-name>
<json>
- 실행 위치: 노드
- 예상 출력: 기본 JSON
-
인수:
unmountdevice
디렉터리에서 볼륨의 장치를 마운트 해제합니다.
-
인수:
<mount-dir>
- 실행 위치: 노드
-
인수:
다른 모든 작업은 {"status":를 사용하여 JSON을 반환해야 합니다: "지원되지 않음"}
코드 1
을 종료합니다.
마스터 시작 연결/분리 작업은 기본적으로 활성화됩니다. 활성화하지 않으면 볼륨을 연결하거나 분리해야 하는 노드에 의해 attach/detach 작업이 시작됩니다. FlexVolume 드라이버 호출의 모든 매개변수와 구문은 두 경우 모두 동일합니다.