6.3. 볼륨을 사용하여 컨테이너 데이터 유지


컨테이너의 파일은 임시 파일입니다. 컨테이너가 충돌하거나 중지되면 데이터가 손실됩니다. 볼륨을 사용하여 Pod의 컨테이너에서 사용하는 데이터를 유지할 수 있습니다. 볼륨은 Pod 수명 동안 데이터가 저장되는 Pod의 컨테이너에 액세스할 수 있는 디렉터리입니다.

6.3.1. 볼륨 이해

볼륨은 Pod 및 해당 컨테이너에서 사용할 수 있는 마운트된 파일 시스템으로, 다수의 호스트-로컬 또는 네트워크 연결 스토리지 끝점에서 지원할 수 있습니다. 컨테이너는 기본적으로 영구적이 아니며 재시작 시 저장된 콘텐츠가 지워집니다.

볼륨의 파일 시스템에 오류가 없는지 확인한 후 오류가 있고 가능한 경우 오류를 복구하기 위해 OpenShift Container Platform에서는 mount 유틸리티 이전에 fsck 유틸리티를 호출합니다. 이러한 작업은 볼륨을 추가하거나 기존 볼륨을 업데이트할 때 수행됩니다.

가장 간단한 볼륨 유형은 단일 머신의 임시 디렉터리인 emptyDir입니다. 관리자는 Pod에 자동으로 연결된 영구 볼륨을 요청할 수도 있습니다.

참고

클러스터 관리자가 FSGroup 매개변수를 활성화하면 Pod의 FSGroup을 기반으로 한 할당량에 따라 emptyDir 볼륨 스토리지가 제한될 수 있습니다.

6.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 매개변수에 다음 중 하나를 지정합니다.
표 6.1. 오브젝트 선택
구문설명

<object_type> <name>

유형 <object_type><name>을 선택합니다.

deploymentConfig registry

<object_type>/<name>

유형 <object_type><name>을 선택합니다.

deploymentConfig/registry

<object_type>--selector=<object_label_selector>

지정된 라벨 선택기와 일치하는 유형 <object_type>의 리소스를 선택합니다.

deploymentConfig--selector="name=registry"

<object_type> --all

유형 <object_type>의 모든 리소스를 선택합니다.

deploymentConfig --all

-f 또는 --filename=<file_name>

리소스를 편집하는 데 사용할 파일 이름, 디렉터리 또는 URL입니다.

-f registry-deployment-config.json

작업
oc set volume 명령의 operation 매개변수에 --add 또는 --remove를 지정합니다.
필수 매개변수
모든 필수 매개변수는 선택한 작업에 한정되며 뒤에 나오는 섹션에서 설명합니다.
옵션
모든 옵션은 선택한 작업에 한정되며 뒤에 나오는 섹션에서 설명합니다.

6.3.3. Pod의 볼륨 및 볼륨 마운트 나열

Pod 또는 Pod 템플릿의 볼륨 및 볼륨 마운트를 나열할 수 있습니다.

프로세스

볼륨 목록을 표시하려면 다음을 수행합니다.

$ oc set volume <object_type>/<name> [options]

볼륨에서 지원하는 옵션을 나열합니다.

옵션설명기본

--name

볼륨 이름입니다.

 

-c, --containers

이름으로 컨테이너를 선택합니다. 문자와 일치하는 와일드카드 '*'를 사용할 수도 있습니다.

'*'

예를 들면 다음과 같습니다.

  • Pod p1에 대한 모든 볼륨을 나열하려면 다음을 실행합니다.

    $ oc set volume pod/p1
  • 모든 배포 구성에 정의된 볼륨 v1을 나열하려면 다음을 실행합니다.

    $ oc set volume dc --all --name=v1

6.3.4. Pod에 볼륨 추가

Pod에 볼륨 및 볼륨 마운트를 추가할 수 있습니다.

프로세스

볼륨, 볼륨 마운트 또는 둘 다를 Pod 템플릿에 추가하려면 다음을 실행합니다.

$ oc set volume <object_type>/<name> --add [options]
표 6.2. 볼륨 추가에 지원되는 옵션
옵션설명기본

--name

볼륨 이름입니다.

지정하지 않으면 자동으로 생성됩니다.

-t, --type

볼륨 소스의 이름입니다. 지원되는 값은 emptyDir, hostPath, secret, configmap, persistentVolumeClaim 또는 projected입니다.

emptyDir

-c, --containers

이름으로 컨테이너를 선택합니다. 문자와 일치하는 와일드카드 '*'를 사용할 수도 있습니다.

'*'

-m, --mount-path

선택한 컨테이너 내부의 마운트 경로입니다. 컨테이너 루트, / 또는 호스트와 컨테이너에서 동일한 경로에 마운트하지 마십시오. 컨테이너가 호스트 /dev/pts 파일과 같이 충분한 권한이 있는 경우 호스트 시스템이 손상될 수 있습니다. /host를 사용하여 호스트를 마운트하는 것이 안전합니다.

 

