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


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

7.3.1. 볼륨 이해

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

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

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

참고

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

7.3.2. OpenShift Dedicated 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 매개변수에 다음 중 하나를 지정합니다.
표 7.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를 지정합니다.
필수 매개변수
모든 필수 매개변수는 선택한 작업에 한정되며 뒤에 나오는 섹션에서 설명합니다.
옵션
모든 옵션은 선택한 작업에 한정되며 뒤에 나오는 섹션에서 설명합니다.

7.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

7.3.4. Pod에 볼륨 추가

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

프로세스

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

$ oc set volume <object_type>/<name> --add [options]
표 7.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을 적용하여 볼륨을 추가할 수도 있습니다.

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

    예 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
    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"
                }}'

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]
표 7.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

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

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

참고

예약된 기존 Pod에 subPath 매개변수를 추가할 수 없습니다.

프로세스

  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:
        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

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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.