스토리지 리소스 관리 및 할당

Red Hat OpenShift Container Storage 4.6

클러스터 및 스토리지 관리자를 위한 관리 작업

초록

이 문서에서는 Red Hat OpenShift Container Storage의 핵심 서비스 및 호스팅된 애플리케이션에 스토리지를 할당하는 방법을 설명합니다.

1장. 개요

이 문서를 통해 Red Hat OpenShift Container Storage에서 핵심 서비스 또는 호스팅된 애플리케이션에 스토리지를 생성, 구성 및 할당하는 방법을 설명합니다.

2장. 스토리지 클래스 및 스토리지 풀

OpenShift Container Storage Operator는 사용 중인 플랫폼에 따라 기본 스토리지 클래스를 설치합니다. 이 기본 스토리지 클래스는 Operator가 소유하고 제어하며 삭제하거나 수정할 수 없습니다. 그러나 스토리지 클래스에 다른 동작을 갖도록 하려면 사용자 정의 스토리지 클래스를 생성할 수 있습니다.

다음 기능을 제공하는 스토리지 클래스에 매핑되는 스토리지 풀을 여러 개 생성할 수 있습니다.

  • 자체 고가용성 애플리케이션이 두 개의 복제본으로 영구 볼륨을 사용할 수 있으므로 애플리케이션 성능이 향상될 수 있습니다.
  • 압축이 활성화된 스토리지 클래스를 사용하여 영구 볼륨 클레임의 공간을 저장합니다.
참고

외부 모드 OpenShift Container Storage 클러스터에서는 사용자 정의 스토리지 클래스가 지원되지 않습니다.

참고

단일 장치 세트가 최소 클러스터인 경우 두 개의 새 스토리지 클래스만 생성할 수 있습니다. 모든 스토리지 클러스터 확장에서는 두 개의 새로운 스토리지 클래스를 사용할 수 있습니다.

2.1. 스토리지 클래스 및 풀 생성

기존 풀을 사용하여 스토리지 클래스를 생성하거나 스토리지 클래스를 생성하는 동안 새 풀을 생성할 수 있습니다.

사전 요구 사항

OpenShift Container Storage 클러스터가 Ready 상태인지 확인합니다.

절차

  1. OpenShift 웹 콘솔에 로그인합니다.
  2. 스토리지 → 스토리지 클래스를 클릭합니다.
  3. Create Storage Class 를 클릭합니다.
  4. 스토리지 클래스 이름설명을 입력합니다.
  5. Reclaim Policy에 대해 Delete 또는 Retain 을 선택합니다. 기본적으로 삭제 가 선택됩니다.
  6. 영구 볼륨을 프로비저닝하는 데 사용되는 플러그인인 RBD Provisioner를 선택합니다.
  7. 새 풀을 생성하거나 기존 풀을 사용할 수 있습니다.

    새 풀 생성
    1. 풀 이름을 입력합니다.
    2. 2-way-Replication 또는 3-way-Replication 을 데이터 보호 정책으로 선택합니다.
    3. 데이터를 압축해야 하는 경우 압축 사용을 선택합니다.

      압축을 활성화하면 애플리케이션 성능에 영향을 미칠 수 있으며 데이터를 이미 압축하거나 암호화할 때 효과가 없을 수 있습니다. 압축을 활성화하기 전에 기록된 데이터는 압축되지 않습니다.

    4. 생성 을 클릭하여 스토리지 풀을 생성합니다.
    5. 풀을 만든 후 완료 를 클릭합니다.
    6. 생성을 클릭하여 스토리지 클래스를 생성합니다.
    기존 풀 사용
    1. 목록에서 풀을 선택합니다.
    2. 생성 을 클릭하여 선택한 풀로 스토리지 클래스를 생성합니다.

3장. OpenShift Container Platform 서비스의 스토리지 구성

OpenShift Container Storage를 사용하여 이미지 레지스트리, 모니터링 및 로깅과 같은 OpenShift Container Platform 서비스에 스토리지를 제공할 수 있습니다.

이러한 서비스의 스토리지를 구성하는 프로세스는 OpenShift Container Storage 배포에 사용되는 인프라에 따라 다릅니다.

주의

이러한 서비스에 대한 충분한 저장 용량을 보유하고 있는지 항상 확인하십시오. 이러한 중요한 서비스의 스토리지가 부족하면 클러스터가 작동하지 않고 복구하기가 매우 어려워집니다.

Red Hat은 이러한 서비스에 대해 더 짧은 큐레이션 및 보존 간격을 설정할 것을 권장합니다. 자세한 내용은 OpenShift Container Platform 설명서의 모니터링 가이드의 Prometheus 지표 데이터 수정 및 Curator 일정 구성 및 보존 시간 구성을 참조하십시오.

이러한 서비스를 위한 스토리지 공간을 실행하는 경우 Red Hat 고객 지원에 문의하십시오.

3.1. OpenShift Container Storage를 사용하도록 이미지 레지스트리 구성

OpenShift Container Platform은 클러스터에서 표준 워크로드로 실행되는 컨테이너 이미지 레지스트리에 빌드를 제공합니다. 일반적으로 레지스트리는 클러스터에 빌드된 이미지의 게시 대상과 클러스터에서 실행되는 워크로드의 이미지 소스로 사용됩니다.

이 섹션의 지침에 따라 OpenShift Container Storage를 컨테이너 이미지 레지스트리의 스토리지로 구성합니다. AWS에서는 레지스트리 스토리지를 변경할 필요가 없습니다. 그러나 vSphere 및 Bare Metal 플랫폼의 OpenShift Container Storage 영구 볼륨으로 스토리지를 변경하는 것이 좋습니다.

주의

이 프로세스에서는 기존 이미지 레지스트리의 데이터를 새 이미지 레지스트리로 마이그레이션하지 않습니다. 기존 레지스트리에 컨테이너 이미지가 이미 있는 경우 이 프로세스를 완료하기 전에 레지스트리를 백업한 후 이 프로세스가 완료되면 이미지를 다시 등록합니다.

사전 요구 사항

  • OpenShift 웹 콘솔에 대한 관리자 액세스 권한이 있습니다.
  • OpenShift Container Storage Operator는 openshift-storage 네임스페이스에 설치 및 실행됩니다. OpenShift 웹 콘솔에서 Operator → 설치된 Operator 를 클릭하여 설치된 Operator 를 확인합니다.
  • 이미지 레지스트리 Operator가 openshift-image-registry 네임스페이스에 설치되어 실행됩니다. OpenShift 웹 콘솔에서 관리클러스터 설정 → 클러스터 Operator를 클릭하여 클러스터 운영자를 확인합니다.
  • 프로비저너 openshift-storage.cephfs.csi.ceph.com 이 있는 스토리지 클래스를 사용할 수 있습니다. OpenShift 웹 콘솔에서 스토리지 → 스토리지 클래스를 클릭하여 사용 가능한 스토리지 클래스를 확인합니다.

절차

  1. 사용할 이미지 레지스트리에 대한 영구 볼륨 클레임을 생성합니다.

    1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭합니다.
    2. 프로젝트를 openshift-image-registry 로 설정합니다.
    3. 영구 볼륨 클레임 생성 을 클릭합니다.

      1. 위에서 검색한 사용 가능한 스토리지 클래스 목록에서 프로비저너 openshift-storage.cephfs.csi.ceph.com 을 사용하여 스토리지 클래스 를 지정합니다.
      2. 영구 볼륨 클레임 이름 (예: ocs4registry )을 지정합니다.
      3. 공유 액세스 (RWX) 의 액세스 모드를 지정합니다.
      4. Size 를 100GB 이상으로 지정합니다.
      5. 생성을 클릭합니다.

        새 영구 볼륨 클레임의 상태가 Bound 로 표시될 때까지 기다립니다.

  2. 새 영구 볼륨 클레임을 사용하도록 클러스터의 이미지 레지스트리를 구성합니다.

    1. AdministrationCustom Resource Definitions 를 클릭합니다.
    2. imageregistry.operator.openshift.io 그룹과 연결된 Config 사용자 정의 리소스 정의를 클릭합니다.
    3. Instances 탭을 클릭합니다.
    4. 클러스터 인스턴스 옆에 있어야 Action Menu(작업 메뉴) → Edit Config (구성 편집) 를 클릭합니다.
    5. 새 영구 볼륨 클레임을 이미지 레지스트리의 영구 스토리지로 추가합니다.

      1. spec: 에서 다음을 추가합니다. 필요한 경우 기존 스토리지: 섹션을 교체합니다.

          storage:
            pvc:
              claim: <new-pvc-name>

        예:

          storage:
            pvc:
              claim: ocs4registry
      2. 저장을 클릭합니다.
  3. 새 구성이 사용 중인지 확인합니다.

    1. 워크로드포드 를 클릭합니다.
    2. 프로젝트를 openshift-image-registry 로 설정합니다.
    3. image-registry-* Pod가 Running 이고 이전 image-registry-* Pod가 종료되었는지 확인합니다.
    4. image-registry-* Pod를 클릭하여 Pod 세부 정보를 확인합니다.
    5. 볼륨 까지 아래로 스크롤하고 registry-storage 볼륨에 새 영구 볼륨 클레임(예: ocs4registry )과 일치하는 Type 이 있는지 확인합니다.