--path

호스트 경로입니다. --type=hostPath에 대한 필수 매개변수입니다. 컨테이너 루트, / 또는 호스트와 컨테이너에서 동일한 경로에 마운트하지 마십시오. 컨테이너가 호스트 /dev/pts 파일과 같이 충분한 권한이 있는 경우 호스트 시스템이 손상될 수 있습니다. /host를 사용하여 호스트를 마운트하는 것이 안전합니다.

 

--secret-name

보안의 이름입니다. --type=secret에 대한 필수 매개변수입니다.

 

--configmap-name

구성 맵의 이름입니다. --type=configmap에 대한 필수 매개변수입니다.

 

--claim-name

영구 볼륨 클레임의 이름입니다. --type=persistentVolumeClaim에 대한 필수 매개변수입니다.

 

--source

JSON 문자열로 된 볼륨 소스 세부 정보입니다. 필요한 볼륨 소스를 --type에서 지원하지 않는 경우 사용하는 것이 좋습니다.

 

-o, --output

수정된 오브젝트를 서버에서 업데이트하는 대신 표시합니다. 지원되는 값은 json, yaml입니다.

 

--output-version

지정된 버전으로 수정된 오브젝트를 출력합니다.

api-version

예를 들면 다음과 같습니다.

  • 레지스트리 DeploymentConfig 오브젝트에 새 볼륨 소스 emptyDir을 추가하려면 다음을 실행합니다.

    $ oc set volume dc/registry --add
    작은 정보

    다음 YAML을 적용하여 볼륨을 추가할 수도 있습니다.

    예 6.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을 적용하여 볼륨을 추가할 수도 있습니다.

    예 6.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
    1
    볼륨 및 시크릿을 추가합니다.
    2
    컨테이너 마운트 경로를 추가합니다.
  • 클레임 이름이 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을 적용하여 볼륨을 추가할 수도 있습니다.

    예 6.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
    1
    'pvc1;(이)라는 영구 볼륨 클레임을 추가합니다.
    2
    컨테이너 마운트 경로를 추가합니다.
  • 모든 복제 컨트롤러에서 수정 버전이 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"
                }}'

6.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을 적용하여 볼륨을 교체할 수도 있습니다.

    예 6.4. PVC 1이라는 영구 볼륨 클레임이 있는 복제 컨트롤러 샘플

    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을 적용하여 마운트 지점을 변경할 수도 있습니다.

    예 6.5. mount 지점이 opt 로 설정된 샘플 배포 구성입니다.

    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 로 설정합니다.

6.3.6. Pod에서 볼륨 및 볼륨 마운트 제거

Pod에서 볼륨 또는 볼륨 마운트를 제거할 수 있습니다.

프로세스

Pod 템플릿에서 볼륨을 제거하려면 다음을 수행합니다.

$ oc set volume <object_type>/<name> --remove [options]
표 6.3. 볼륨 제거에 지원되는 옵션
옵션설명기본

--name

볼륨 이름입니다.

 

-c, --containers

이름으로 컨테이너를 선택합니다. 문자와 일치하는 와일드카드 '*'를 사용할 수도 있습니다.

'*'

--confirm

한 번에 여러 개의 볼륨을 제거할 것임을 나타냅니다.

 

-o, --output

수정된 오브젝트를 서버에서 업데이트하는 대신 표시합니다. 지원되는 값은 json, yaml입니다.

 

--output-version

지정된 버전으로 수정된 오브젝트를 출력합니다.

api-version

예를 들면 다음과 같습니다.

  • 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

6.3.7. Pod에서 다양한 용도의 볼륨 구성

볼륨의 루트 대신 볼륨 내부에 subPath 값을 지정하는 volumeMounts.subPath 속성을 사용하여 단일 Pod에서 다양한 용도로 하나의 볼륨을 공유하도록 볼륨을 구성할 수 있습니다.

프로세스

  1. 볼륨의 파일 목록을 확인하고 oc rsh 명령을 실행합니다.

    $ oc rsh <pod>

    출력 예

    sh-4.2$ ls /path/to/volume/subpath/mount
    example_file1 example_file2 example_file3

  2. subPath를 지정합니다.

    subPath 매개변수가 포함된 Pod 사양의 예

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-site
    spec:
        containers:
        - name: mysql
          image: mysql
          volumeMounts:
          - mountPath: /var/lib/mysql
            name: site-data
            subPath: mysql 1
        - name: php
          image: php
          volumeMounts:
          - mountPath: /var/www/html
            name: site-data
            subPath: html 2
        volumes:
        - name: site-data
          persistentVolumeClaim:
            claimName: my-site-data

    1
    데이터베이스는 mysql 폴더에 저장됩니다.
    2
    HTML 콘텐츠는 html 폴더에 저장됩니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.