7.3. 볼륨을 사용하여 컨테이너 데이터 유지
컨테이너의 파일은 임시 파일입니다. 컨테이너가 충돌하거나 중지되면 데이터가 손실됩니다. 볼륨을 사용하여 Pod의 컨테이너에서 사용하는 데이터를 유지할 수 있습니다. 볼륨은 Pod 수명 동안 데이터가 저장되는 Pod의 컨테이너에 액세스할 수 있는 디렉터리입니다.
7.3.1. 볼륨 이해
볼륨은 Pod 및 해당 컨테이너에서 사용할 수 있는 마운트된 파일 시스템으로, 다수의 호스트-로컬 또는 네트워크 연결 스토리지 끝점에서 지원할 수 있습니다. 컨테이너는 기본적으로 영구적이 아니며 재시작 시 저장된 콘텐츠가 지워집니다.
볼륨의 파일 시스템에 오류가 없는지 확인한 후 오류가 있고 가능한 경우 오류를 복구하기 위해 OpenShift Container Platform에서는 mount
유틸리티 이전에 fsck
유틸리티를 호출합니다. 이러한 작업은 볼륨을 추가하거나 기존 볼륨을 업데이트할 때 수행됩니다.
가장 간단한 볼륨 유형은 단일 머신의 임시 디렉터리인 emptyDir
입니다. 관리자는 Pod에 자동으로 연결된 영구 볼륨을 요청할 수도 있습니다.
클러스터 관리자가 FSGroup 매개변수를 활성화하면 Pod의 FSGroup을 기반으로 한 할당량에 따라 emptyDir
볼륨 스토리지가 제한될 수 있습니다.
7.3.2. OpenShift Container Platform CLI를 사용하여 볼륨 작업
CLI 명령 oc set volume
을 사용하여 복제 컨트롤러 또는 배포 구성과 같은 Pod 템플릿이 있는 오브젝트의 볼륨 및 볼륨 마운트를 추가하고 제거할 수 있습니다. Pod의 볼륨 또는 Pod 템플릿이 있는 오브젝트도 나열할 수 있습니다.
oc set volume
명령에서는 다음과 같은 일반 구문을 사용합니다.
$ oc set volume <object_selection> <operation> <mandatory_parameters> <options>
- 오브젝트 선택
-
oc set volume
명령에서object_selection
매개변수에 다음 중 하나를 지정합니다.
구문 | 설명 | 예 |
---|---|---|
|
유형 |
|
|
유형 |
|
|
지정된 라벨 선택기와 일치하는 유형 |
|
|
유형 |
|
| 리소스를 편집하는 데 사용할 파일 이름, 디렉터리 또는 URL입니다. |
|
- 작업
-
oc set volume
명령의operation
매개변수에--add
또는--remove
를 지정합니다. - 필수 매개변수
- 모든 필수 매개변수는 선택한 작업에 한정되며 뒤에 나오는 섹션에서 설명합니다.
- 옵션
- 모든 옵션은 선택한 작업에 한정되며 뒤에 나오는 섹션에서 설명합니다.
7.3.3. Pod의 볼륨 및 볼륨 마운트 나열
Pod 또는 Pod 템플릿의 볼륨 및 볼륨 마운트를 나열할 수 있습니다.
프로세스
볼륨 목록을 표시하려면 다음을 수행합니다.
$ oc set volume <object_type>/<name> [options]
볼륨에서 지원하는 옵션을 나열합니다.
옵션 | 설명 | 기본 |
---|---|---|
| 볼륨 이름입니다. | |
|
이름으로 컨테이너를 선택합니다. 문자와 일치하는 와일드카드 |
|
예를 들면 다음과 같습니다.
Pod p1에 대한 모든 볼륨을 나열하려면 다음을 실행합니다.
$ oc set volume pod/p1
모든 배포 구성에 정의된 볼륨 v1을 나열하려면 다음을 실행합니다.
$ oc set volume dc --all --name=v1
7.3.4. Pod에 볼륨 추가
Pod에 볼륨 및 볼륨 마운트를 추가할 수 있습니다.
프로세스
볼륨, 볼륨 마운트 또는 둘 다를 Pod 템플릿에 추가하려면 다음을 실행합니다.
$ oc set volume <object_type>/<name> --add [options]
옵션 | 설명 | 기본 |
---|---|---|
| 볼륨 이름입니다. | 지정하지 않으면 자동으로 생성됩니다. |
|
볼륨 소스의 이름입니다. 지원되는 값은 |
|
|
이름으로 컨테이너를 선택합니다. 문자와 일치하는 와일드카드 |
|
|
선택한 컨테이너 내부의 마운트 경로입니다. 컨테이너 루트, | |
|
호스트 경로입니다. | |
|
보안의 이름입니다. | |
|
구성 맵의 이름입니다. | |
|
영구 볼륨 클레임의 이름입니다. | |
|
JSON 문자열로 된 볼륨 소스 세부 정보입니다. 필요한 볼륨 소스를 | |
|
수정된 오브젝트를 서버에서 업데이트하는 대신 표시합니다. 지원되는 값은 | |
| 지정된 버전으로 수정된 오브젝트를 출력합니다. |
|
예를 들면 다음과 같습니다.
레지스트리
DeploymentConfig
오브젝트에 새 볼륨 소스 emptyDir을 추가하려면 다음을 실행합니다.$ oc set volume dc/registry --add
작은 정보다음 YAML을 적용하여 볼륨을 추가할 수도 있습니다.
예 7.1. 추가된 볼륨이 있는 배포 구성 샘플
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: registry namespace: registry spec: replicas: 3 selector: app: httpd template: metadata: labels: app: httpd spec: volumes: 1 - name: volume-pppsw emptyDir: {} containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP
- 1
- 볼륨 소스 emptyDir 을 추가합니다.
복제 컨트롤러 r1에 대해 보안 secret1을 사용하여 볼륨 v1을 추가하고 /data:의 컨테이너 내부에 마운트하려면 다음을 실행합니다.
$ oc set volume rc/r1 --add --name=v1 --type=secret --secret-name='secret1' --mount-path=/data
작은 정보다음 YAML을 적용하여 볼륨을 추가할 수도 있습니다.
예 7.2. 볼륨 및 시크릿이 추가된 샘플 복제 컨트롤러
kind: ReplicationController apiVersion: v1 metadata: name: example-1 namespace: example spec: replicas: 0 selector: app: httpd deployment: example-1 deploymentconfig: example template: metadata: creationTimestamp: null labels: app: httpd deployment: example-1 deploymentconfig: example spec: volumes: 1 - name: v1 secret: secretName: secret1 defaultMode: 420 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest volumeMounts: 2 - name: v1 mountPath: /data
클레임 이름이 pvc1인 기존 영구 볼륨 v1을 디스크의 배포 구성 dc.json에 추가하려면 /data의 컨테이너 c1에 볼륨을 마운트하고 서버에서
DeploymentConfig
오브젝트를 업데이트합니다.$ oc set volume -f dc.json --add --name=v1 --type=persistentVolumeClaim \ --claim-name=pvc1 --mount-path=/data --containers=c1
작은 정보다음 YAML을 적용하여 볼륨을 추가할 수도 있습니다.
예 7.3. 영구 볼륨이 추가된 샘플 배포 구성
kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example namespace: example spec: replicas: 3 selector: app: httpd template: metadata: labels: app: httpd spec: volumes: - name: volume-pppsw emptyDir: {} - name: v1 1 persistentVolumeClaim: claimName: pvc1 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP volumeMounts: 2 - name: v1 mountPath: /data
모든 복제 컨트롤러에서 수정 버전이 5125c45f9f563인 Git 리포지토리 https://github.com/namespace1/project1을 기반으로 볼륨 v1을 추가하려면 다음을 실행합니다.
$ oc set volume rc --all --add --name=v1 \ --source='{"gitRepo": { "repository": "https://github.com/namespace1/project1", "revision": "5125c45f9f563" }}'
7.3.5. Pod의 볼륨 및 볼륨 마운트 업데이트
Pod에서 볼륨 및 볼륨 마운트를 수정할 수 있습니다.
프로세스
--overwrite
옵션을 사용하여 기존 볼륨을 업데이트합니다.
$ oc set volume <object_type>/<name> --add --overwrite [options]
예를 들면 다음과 같습니다.
복제 컨트롤러 r1의 기존 볼륨 v1을 기존 영구 볼륨 클레임 pvc1로 교체하려면 다음을 실행합니다.
$ oc set volume rc/r1 --add --overwrite --name=v1 --type=persistentVolumeClaim --claim-name=pvc1
작은 정보다음 YAML을 적용하여 볼륨을 교체할 수 있습니다.
예 7.4.
pvc1
이라는 영구 볼륨 클레임이 있는 샘플 복제 컨트롤러kind: ReplicationController apiVersion: v1 metadata: name: example-1 namespace: example spec: replicas: 0 selector: app: httpd deployment: example-1 deploymentconfig: example template: metadata: labels: app: httpd deployment: example-1 deploymentconfig: example spec: volumes: - name: v1 1 persistentVolumeClaim: claimName: pvc1 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP volumeMounts: - name: v1 mountPath: /data
- 1
- 영구 볼륨 클레임을
pvc1
로 설정합니다.
DeploymentConfig
오브젝트 d1 마운트 옵션을 볼륨 v1의 /opt로 변경하려면 다음을 실행합니다.$ oc set volume dc/d1 --add --overwrite --name=v1 --mount-path=/opt
작은 정보다음 YAML을 적용하여 마운트 지점을 변경할 수도 있습니다.
예 7.5. 마운트 지점을 선택하도록 설정된 샘플 배포
구성입니다
.kind: DeploymentConfig apiVersion: apps.openshift.io/v1 metadata: name: example namespace: example spec: replicas: 3 selector: app: httpd template: metadata: labels: app: httpd spec: volumes: - name: volume-pppsw emptyDir: {} - name: v2 persistentVolumeClaim: claimName: pvc1 - name: v1 persistentVolumeClaim: claimName: pvc1 containers: - name: httpd image: >- image-registry.openshift-image-registry.svc:5000/openshift/httpd:latest ports: - containerPort: 8080 protocol: TCP volumeMounts: 1 - name: v1 mountPath: /opt
- 1
- 마운트 지점을
/opt
로 설정합니다.
7.3.6. Pod에서 볼륨 및 볼륨 마운트 제거
Pod에서 볼륨 또는 볼륨 마운트를 제거할 수 있습니다.
프로세스
Pod 템플릿에서 볼륨을 제거하려면 다음을 수행합니다.
$ oc set volume <object_type>/<name> --remove [options]
옵션 | 설명 | 기본 |
---|---|---|
| 볼륨 이름입니다. | |
|
이름으로 컨테이너를 선택합니다. 문자와 일치하는 와일드카드 |
|
| 한 번에 여러 개의 볼륨을 제거할 것임을 나타냅니다. | |
|
수정된 오브젝트를 서버에서 업데이트하는 대신 표시합니다. 지원되는 값은 | |
| 지정된 버전으로 수정된 오브젝트를 출력합니다. |
|
예를 들면 다음과 같습니다.
DeploymentConfig
오브젝트 d1에서 볼륨 v1을 제거하려면 다음을 실행합니다.$ oc set volume dc/d1 --remove --name=v1
DeploymentConfig
오브젝트 d1의 컨테이너에서 참조하지 않는 경우 d1의 컨테이너 c1에서 볼륨 v1을 마운트 해제하고 볼륨 v1을 제거하려면 다음을 실행합니다.$ oc set volume dc/d1 --remove --name=v1 --containers=c1
복제 컨트롤러 r1의 모든 볼륨을 제거하려면 다음을 실행합니다.
$ oc set volume rc/r1 --remove --confirm
7.3.7. Pod에서 다양한 용도의 볼륨 구성
볼륨의 루트 대신 볼륨 내부에 subPath
값을 지정하는 volumeMounts.subPath
속성을 사용하여 단일 Pod에서 다양한 용도로 하나의 볼륨을 공유하도록 볼륨을 구성할 수 있습니다.
예약된 기존 Pod에 subPath
매개변수를 추가할 수 없습니다.
프로세스
볼륨의 파일 목록을 보려면
oc rsh
명령을 실행합니다.$ oc rsh <pod>
출력 예
sh-4.2$ ls /path/to/volume/subpath/mount example_file1 example_file2 example_file3
subPath
를 지정합니다.subPath
매개변수가 포함된Pod
사양의 예apiVersion: v1 kind: Pod metadata: name: my-site spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: mysql image: mysql volumeMounts: - mountPath: /var/lib/mysql name: site-data subPath: mysql 1 securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] - name: php image: php volumeMounts: - mountPath: /var/www/html name: site-data subPath: html 2 securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] volumes: - name: site-data persistentVolumeClaim: claimName: my-site-data