3.2. OpenShift Container Storage를 사용하도록 모니터링 구성

OpenShift Container Storage는 Prometheus 및 AlertManager로 구성된 모니터링 스택을 제공합니다.

이 섹션의 지침에 따라 OpenShift Container Storage를 모니터링 스택의 스토리지로 구성합니다.

중요

스토리지 공간이 부족하면 모니터링이 작동하지 않습니다. 항상 모니터링을 위한 충분한 저장 용량을 보유하고 있는지 확인하십시오.

이 서비스에 대해 짧은 보존 간격을 구성하는 것이 좋습니다. 자세한 내용은 OpenShift Container Platform 설명서의 모니터링 가이드의 Prometheus 지표 데이터 수정 에서 참조하십시오.

사전 요구 사항

  • OpenShift 웹 콘솔에 대한 관리자 액세스 권한이 있습니다.
  • OpenShift Container Storage Operator는 openshift-storage 네임스페이스에 설치 및 실행됩니다. OpenShift 웹 콘솔에서 Operator → 설치된 Operator 를 클릭하여 설치된 Operator 를 확인합니다.
  • openshift-monitoring 네임스페이스에 Operator 모니터링이 설치되어 실행 중입니다. OpenShift 웹 콘솔에서 관리클러스터 설정 → 클러스터 Operator를 클릭하여 클러스터 운영자를 확인합니다.
  • 프로비저너 openshift-storage.rbd.csi.ceph.com 이 있는 스토리지 클래스를 사용할 수 있습니다. OpenShift 웹 콘솔에서 스토리지 → 스토리지 클래스를 클릭하여 사용 가능한 스토리지 클래스를 확인합니다.

절차

  1. OpenShift 웹 콘솔에서 워크로드구성 맵 으로 이동합니다.
  2. 프로젝트 드롭다운을 openshift-monitoring 로 설정합니다.
  3. 구성 맵 생성을 클릭합니다.
  4. 다음 예제를 사용하여 새 cluster-monitoring-config 구성 맵을 정의합니다.

    각도 괄호(< , > )의 콘텐츠를 자신의 값(예 : 24h 또는 storage: 40Gi )으로 바꿉니다.

    storageClassName을 프로비저너 openshift-storage.rbd.csi.ceph.com 을 사용하는 스토리지 클래스로 교체합니다. 아래 예에서 storageclass 의 이름은 ocs-storagecluster-ceph-rbd 입니다.

    cluster-monitoring-config 구성 맵의 예

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-monitoring-config
      namespace: openshift-monitoring
    data:
      config.yaml: |
          prometheusK8s:
            retention: <time to retain monitoring files, e.g. 24h>
            volumeClaimTemplate:
              metadata:
                name: ocs-prometheus-claim
              spec:
                storageClassName: ocs-storagecluster-ceph-rbd
                resources:
                  requests:
                    storage: <size of claim, e.g. 40Gi>
          alertmanagerMain:
            volumeClaimTemplate:
              metadata:
                name: ocs-alertmanager-claim
              spec:
                storageClassName: ocs-storagecluster-ceph-rbd
                resources:
                  requests:
                    storage: <size of claim, e.g. 40Gi>

  5. 생성 을 클릭하여 구성 맵을 저장하고 만듭니다.

검증 단계

  1. 영구 볼륨 클레임이 Pod에 바인딩되었는지 확인합니다.

    1. 스토리지영구 볼륨 클레임 으로 이동합니다.
    2. 프로젝트 드롭다운을 openshift-monitoring 로 설정합니다.
    3. 3개의 alertmanager-main-* Pod 및 두 개의 prometheus-k8s-* Pod에 연결된 Bound 상태로 5 영구 볼륨 클레임이 표시되는지 확인합니다.

      생성 및 바인딩된 스토리지 모니터링

      Screenshot of OpenShift Web Console showing five pods with persistent volume claims bound in the openshift-monitoring project

  2. alertmanager-main-* 포드가 Running (실행 중) 상태로 표시되는지 확인합니다.

    1. 워크로드 → Pod로 이동
    2. alertmanager-main-* Pod를 클릭하여 Pod 세부 정보를 확인합니다.
    3. 볼륨까지 아래로 스크롤하여 볼륨에 새로운 영구 볼륨 클레임 ( 예:ocs-alertmanager-claim -alertmanager-main-0)과 일치하는 Type, ocs-alertrtmanager-claim-alertmanager-main-0 이 있는지 확인합니다.

      alertmanager-main-* Pod에 연결된 영구 볼륨 클레임

      Screenshot of OpenShift Web Console showing persistent volume claim attached to the altermanager pod

  3. prometheus-k8s-* Pod가 Running 상태로 표시되는지 확인합니다.

    1. prometheus-k8s-* Pod를 클릭하여 Pod 세부 정보를 확인합니다.
    2. 볼륨까지 아래로 스크롤하여 볼륨에 새로운 영구 볼륨 클레임 ( 예:ocs-prometheus-claim -prometheus-prometheus-prometheus-prometheus-prometheus-prometheus- k8s-0)과 일치하는 Type, ocs-prometheus-prometheus-claim-claims 가 있는지 확인합니다.

      prometheus-k8s-* Pod에 연결된 영구 볼륨 클레임

      Screenshot of OpenShift Web Console showing persistent volume claim attached to the prometheus pod

3.3. OpenShift Container Storage의 클러스터 로깅

클러스터 로깅을 배포하여 다양한 OpenShift Container Platform 서비스에 대한 로그를 집계할 수 있습니다. 클러스터 로깅 배포 방법에 대한 자세한 내용은 클러스터 로깅 배포를 참조하십시오.

초기 OpenShift Container Platform 배포 시 OpenShift Container Storage는 기본적으로 구성되지 않으며 OpenShift Container Platform 클러스터는 노드에서 사용할 수 있는 기본 스토리지에만 의존합니다. OpenShift Container Storage에서 지원하는 OpenShift 로깅(ElasticSearch)의 기본 구성을 편집하여 OpenShift Container Storage 지원 로깅(Elasticsearch)을 편집할 수 있습니다.

중요

이러한 서비스에 대한 충분한 저장 용량을 보유하고 있는지 항상 확인하십시오. 이러한 중요한 서비스에 대한 스토리지 공간을 실행하는 경우 로깅 애플리케이션이 작동하지 않고 복구하기가 매우 어려워집니다.

Red Hat은 이러한 서비스에 대해 더 짧은 큐레이션 및 보존 간격을 설정할 것을 권장합니다. 자세한 내용은 OpenShift Container Platform 설명서의 클러스터 로깅 큐레이터 를 참조하십시오.

이러한 서비스를 위한 스토리지 공간을 실행하는 경우 Red Hat 고객 지원에 문의하십시오.

3.3.1. 영구 스토리지 구성

스토리지 클래스 이름 및 크기 매개변수를 사용하여 Elasticsearch 클러스터의 영구 스토리지 클래스 및 크기를 구성할 수 있습니다. Cluster Logging Operator는 이러한 매개변수를 기반으로 Elasticsearch 클러스터의 각 데이터 노드에 대한 영구 볼륨 클레임을 생성합니다. 예:

spec:
    logStore:
      type: "elasticsearch"
      elasticsearch:
        nodeCount: 3
        storage:
          storageClassName: "ocs-storagecluster-ceph-rbd”
          size: "200G"

이 예에서는 클러스터의 각 데이터 노드가 200GiB ocs-storagecluster-ceph-rbd 스토리지를 요청하는 영구 볼륨 클레임에 바인딩되도록 지정합니다. 각 기본 분할은 단일 복제본에서 지원합니다. shard 사본은 모든 노드에 복제되며 항상 사용 가능하며 단일 중복 정책으로 인해 두 개 이상의 노드가 있는 경우 복사본을 복구할 수 있습니다. Elasticsearch 복제 정책에 대한 자세한 내용은 클러스터 로깅 배포 및 구성Elasticsearch 복제 정책을 참조하십시오.

참고

스토리지 블록을 종료하면 기본 스토리지에서 지원하는 배포가 생성됩니다. 예:

spec:
    logStore:
      type: "elasticsearch"
      elasticsearch:
        nodeCount: 3
        storage: {}

자세한 내용은 클러스터 로깅 구성을 참조하십시오.

3.3.2. OpenShift Container Storage를 사용하도록 클러스터 로깅 구성

이 섹션의 지침에 따라 OpenShift Container Storage를 OpenShift 클러스터 로깅의 스토리지로 구성합니다.

참고

OpenShift Container Storage에서 처음으로 로깅을 구성할 때 모든 로그를 가져올 수 있습니다. 그러나 제거 및 로깅을 다시 설치하면 이전 로그가 제거되고 새 로그만 처리됩니다.

사전 요구 사항

  • OpenShift 웹 콘솔에 대한 관리자 액세스 권한이 있습니다.
  • OpenShift Container Storage Operator는 openshift-storage 네임스페이스에 설치 및 실행됩니다.
  • Cluster logging Operator가 openshift-logging 네임스페이스에 설치되어 실행됩니다.

절차

  1. OpenShift 웹 콘솔의 왼쪽 창에서 Administration → Custom Resource Definitions 를 클릭합니다.
  2. 사용자 정의 리소스 정의 페이지에서 ClusterLogging 을 클릭합니다.
  3. 사용자 정의 리소스 정의 개요 페이지의 작업 메뉴에서 인스턴스 보기를 선택하거나 인스턴스 탭을 클릭합니다.
  4. 클러스터 로깅 페이지에서 클러스터 로깅 생성을 클릭합니다.

    데이터를 로드하기 위해 페이지를 새로 고쳐야 할 수도 있습니다.

  5. YAML에서 storageClassName을 provisioner openshift-storage.rbd.csi.ceph.com 을 사용하는 storageclass 로 바꿉니다. 아래 예에서 storageclass 의 이름은 ocs-storagecluster-ceph-rbd 입니다.

    apiVersion: "logging.openshift.io/v1"
    kind: "ClusterLogging"
    metadata:
      name: "instance"
      namespace: "openshift-logging"
    spec:
      managementState: "Managed"
      logStore:
        type: "elasticsearch"
        elasticsearch:
          nodeCount: 3
          storage:
            storageClassName: ocs-storagecluster-ceph-rbd
            size: 200G # Change as per your requirement
          redundancyPolicy: "SingleRedundancy"
      visualization:
        type: "kibana"
        kibana:
          replicas: 1
      curation:
        type: "curator"
        curator:
          schedule: "30 3 * * *"
      collection:
        logs:
          type: "fluentd"
          fluentd: {}

    OpenShift Container Storage 노드에 테인트된 경우 로깅을 위해 데몬 세트 Pod 예약을 활성화하려면 허용 오차를 추가해야 합니다.

    spec:
    [...]
      collection:
        logs:
          fluentd:
            tolerations:
            - effect: NoSchedule
              key: node.ocs.openshift.io/storage
              value: 'true'
          type: fluentd
  6. 저장을 클릭합니다.

검증 단계

  1. 영구 볼륨 클레임이 elasticsearch Pod에 바인딩되었는지 확인합니다.

    1. 스토리지영구 볼륨 클레임 으로 이동합니다.
    2. 프로젝트 드롭다운을 openshift-logging 으로 설정합니다.
    3. Persistent Volume Claims가 elasticsearch-* pod에 연결된 Bound 상태로 표시되는지 확인합니다.

      그림 3.1. 클러스터 로깅 생성 및 바인딩

      elasticsearch Pod에 바인딩된 상태가 있는 영구 볼륨 클레임의 스크린샷
  2. 새 클러스터 로깅이 사용 중인지 확인합니다.

    1. 워크로드 → Pod 를 클릭합니다.
    2. 프로젝트를 openshift-logging 으로 설정합니다.
    3. elasticsearch-* Pod가 Running 상태로 표시되는지 확인합니다.
    4. elasticsearch-* Pod를 클릭하여 Pod 세부 정보를 확인합니다.
    5. 볼륨까지 아래로 스크롤하여 elasticsearch 볼륨에 새 영구 볼륨 클레임 ( 예: elasticsearch-elasticsearch-cdm-9r624biv-3) 과 일치하는 Type 이 있는지 확인합니다.
    6. 영구 볼륨 클레임 이름을 클릭하고 PersistenVolumeClaim 개요 페이지에서 스토리지 클래스 이름을 확인합니다.
참고

Elasticsearch Pod에 연결된 PV의 PV 전체 시나리오를 방지하려면 더 짧은 큐레이터 시간을 사용해야 합니다.

보존 설정에 따라 Elasticsearch 데이터를 삭제하도록 Curator를 구성할 수 있습니다. 다음 기본 인덱스 데이터 보존을 기본값으로 5일로 설정하는 것이 좋습니다.

config.yaml: |
    openshift-storage:
      delete:
        days: 5

자세한 내용은 Elasticsearch 데이터 Curation을 참조하십시오.

참고

영구 볼륨 클레임에서 지원하는 클러스터 로깅을 설치 제거하려면 각 배포 가이드의 제거 장에 있는 OpenShift Container Storage에서 클러스터 로깅 Operator를 제거하는 절차를 사용하십시오.

4장. OpenShift Container Storage를 사용하여 OpenShift Container Platform 애플리케이션 백업

OpenShift Container Platform을 설치하는 동안 OpenShift Container Storage를 직접 설치할 수 없습니다. 그러나 Operator Hub를 사용하여 기존 OpenShift Container Platform에 OpenShift Container Storage를 설치한 다음 OpenShift Container Storage에서 지원하도록 OpenShift Container Platform 애플리케이션을 구성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform이 설치되어 있으며 OpenShift 웹 콘솔에 대한 관리자 액세스 권한이 있습니다.
  • OpenShift Container Storage가 openshift-storage 네임스페이스에 설치되어 실행 중입니다.

절차

  1. OpenShift 웹 콘솔에서 다음 중 하나를 수행합니다.

    • 워크로드 → 배포를 클릭합니다.

      배포 페이지에서 다음 중 하나를 수행할 수 있습니다.

      • 기존 배포를 선택하고 Action 메뉴(hiera) 메뉴에서 Add Storage (스토리지 추가) 옵션을 클릭합니다.
      • 새 배포를 생성한 다음 스토리지를 추가합니다.

        1. Create Deployment (배포 생성)를 클릭하여 새 배포를 생성합니다.
        2. 사용자 요구 사항에 따라 YAML 을 편집하여 배포를 생성합니다.
        3. 생성을 클릭합니다.
        4. 페이지 오른쪽 상단에 있는 작업 드롭다운 메뉴에서 스토리지 추가 를 선택합니다.
    • 워크로드 → 배포 구성을 클릭합니다.

      배포 구성 페이지에서 다음 중 하나를 수행할 수 있습니다.

      • 기존 배포를 선택하고 Action 메뉴(hiera) 메뉴에서 Add Storage (스토리지 추가) 옵션을 클릭합니다.
      • 새 배포를 생성한 다음 스토리지를 추가합니다.

        1. Create Deployment Config (배포 구성 생성)를 클릭하여 새 배포를 생성합니다.
        2. 사용자 요구 사항에 따라 YAML 을 편집하여 배포를 생성합니다.
        3. 생성을 클릭합니다.
        4. 페이지 오른쪽 상단에 있는 작업 드롭다운 메뉴에서 스토리지 추가 를 선택합니다.
  2. 스토리지 추가 페이지에서 다음 옵션 중 하나를 선택할 수 있습니다.

    • 기존 클레임 사용 옵션을 클릭하고 드롭다운 목록에서 적절한 PVC를 선택합니다.
    • 새 클레임 생성 옵션을 클릭합니다.

      1. 스토리지 클래스 드롭다운 목록에서 적절한 CephFS 또는 RBD 스토리지 클래스 를 선택합니다.
      2. 영구 볼륨 클레임의 이름을 입력합니다.
      3. ReadWriteOnce (RWO) 또는 ReadWriteMany (RWX) 액세스 모드를 선택합니다.

        참고

        ReadOnlyMany (ROX)는 지원되지 않으므로 비활성화됩니다.

      4. 원하는 스토리지 용량의 크기를 선택합니다.

        참고

        블록 PV를 확장할 수 있지만 영구 볼륨 클레임 생성 후에는 스토리지 용량을 줄일 수 없습니다.

  3. 컨테이너 내부의 마운트 경로 볼륨에 대한 마운트 경로 및 하위 경로(필요한 경우)를 지정합니다.
  4. 저장을 클릭합니다.

검증 단계

  1. 구성에 따라 다음 중 하나를 수행합니다.

    • 워크로드 → 배포를 클릭합니다.
    • 워크로드 → 배포 구성을 클릭합니다.
  2. 필요에 따라 프로젝트를 설정합니다.
  3. 스토리지를 추가한 배포를 클릭하여 배포 세부 정보를 확인합니다.
  4. 볼륨 까지 아래로 스크롤하여 배포에 할당된 영구 볼륨 클레임과 일치하는 Type 이 있는지 확인합니다.
  5. 영구 볼륨 클레임 이름을 클릭하고 영구 볼륨 클레임 개요 페이지에서 스토리지 클래스 이름을 확인합니다.

5장. 기존 외부 OpenShift Container Storage 클러스터에 파일 및 오브젝트 스토리지 추가

OpenShift Container Storage가 외부 모드로 구성되면 영구 볼륨 클레임 및 오브젝트 버킷 클레임에 대한 스토리지를 제공하는 여러 가지 방법이 있습니다.

  • 블록 스토리지에 대한 영구 볼륨 클레임은 외부 Red Hat Ceph Storage 클러스터에서 직접 제공됩니다.
  • 파일 스토리지에 대한 영구 볼륨 클레임은 메타데이터 서버(MDS)를 외부 Red Hat Ceph Storage 클러스터에 추가하여 제공할 수 있습니다.
  • 오브젝트 스토리지에 대한 오브젝트 버킷 클레임은 Multicloud Object Gateway를 사용하거나 외부 Red Hat Ceph Storage 클러스터에 Ceph Object Gateway를 추가하여 제공할 수 있습니다.

다음 프로세스를 사용하여 블록 스토리지만 제공하기 위해 처음 배포된 외부 OpenShift Container Storage 클러스터에 파일 스토리지(메타데이터 서버 사용) 또는 오브젝트 스토리지를 모두 추가합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터는 버전 4.6과 함께 설치됩니다.
  • OpenShift Container Storage 노드는 OpenShift Container Storage Operator 버전 4.6과 함께 설치됩니다.
  • 이전 버전에서 버전 4.6으로 업그레이드한 경우 모니터링 활성화: 오브젝트 서비스 대시보드에 대한 모니터링활성화
  • 외부 Red Hat Ceph Storage 클러스터는 다음 중 하나 또는 둘 다로 구성됩니다.

    • 오브젝트 스토리지를 위해 OpenShift Container Platform 클러스터에서 액세스할 수 있는 Ceph Object Gateway(RGW) 끝점
    • 파일 저장을 위한 메타데이터 서버(MDS) 풀
  • 외부 OpenShift Container Storage 클러스터 배포 중에 ceph-external-cluster-details-exporter.py 스크립트에 사용된 매개변수를 알고 있는지 확인합니다.

절차

  1. 다음 명령을 사용하여 ceph-external-cluster-details-exporter.py python 스크립트의 OpenShift Container Storage 버전을 다운로드합니다.

    oc get csv $(oc get csv -n openshift-storage | grep ocs-operator | awk '{print $1}') -n openshift-storage -o jsonpath='{.metadata.annotations.external\.features\.ocs\.openshift\.io/export-script}' | base64 --decode > ceph-external-cluster-details-exporter.py
  2. 업데이트 권한은 외부 Red Hat Ceph Storage 클러스터의 모든 클라이언트 노드에서 ceph-external-cluster-details-exporter.py 를 실행하여 외부 Red Hat Ceph Storage 클러스터에서 제한됩니다. 이 작업을 수행하려면 Red Hat Ceph Storage 관리자에게 문의해야 할 수 있습니다.

    # python3 ceph-external-cluster-details-exporter.py --upgrade \
    --run-as-user=ocs-client-name \
    --rgw-pool-prefix rgw-pool-prefix
    --run-as-user
    OpenShift Container Storage 클러스터 배포 중에 사용되는 클라이언트 이름입니다. 다른 클라이언트 이름이 설정되지 않은 경우 기본 클라이언트 이름 client.healthchecker 를 사용합니다.
    --rgw-pool-prefix
    Ceph Object Gateway 풀에 사용되는 접두사입니다. 기본 접두사가 사용되는 경우 생략할 수 있습니다.
  3. 외부 Red Hat Ceph Storage 클러스터에서 구성 세부 정보를 생성하고 저장합니다.

    1. 외부 Red Hat Ceph Storage 클러스터의 모든 클라이언트 노드에서 ceph-external-cluster-details-exporter.py 를 실행하여 구성 세부 정보를 생성합니다.

      # python3 ceph-external-cluster-details-exporter.py --rbd-data-pool-name rbd-block-pool-name --monitoring-endpoint ceph-mgr-prometheus-exporter-endpoint --monitoring-endpoint-port ceph-mgr-prometheus-exporter-port --run-as-user ocs-client-name  --rgw-endpoint rgw-endpoint --rgw-pool-prefix rgw-pool-prefix
      --monitoring-endpoint
      OpenShift Container Storage 클러스터에서 연결할 수 있는 활성 Ceph Manager의 IP 주소입니다.
      --monitoring-endpoint-port
      Ceph Manager Prometheus Exporter 엔드 포인트의 포트입니다.
      --run-as-user
      OpenShift Container Storage 클러스터 배포 중에 사용되는 클라이언트 이름입니다. 다른 클라이언트 이름이 설정되지 않은 경우 기본 클라이언트 이름 client.healthchecker를 사용합니다.
      --rgw-endpoint
      이 매개변수를 제공하여 OpenShift Container Storage의 Ceph Object Gateway를 통해 오브젝트 스토리지를 프로비저닝합니다. (선택 사항)
      --rgw-pool-prefix
      Ceph Object Gateway 풀에 사용되는 접두사입니다. 기본 접두사가 사용되는 경우 생략할 수 있습니다.

      사용자 권한이 다음과 같이 업데이트됩니다.

      caps: [mgr] allow command config
      caps: [mon] allow r, allow command quorum_status, allow command version
      caps: [osd] allow rwx pool=default.rgw.meta, allow r pool=.rgw.root, allow rw pool=default.rgw.control, allow rx pool=default.rgw.log, allow x pool=default.rgw.buckets.index
      참고

      Ceph Object Gateway 세부 정보(제공되는 경우)를 제외한 모든 매개변수(선택 사항)가 외부 모드에서 Openshift Container Storage를 배포하는 동안 사용된 것과 동일한지 확인합니다.

    2. 스크립트의 출력을 external-cluster-config.json 파일에 저장합니다.

      다음 예제 출력은 생성된 구성 변경 사항을 굵은 텍스트로 보여줍니다.

      [{"name": "rook-ceph-mon-endpoints", "kind": "ConfigMap", "data": {"data": "xxx.xxx.xxx.xxx:xxxx", "maxMonId": "0", "mapping": "{}"}}, {"name": "rook-ceph-mon", "kind": "Secret", "data": {"admin-secret": "admin-secret", "fsid": "<fs-id>", "mon-secret": "mon-secret"}}, {"name": "rook-ceph-operator-creds", "kind": "Secret", "data": {"userID": "client.healthchecker", "userKey": "<user-key>"}}, {"name": "rook-csi-rbd-node", "kind": "Secret", "data": {"userID": "csi-rbd-node", "userKey": "<user-key>"}}, {"name": "ceph-rbd", "kind": "StorageClass", "data": {"pool": "ceph-rbd"}}, {"name": "monitoring-endpoint", "kind": "CephCluster", "data": {"MonitoringEndpoint": "xxx.xxx.xxx.xxx", "MonitoringPort": "xxxx"}}, {"name": "rook-csi-rbd-provisioner", "kind": "Secret", "data": {"userID": "csi-rbd-provisioner", "userKey": "<user-key>"}}, {"name": "rook-csi-cephfs-provisioner", "kind": "Secret", "data": {"adminID": "csi-cephfs-provisioner", "adminKey": "<admin-key>"}}, {"name": "rook-csi-cephfs-node", "kind": "Secret", "data": {"adminID": "csi-cephfs-node", "adminKey": "<admin-key>"}}, {"name": "cephfs", "kind": "StorageClass", "data": {"fsName": "cephfs", "pool": "cephfs_data"}}, {"name": "ceph-rgw", "kind": "StorageClass", "data": {"endpoint": "xxx.xxx.xxx.xxx:xxxx", "poolPrefix": "default"}}]
  4. 생성된 JSON 파일을 업로드합니다.

    1. OpenShift 웹 콘솔에 로그인합니다.
    2. 워크로드시크릿 을 클릭합니다.
    3. projectopenshift-storage 로 설정합니다.
    4. rook-ceph-external-cluster-details 를 클릭합니다.
    5. 작업 (hiera) → 시크릿 편집을 클릭합니다.
    6. 찾아보기 를 클릭하고 external-cluster-config.json 파일을 업로드합니다.
    7. 저장을 클릭합니다.

검증 단계

  • 개요영구저장장치 를 클릭하고 OpenShift Container Storage 클러스터의 상태를 확인합니다.
  • 파일 저장을 위해 메타데이터 서버를 추가한 경우:

    1. 워크로드포드 를 클릭하고 csi-cephfsplugin-* Pod가 새로 생성되고 실행 중 상태인지 확인합니다.
    2. 스토리지스토리지 클래스 를 클릭하고 ocs-external-storagecluster-cephfs 스토리지 클래스가 생성되었는지 확인합니다.
  • 오브젝트 스토리지를 위해 Ceph Object Gateway를 추가한 경우:

    1. 스토리지스토리지 클래스 를 클릭하고 ocs-external-storagecluster-ceph-rgw 스토리지 클래스가 생성되었는지 확인합니다.
    2. OpenShift 웹 콘솔의 왼쪽 창에서 개요 를 클릭하고 오브젝트 서비스 탭을 클릭합니다. 상태 카드에서 Object Service에 녹색 눈금 아이콘이 표시되는지 확인합니다.

6장. Red Hat OpenShift Container Storage 전용 작업자 노드를 사용하는 방법

인프라 노드를 사용하여 Red Hat OpenShift Container Storage 리소스를 예약하면 Red Hat OpenShift Container Platform 서브스크립션 비용을 절감할 수 있습니다. infra node-role 라벨이 있는 RHCS(Red Hat OpenShift Container Platform) 노드에는 OpenShift Container Storage 서브스크립션이 필요하지만 RuntimeClass 서브스크립션이 아닙니다.

Machine API 지원 없이 환경 간에 일관성을 유지하는 것이 중요합니다. 이로 인해 모든 경우에 worker 또는 infra로 라벨이 지정된 특수 카테고리가 있거나 두 역할을 모두 갖는 것이 좋습니다. 자세한 내용은 6.3절. “인프라 노드 수동 생성” 섹션을 참조하십시오.

6.1. 인프라 노드 분석

OpenShift Container Storage와 함께 사용할 인프라 노드에는 몇 가지 속성이 있습니다. 노드가 RuntimeClass 인타이틀먼트를 사용하지 않도록 하려면 infra node-role 레이블이 필요합니다. infra node-role 레이블은 OpenShift Container Storage를 실행하는 노드에 OpenShift Container Storage 자격만 필요하다는 것을 확인합니다.

  • node-role.kubernetes.io/infra로 레이블이 지정됩니다.

인프라 노드가 OpenShift Container Storage 리소스만 예약하려면 NoSchedule effect를 사용하여 OpenShift Container Storage 테인트를 추가해야 합니다.

  • node.ocs.openshift.io/storage="true"로 테인트됨

이 레이블은 Gradle 노드를 infra 노드로 식별하므로 journalctl 서브스크립션 비용이 적용되지 않습니다. 테인트를 사용하면 테인트된 노드에 비 OpenShift Container Storage 리소스를 예약할 수 없습니다.

OpenShift Container Storage 서비스를 실행하는 데 사용할 인프라 노드에 필요한 테인트 및 라벨의 예:

    spec:
      taints:
      - effect: NoSchedule
        key: node.ocs.openshift.io/storage
        value: "true"
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/worker: ""
          node-role.kubernetes.io/infra: ""
          cluster.ocs.openshift.io/openshift-storage: ""

6.2. 인프라 노드 생성을 위한 머신 세트

환경에서 Machine API가 지원되는 경우 인프라 노드를 프로비저닝할 머신 세트 템플릿에 레이블을 추가해야 합니다. 머신 API에서 생성한 노드에 라벨을 수동으로 추가하는 데 대한 안티바이러스가 방지하십시오. 이렇게 하는 것은 배포로 생성된 Pod에 라벨을 추가하는 것과 유사합니다. 두 경우 모두 Pod/노드에 실패하면 교체 Pod/노드에 적절한 레이블이 없습니다.

참고

EC2 환경에서는 각각 별도의 가용 영역(예: us-east-2a, us-east-2b, us-east-2c)에 인프라 노드를 프로비저닝하도록 구성된 세 개의 머신 세트가 필요합니다. 현재 OpenShift Container Storage는 세 개 이상의 가용성 영역에서의 배포를 지원하지 않습니다.

다음 머신 세트 템플릿 예에서는 인프라 노드에 필요한 적절한 테인트 및 라벨을 사용하여 노드를 생성합니다. OpenShift Container Storage 서비스를 실행하는 데 사용됩니다.

  template:
    metadata:
      creationTimestamp: null
      labels:
        machine.openshift.io/cluster-api-cluster: kb-s25vf
        machine.openshift.io/cluster-api-machine-role: worker
        machine.openshift.io/cluster-api-machine-type: worker
        machine.openshift.io/cluster-api-machineset: kb-s25vf-infra-us-west-2a
    spec:
      taints:
      - effect: NoSchedule
        key: node.ocs.openshift.io/storage
        value: "true"
      metadata:
        creationTimestamp: null
        labels:
          node-role.kubernetes.io/infra: ""
          cluster.ocs.openshift.io/openshift-storage: ""

6.3. 인프라 노드 수동 생성

환경에서 Machine API가 지원되지 않는 경우에만 라벨을 노드에 직접 적용해야 합니다. 수동 생성을 수행하려면 OpenShift Container Storage 서비스를 예약하는 데 3개 이상의 worker 노드를 사용할 수 있어야 하며 이러한 노드에 충분한 CPU 및 메모리 리소스가 있어야 합니다. RuntimeClass 서브스크립션 비용을 방지하려면 다음이 필요합니다.

oc label node <node> node-role.kubernetes.io/infra=""
oc label node <node> cluster.ocs.openshift.io/openshift-storage=""

인프라 노드가 OpenShift Container Storage 리소스만 스케줄링하고 기타 OpenShift Container Storage 이외의 다른 워크로드를 회신하도록 NoSchedule OpenShift Container Storage 테인트를 추가해야 합니다.

oc adm taint node <node> node.ocs.openshift.io/storage="true":NoSchedule
주의

node-role node-role.kubernetes.io/worker=""를 제거하지 마십시오.

node-role.kubernetes.io/worker="" 를 제거하면 OpenShift 스케줄러와 MachineConfig 리소스를 모두 변경하지 않는 한 문제가 발생할 수 있습니다.

이미 제거된 경우 각 인프라 노드에 다시 추가해야 합니다. node-role node-role.kubernetes.io/infra="" 및 OpenShift Container Storage 테인트를 추가하면 인타이틀먼트 제외 요구 사항을 준수할 수 있습니다.

7장. 영구 볼륨 클레임 관리

7.1. OpenShift Container Storage를 사용하도록 애플리케이션 Pod 구성

이 섹션의 지침에 따라 OpenShift Container Storage를 애플리케이션 Pod의 스토리지로 구성합니다.

사전 요구 사항

  • OpenShift 웹 콘솔에 대한 관리자 액세스 권한이 있습니다.
  • OpenShift Container Storage Operator는 openshift-storage 네임스페이스에 설치 및 실행됩니다. OpenShift 웹 콘솔에서 Operator → 설치된 Operator 를 클릭하여 설치된 Operator 를 확인합니다.
  • OpenShift Container Storage에서 제공하는 기본 스토리지 클래스를 사용할 수 있습니다. OpenShift 웹 콘솔에서 스토리지 → 스토리지 클래스 를 클릭하여 기본 스토리지 클래스를 확인합니다.

절차

  1. 애플리케이션에서 사용할 영구 볼륨 클레임(PVC)을 생성합니다.

    1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭합니다.
    2. 애플리케이션 포드에 대한 프로젝트를 설정합니다.
    3. 영구 볼륨 클레임 생성 을 클릭합니다.

      1. OpenShift Container Storage에서 제공하는 스토리지 클래스 를 지정합니다.
      2. PVC 이름 (예: myclaim )을 지정합니다.
      3. 필요한 액세스 모드를 선택합니다.
      4. 애플리케이션 요구 사항에 따라 Size 를 지정합니다.
      5. 생성 을 클릭하고 PVC가 Bound 상태가 될 때까지 기다립니다.
  2. 새 PVC를 사용하도록 새 애플리케이션 Pod 또는 기존 애플리케이션 Pod를 구성합니다.

    • 새 애플리케이션 Pod의 경우 다음 단계를 수행합니다.

      1. 워크로드포드 를 클릭합니다.
      2. 새 애플리케이션 포드를 생성합니다.
      3. spec: 섹션에서 volume: 섹션을 추가하여 새 PVC를 애플리케이션 Pod의 볼륨으로 추가합니다.

        volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>

        예:

        volumes:
          - name: mypd
            persistentVolumeClaim:
              claimName: myclaim
    • 기존 애플리케이션 Pod의 경우 다음 단계를 수행합니다.

      1. 워크로드배포 구성을 클릭합니다.
      2. 애플리케이션 Pod와 관련된 필수 배포 구성을 검색합니다.
      3. 작업 메뉴(octets) → 배포 구성 편집 을 클릭합니다.
      4. spec: 섹션에서 volume: 섹션을 추가하여 새 PVC를 애플리케이션 Pod의 볼륨으로 추가하고 저장을 클릭합니다.

        volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>

        예:

        volumes:
          - name: mypd
            persistentVolumeClaim:
              claimName: myclaim
  3. 새 구성이 사용 중인지 확인합니다.

    1. 워크로드포드 를 클릭합니다.
    2. 애플리케이션 포드에 대한 프로젝트를 설정합니다.
    3. 애플리케이션 포드가 Running (실행 중) 상태로 표시되는지 확인합니다.
    4. 애플리케이션 포드 이름을 클릭하여 Pod 세부 정보를 확인합니다.
    5. Volumes (볼륨) 섹션까지 아래로 스크롤하여 볼륨에 새 영구 볼륨 클레임과 일치하는 Type (예: myclaim )이 있는지 확인합니다.

7.2. 영구 볼륨 클레임 요청 상태 보기

PVC 요청의 상태를 보려면 다음 절차를 사용하십시오.

사전 요구 사항

  • OpenShift Container Storage에 대한 관리자 액세스 권한

절차

  1. OpenShift 웹 콘솔에 로그인합니다.
  2. 스토리지영구 볼륨 클레임을 클릭합니다.
  3. 필터 텍스트 상자를 사용하여 필요한 PVC 이름을 검색합니다. 또한 이름 또는 레이블로 PVC 목록을 필터링하여 목록을 좁힐 수 있습니다.
  4. 필요한 PVC에 해당하는 Status 열을 확인합니다.
  5. 필요한 이름을 클릭하여 PVC 세부 정보를 확인합니다.

7.3. 영구 볼륨 클레임 요청 이벤트 검토

PVC(영구 볼륨 클레임) 요청 이벤트를 검토하고 해결하려면 다음 절차를 사용하십시오.

사전 요구 사항

  • OpenShift 웹 콘솔에 대한 관리자 액세스.

절차

  1. OpenShift 웹 콘솔에 로그인합니다.
  2. 개요영구 스토리지를 클릭합니다.
  3. 인벤토리 카드를 찾아 오류가 있는 PVC 수를 확인합니다.
  4. 스토리지영구 볼륨 클레임을 클릭합니다.
  5. 필터 텍스트 상자를 사용하여 필요한 PVC를 검색합니다.
  6. PVC 이름을 클릭하고 Events로 이동합니다.
  7. 필요에 따라 또는 지시에 따라 이벤트를 처리합니다.

7.4. 영구 볼륨 클레임 확장

OpenShift Container Storage 4.6에는 영구 볼륨 클레임을 확장하여 영구 스토리지 리소스 관리에 더 많은 유연성을 제공하는 기능이 도입되었습니다.

다음 영구 볼륨에 대한 확장이 지원됩니다.

  • 볼륨 모드 파일 시스템의 Ceph File System(CephFS)을 기반으로 하는 ReadWriteOnce(RWO) 및 ReadWriteMany(RWX) 액세스 권한이 있는 PVC입니다.
  • 볼륨 모드 파일 시스템이 있는 Ceph RADOS Block Device(RBD)를 기반으로 하는 ReadWriteOnce(RWO) 액세스 권한이 있는 PVC입니다.
  • 볼륨 모드가 Block 인 Ceph RADOS 블록 장치(RBD)를 기반으로 하는 ReadWriteOnce(RWO) 액세스 권한이 있는 PVC입니다.
주의

Red Hat에서 OSD 및 MON PVC 확장을 지원하지 않습니다.

사전 요구 사항

  • OpenShift 웹 콘솔에 대한 관리자 액세스.

절차

  1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 으로 이동합니다.
  2. 확장할 영구 볼륨 클레임 옆에 있는 Action Menu(작업 메뉴)를 클릭합니다.
  3. PVC 확장을 클릭합니다.

    영구 볼륨 클레임 확장 PVC 메뉴 항목
  4. 영구 볼륨 클레임의 새 크기를 선택한 다음 Expand:를 클릭합니다.

    영구 볼륨 클레임 마법사 확장
  5. 확장을 확인하려면 PVC의 세부 정보 페이지로 이동하여 용량 필드에 요청된 크기가 올바른지 확인합니다.

    참고

    Ceph RADOS Block Device(RBD)를 기반으로 PVC를 확장하는 경우 PVC가 Pod에 아직 연결되지 않은 경우 Condition 유형은 PVC의 세부 정보 페이지에 있는 FileSystemResizePending 입니다. 볼륨이 마운트되면 파일 시스템 크기 조정이 성공하고 새 크기가 Capacity 필드에 반영됩니다.

7.5. 동적 프로비저닝

7.5.1. 동적 프로비저닝 소개

StorageClass 리소스 객체는 요청 가능한 스토리지를 설명하고 분류할 뿐 만 아니라 필요에 따라 동적으로 프로비저닝된 스토리지에 대한 매개 변수를 전달하는 수단을 제공합니다. StorageClass 객체는 다른 수준의 스토리지 및 스토리지에 대한 액세스를 제어하기 위한 관리 메커니즘으로 사용될 수 있습니다. 클러스터 관리자(cluster-admin) 또는 스토리지 관리자(storage-admin)는 사용자가 기본 스토리지 볼륨 소스에 대한 자세한 지식이 없어도 요청할 수 있는 StorageClass 오브젝트를 정의하고 생성합니다.

OpenShift Container Platform 영구 볼륨 프레임 워크를 사용하면이 기능을 사용할 수 있으며 관리자는 영구 스토리지로 클러스터를 프로비저닝할 수 있습니다. 또한 이 프레임 워크를 통해 사용자는 기본 인프라에 대한 지식이 없어도 해당 리소스를 요청할 수 있습니다.

OpenShift Container Platform에서 많은 스토리지 유형을 영구 볼륨으로 사용할 수 있습니다. 관리자가 이를 모두 정적으로 프로비저닝할 수 있지만 일부 스토리지 유형은 기본 제공자 및 플러그인 API를 사용하여 동적으로 만들 수 있습니다.

7.5.2. OpenShift Container Storage의 동적 프로비저닝

Red Hat OpenShift Container Storage는 컨테이너 환경에 최적화된 소프트웨어 정의 스토리지입니다. OpenShift Container Platform에서 Operator로 실행되어 컨테이너에 고도로 통합되고 단순화된 영구 스토리지 관리 기능을 제공합니다.

OpenShift Container Storage는 다음을 포함하여 다양한 스토리지 유형을 지원합니다.

  • 데이터베이스용 블록 스토리지
  • 지속적인 통합, 메시징 및 데이터 집계를 위한 공유 파일 스토리지
  • 아카이브, 백업 및 미디어 스토리지를 위한 오브젝트 스토리지

버전 4에서는 Red Hat Ceph Storage를 사용하여 영구 볼륨 및 클레임을 지원하는 파일, 블록 및 오브젝트 스토리지를 제공하며, Rook.io는 영구 볼륨 및 클레임의 프로비저닝을 관리하고 오케스트레이션합니다. NooBaa는 객체 스토리지를 제공하며, Multicloud Gateway는 여러 클라우드 환경(기술 프리뷰로 사용 가능)에 걸쳐 객체 페더레이션을 허용합니다.

OpenShift Container Storage 4에서 RADOS Block Device(RBD) 및 Ceph File System(CephFS)의 Red Hat Ceph Storage Interface(CSI) 드라이버는 동적 프로비저닝 요청을 처리합니다. PVC 요청이 동적으로 입력되면 CSI 드라이버에 다음과 같은 옵션이 있습니다.

  • 볼륨 모드 Block이 있는 Ceph RBD를 기반으로 하는 ReadWriteOnce(RWO) 및 ReadWriteMany(RWX) 액세스를 사용하여 PVC를 만듭니다.
  • 볼륨 모드 파일시스템을 사용하여 Ceph RBD를 기반으로 하는 ReadWriteOnce(RWO) 액세스를 사용하여 PVC를 만듭니다.
  • 볼륨 모드 파일시스템의 CephFS를 기반으로 하는 ReadWriteOnce(RWO) 및 ReadWriteMany(RWX) 액세스를 사용하여 PVC를 생성합니다.

사용할 드라이버(RBD 또는 CephFS)의 판단은 storageclass.yaml 파일의 항목을 기반으로 합니다.

7.5.3. 사용 가능한 동적 프로비저닝 플러그인

OpenShift Container Platform은 다음과 같은 프로비저너 플러그인을 제공합니다. 이에는 클러스터의 구성된 제공자 API를 사용하여 새 스토리지 리소스의 동적 프로비저닝을 위한 일반 구현이 포함되어 있습니다.

스토리지 유형프로비저너 플러그인 이름참고

OpenStack Cinder

kubernetes.io/cinder

 

AWS Elastic Block Store (EBS)

kubernetes.io/aws-ebs

다른 영역에서 여러 클러스터를 사용할 때 동적 프로비저닝의 경우 각 노드에 Key=kubernetes.io/cluster/<cluster_name>,Value=<cluster_id>로 태그를 지정합니다. 여기서 <cluster_name><cluster_id>는 클러스터마다 고유합니다.

AWS Elastic File System (EFS)

 

동적 프로비저닝은 프로비저너 플러그인이 아닌 EFS 프로비저너 Pod를 통해 수행됩니다.

Azure Disk

kubernetes.io/azure-disk

 

Azure File

kubernetes.io/azure-file

persistent-volume-binder ServiceAccount에는 Azure 저장소 계정 및 키를 저장할 Secrets를 생성하고 검색할 수 있는 권한이 필요합니다.

GCE Persistent Disk (gcePD)

kubernetes.io/gce-pd

멀티 존 설정에서는 현재 클러스터에 노드가 없는 영역에서 PV가 생성되지 않도록 GCE 프로젝트 당 하나의 OpenShift Container Platform 클러스터를 실행하는 것이 좋습니다.

VMware vSphere

kubernetes.io/vsphere-volume

 
중요

선택한 프로비저너 플러그인에는 관련 문서에 따라 클라우드, 호스트 또는 타사 공급자를 구성해야 합니다.

8장. 볼륨 스냅샷

볼륨 스냅샷은 특정 시점에서 클러스터의 스토리지 볼륨 상태입니다. 이러한 스냅샷을 사용하면 매번 전체 복사본을 만들지 않고도 스토리지를 보다 효율적으로 사용할 수 있으며 애플리케이션 개발을 위한 빌딩 블록으로 사용할 수 있습니다.

볼륨 스냅샷 클래스를 사용하면 관리자가 볼륨 스냅샷 오브젝트에 속한 다른 속성을 지정할 수 있습니다. OpenShift Container Storage Operator는 사용 중인 플랫폼에 따라 기본 볼륨 스냅샷 클래스를 설치합니다. Operator는 이러한 기본 볼륨 스냅샷 클래스를 소유하고 제어하며 삭제하거나 수정할 수 없습니다.

동일한 PVC(영구 볼륨 클레임)의 스냅샷을 여러 개 생성할 수 있습니다. CephFS의 경우 PVC당 최대 100개의 스냅샷을 생성할 수 있습니다. RADOS Block Device(RBD)의 경우 PVC당 512개의 스냅샷을 생성할 수 있습니다.

참고

스냅샷 생성을 예약할 수 없습니다.

8.1. 볼륨 스냅샷 생성

PVC(영구 볼륨 클레임) 페이지 또는 볼륨 스냅샷 페이지에서 볼륨 스냅샷을 생성할 수 있습니다.

사전 요구 사항

  • PVC는 Bound 상태에 있어야 하며 사용할 수 없습니다.
참고

OpenShift Container Storage는 Pod가 이를 사용하는 경우 PVC의 볼륨 스냅샷에 대해서만 충돌 일관성을 제공합니다. 애플리케이션 일관성의 경우 실행 중인 Pod를 먼저 종료하여 일관된 스냅샷을 확인하거나 애플리케이션에서 제공하는 quiesce 메커니즘을 사용하여 확인합니다.

절차

영구 볼륨 클레임 페이지에서
  1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭합니다.
  2. 볼륨 스냅샷을 생성하려면 다음 중 하나를 수행하십시오.

    • 원하는 PVC에 있는 Action 메뉴(hiera ) → Create Snapshot (스냅샷 생성) 을 클릭합니다.
    • 스냅샷을 생성할 PVC를 클릭하고 작업스냅샷 생성 을 클릭합니다.
  3. 볼륨 스냅샷의 이름을 입력합니다.
  4. 드롭다운 목록에서 스냅샷 클래스 를 선택합니다.
  5. 생성을 클릭합니다. 생성된 볼륨 스냅샷의 세부 정보 페이지로 리디렉션됩니다.
볼륨 스냅샷 페이지에서
  1. OpenShift 웹 콘솔에서 스토리지볼륨 스냅샷 을 클릭합니다.
  2. Volume Snapshots (볼륨 스냅샷) 페이지에서 Create Volume Snapshot 을 클릭합니다.
  3. 드롭다운 목록에서 필요한 프로젝트를 선택합니다.
  4. 드롭다운 목록에서 영구 볼륨 클레임 을 선택합니다.
  5. 스냅샷의 이름을 입력합니다.
  6. 드롭다운 목록에서 스냅샷 클래스 를 선택합니다.
  7. 생성을 클릭합니다. 생성된 볼륨 스냅샷의 세부 정보 페이지로 리디렉션됩니다.

검증 단계

  • PVC의 세부 정보 페이지로 이동하여 볼륨 스냅샷 탭을 클릭하여 볼륨 스냅샷 목록을 확인합니다. 새 볼륨 스냅샷이 나열되었는지 확인합니다.
  • OpenShift 웹 콘솔에서 스토리지볼륨 스냅샷 을 클릭합니다. 새 볼륨 스냅샷이 나열되었는지 확인합니다.
  • 볼륨 스냅샷이 Ready 상태가 될 때까지 기다립니다.

8.2. 볼륨 스냅샷 복원

볼륨 스냅샷을 복원하면 새 PVC(영구 볼륨 클레임)가 생성됩니다. 복원된 PVC는 볼륨 스냅샷 및 상위 PVC와 독립적입니다.

영구 볼륨 클레임 페이지 또는 볼륨 스냅샷 페이지에서 볼륨 스냅샷을 복원할 수 있습니다.

절차

영구 볼륨 클레임 페이지에서

상위 PVC가 있는 경우에만 영구 볼륨 클레임 페이지에서 볼륨 스냅샷을 복원할 수 있습니다.

  1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭합니다.
  2. 새 PVC로 복원해야 하는 볼륨 스냅샷이 있는 PVC 이름을 클릭합니다.
  3. Volume Snapshots 탭에서 원하는 볼륨 스냅샷 옆에 있는 Action menu(작업 메뉴) → Restore as new PVC 를 클릭합니다.
  4. 새 PVC의 이름을 입력합니다.
  5. 스토리지 클래스 이름을 선택합니다.

    참고

    ( Rados Block Device (RBD)) 상위 PVC와 동일한 풀의 스토리지 클래스를 선택해야 합니다.

  6. 복원을 클릭합니다. 새 PVC 세부 정보 페이지로 리디렉션됩니다.
볼륨 스냅샷 페이지에서
  1. OpenShift 웹 콘솔에서 스토리지볼륨 스냅샷 을 클릭합니다.
  2. 원하는 볼륨 스냅샷 옆에 있는 Action Menu( Action Menu) → 새 PVC로 복원을 클릭합니다.
  3. 새 PVC의 이름을 입력합니다.
  4. 스토리지 클래스 이름을 선택합니다.

    참고

    ( Rados Block Device (RBD)) 상위 PVC와 동일한 풀의 스토리지 클래스를 선택해야 합니다.

  5. 복원을 클릭합니다. 새 PVC 세부 정보 페이지로 리디렉션됩니다.
참고

볼륨 스냅샷을 복원할 때 상위 PVC의 액세스 모드가 상위 PVC가 존재하는 경우에만 PVC가 생성됩니다. 그러지 않으면 PVC가 ReadWriteOnce(RWO) 액세스 모드로만 생성됩니다. 현재 OpenShift 웹 콘솔을 사용하여 액세스 모드를 지정할 수 없습니다. 그러나 YAML을 사용하여 CLI에서 액세스 모드를 지정할 수 있습니다. 자세한 내용은 볼륨 스냅샷 복원을 참조하십시오.

검증 단계

  • OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭하고 영구 볼륨 클레임 페이지에 새 PVC가 나열되는지 확인합니다.
  • 새 PVC가 Bound 상태에 도달할 때까지 기다립니다.

8.3. 볼륨 스냅샷 삭제

사전 요구 사항

  • 볼륨 스냅샷을 삭제하려면 해당 특정 볼륨 스냅샷에 사용되는 볼륨 스냅샷 클래스가 있어야 합니다.

절차

영구 볼륨 클레임 페이지
  1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭합니다.
  2. 삭제해야 하는 볼륨 스냅샷이 있는 PVC 이름을 클릭합니다.
  3. Volume Snapshots (볼륨 스냅샷) 탭에서 원하는 볼륨 스냅샷 옆에 있는 Action menu (작업 메뉴) → Delete Volume Snapshot (볼륨 스냅샷 삭제) 을 클릭합니다.
볼륨 스냅샷 페이지
  1. OpenShift 웹 콘솔에서 스토리지볼륨 스냅샷 을 클릭합니다.
  2. Volume Snapshots 페이지에서 원하는 볼륨 스냅샷 옆에 있는 Action menu (작업 메뉴) → Delete Volume Snapshot (볼륨 스냅샷 삭제) 을 클릭합니다.

검증 단계

  • PVC 세부 정보 페이지의 볼륨 스냅샷 탭에 삭제된 볼륨 스냅샷 이 없는지 확인합니다.
  • 스토리지볼륨 스냅샷 을 클릭하고 삭제된 볼륨 스냅샷이 나열되어 있지 않은지 확인합니다.

9장. 볼륨 복제

복제본은 표준 볼륨으로 사용되는 기존 스토리지 볼륨이 복제됩니다. 볼륨의 복제본을 생성하여 데이터의 특정 시점 복사를 만듭니다. PVC(영구 볼륨 클레임)는 다른 크기로 복제할 수 없습니다. CephFS 및 RADOS Block Device(RBD) 모두에 대해 PVC당 최대 512개의 복제본을 생성할 수 있습니다.

9.1. 복제 생성

사전 요구 사항

  • 소스 PVC는 Bound 상태에 있어야 하며 사용할 수 없습니다.
참고

Pod가 이를 사용하는 경우 PVC의 복제본을 생성하지 마십시오. 그러면 PVC가 quiesced(일시 중지됨)되지 않기 때문에 데이터 손상이 발생할 수 있습니다.

절차

  1. OpenShift 웹 콘솔에서 스토리지영구 볼륨 클레임 을 클릭합니다.
  2. 복제본을 생성하려면 다음 중 하나를 수행하십시오.

    • 원하는 PVC에 있어야 Action 메뉴 (작업 메뉴) → Clone PVC 복제를 클릭합니다.
    • 복제하려는 PVC를 클릭하고 작업복제 PVC 를 클릭합니다.
  3. 복제의 이름을 입력합니다.
  4. Clone 을 클릭합니다. 새 PVC 세부 정보 페이지로 리디렉션됩니다.

    참고

    복제본은 상위 PVC의 액세스 모드를 사용하여 생성됩니다. 현재 OpenShift 웹 콘솔 UI를 사용하여 액세스 모드를 지정할 수 없습니다. 그러나 YAML을 사용하여 CLI에서 액세스 모드를 지정할 수 있습니다. 자세한 내용은 CSI 볼륨 복제 프로비저닝을 참조하십시오.

  5. 복제된 PVC 상태가 Bound 가 될 때까지 기다립니다.

    이제 Pod에서 복제된 PVC를 사용할 수 있습니다. 이 복제된 PVC는 dataSource PVC와 독립적입니다.

10장. CSI(Container Storage Interface) 구성 요소 배치 관리

각 클러스터는 인프라 및 스토리지 노드와 같은 여러 전용 노드로 구성됩니다. 그러나 사용자 정의 테인트가 있는 인프라 노드는 노드에서 OpenShift Container Storage 영구 볼륨 클레임(PVC)을 사용할 수 없습니다. 따라서 이러한 노드를 사용하려면 허용 오차를 설정하여 노드에서 csi-plugins 를 가져올 수 있습니다. 자세한 내용은 https://access.redhat.com/solutions/4827161 을 참조하십시오.

절차

  1. configmap을 편집하여 사용자 정의 테인트에 대한 허용 오차를 추가합니다. 편집기를 종료하기 전에 저장해야 합니다.

    $ oc edit configmap rook-ceph-operator-config -n openshift-storage
  2. configmap 을 표시하여 추가된 허용 오차를 확인합니다.

    $ oc get configmap rook-ceph-operator-config -n openshift-storage -o yaml

    테인트에 대한 추가된 허용 오차의 출력 예, nodetype=infra:NoSchedule :

    apiVersion: v1
    data:
    [...]
      CSI_PLUGIN_TOLERATIONS: |
        - key: nodetype
          operator: Equal
          value: infra
          effect: NoSchedule
        - key: node.ocs.openshift.io/storage
          operator: Equal
          value: "true"
          effect: NoSchedule
    [...]
    kind: ConfigMap
    metadata:
    [...]
  3. csi-cephfsplugin-* 및 csi-rbdplugin-* Pod가 인프라 노드에 자동으로 나타나지 않으면 rook-ceph-operator 를 다시 시작합니다.

    $ oc delete -n openshift-storage pod <name of the rook_ceph_operator pod>

    예:

    $ oc delete -n openshift-storage pod rook-ceph-operator-5446f9b95b-jrn2j
    
    pod "rook-ceph-operator-5446f9b95b-jrn2j" deleted

검증 단계

csi-cephfsplugin-* 및 csi-rbdplugin-* Pod가 infra 노드에서 실행되고 있는지 확인합니다.