4.3. 영구 스토리지 구성

중요

미터링은 더 이상 사용되지 않는 기능입니다. 더 이상 사용되지 않는 기능은 여전히 OpenShift Container Platform에 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새로운 배포에는 사용하지 않는 것이 좋습니다.

OpenShift Container Platform에서 더 이상 사용되지 않거나 삭제된 주요 기능의 최신 목록은 OpenShift Container Platform 릴리스 노트에서 더 이상 사용되지 않고 삭제된 기능 섹션을 참조하십시오.

미터링에는 Metering Operator에서 수집한 데이터를 유지하고 보고서 결과를 저장하기 위해 영구 스토리지가 필요합니다. 다양한 스토리지 공급자 및 스토리지 형식이 지원됩니다. 스토리지 공급자를 선택하고 예제 구성 파일을 수정하여 미터링 설치에 대한 영구 스토리지를 구성합니다.

4.3.1. Amazon S3에 데이터 저장

미터링은 기존 Amazon S3 버킷을 사용하거나 스토리지에 버킷을 생성할 수 있습니다.

참고

Metering 작업은 S3 버킷 데이터를 관리하거나 삭제하지 않습니다. 미터링 데이터를 저장하는 데 사용되는 S3 버킷은 수동으로 정리해야 합니다.

절차

  1. 아래 s3-storage.yaml 파일에서 spec.storage 섹션을 편집합니다.

    s3-storage.yaml 파일의 예

    apiVersion: metering.openshift.io/v1
    kind: MeteringConfig
    metadata:
      name: "operator-metering"
    spec:
      storage:
        type: "hive"
        hive:
          type: "s3"
          s3:
            bucket: "bucketname/path/" 1
            region: "us-west-1" 2
            secretName: "my-aws-secret" 3
            # Set to false if you want to provide an existing bucket, instead of
            # having metering create the bucket on your behalf.
            createBucket: true 4

    1
    데이터를 저장하려는 버킷의 이름을 지정합니다. 선택 사항: 버킷 내 경로를 지정합니다.
    2
    버킷의 리전을 지정합니다.
    3
    data.aws-access-key-iddata.aws-secret-access-key 필드에 AWS 인증 정보를 포함하는 미터링 네임스페이스의 시크릿 이름입니다. 자세한 내용은 아래 Secret 오브젝트 예제를 참조하십시오.
    4
    기존 S3 버킷을 제공하거나 CreateBucket 권한이 있는 IAM 인증 정보를 제공하지 않으려면 이 필드를 false로 설정합니다.
  2. 다음 Secret 오브젝트를 템플릿으로 사용합니다.

    AWS Secret 오브젝트의 예

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-aws-secret
    data:
      aws-access-key-id: "dGVzdAo="
      aws-secret-access-key: "c2VjcmV0Cg=="

    참고

    aws-access-key-idaws-secret-access-key의 값은 base64로 인코딩되어야 합니다.

  3. 시크릿을 생성합니다.

    $ oc create secret -n openshift-metering generic my-aws-secret \
      --from-literal=aws-access-key-id=my-access-key \
      --from-literal=aws-secret-access-key=my-secret-key
    참고

    이 명령은 aws-access-key-idaws-secret-access-key 값을 자동으로 base64로 인코딩합니다.

aws-access-key-idaws-secret-access-key 인증 정보에 버킷에 대한 읽기 및 쓰기 권한이 있어야 합니다. 다음 aws/read-write.json 파일은 필요한 권한을 부여하는 IAM 정책을 보여줍니다.

aws/read-write.json 파일의 예

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:HeadBucket",
                "s3:ListBucket",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::operator-metering-data/*",
                "arn:aws:s3:::operator-metering-data"
            ]
        }
    ]
}

spec.storage.hive.s3.createBuckettrue로 설정하거나 s3-storage.yaml에 설정하지 않은 경우 버킷 생성 및 삭제 권한이 포함된 aws/read-write-create.json 파일을 사용해야 합니다.

aws/read-write-create.json 파일의 예

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:HeadBucket",
                "s3:ListBucket",
                "s3:CreateBucket",
                "s3:DeleteBucket",
                "s3:ListMultipartUploadParts",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::operator-metering-data/*",
                "arn:aws:s3:::operator-metering-data"
            ]
        }
    ]
}

4.3.2. S3 호환 스토리지에 데이터 저장

Noobaa와 같은 S3 호환 스토리지를 사용할 수 있습니다.

절차

  1. 아래 s3-compatible-storage.yaml 파일 예에서 spec.storage 섹션을 편집합니다.

    s3-compatible-storage.yaml 파일의 예

    apiVersion: metering.openshift.io/v1
    kind: MeteringConfig
    metadata:
      name: "operator-metering"
    spec:
      storage:
        type: "hive"
        hive:
          type: "s3Compatible"
          s3Compatible:
            bucket: "bucketname" 1
            endpoint: "http://example:port-number" 2
            secretName: "my-aws-secret" 3

    1
    S3 호환 버킷의 이름을 지정합니다.
    2
    스토리지의 끝점을 지정합니다.
    3
    data.aws-access-key-iddata.aws-secret-access-key 필드에 AWS 인증 정보를 포함하는 미터링 네임스페이스의 시크릿 이름입니다. 자세한 내용은 아래 Secret 오브젝트 예제를 참조하십시오.
  2. 다음 Secret 오브젝트를 템플릿으로 사용합니다.

    S3 호환 Secret 오브젝트의 예

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-aws-secret
    data:
      aws-access-key-id: "dGVzdAo="
      aws-secret-access-key: "c2VjcmV0Cg=="

4.3.3. Microsoft Azure에 데이터 저장

데이터를 Azure Blob 스토리지에 저장하려면 기존 컨테이너를 사용해야 합니다.

프로세스

  1. azure-blob-storage.yaml 파일에서 spec.storage 섹션을 편집합니다.

    azure-blob-storage.yaml 파일 예

    apiVersion: metering.openshift.io/v1
    kind: MeteringConfig
    metadata:
      name: "operator-metering"
    spec:
      storage:
        type: "hive"
        hive:
          type: "azure"
          azure:
            container: "bucket1" 1
            secretName: "my-azure-secret" 2
            rootDirectory: "/testDir" 3

    1
    컨테이너 이름을 지정합니다.
    2
    미터링 네임스페이스에 시크릿을 지정합니다. 자세한 내용은 아래 Secret 오브젝트 예제를 참조하십시오.
    3
    선택 사항: 데이터를 저장하려는 디렉터리를 지정합니다.
  2. 다음 Secret 오브젝트를 템플릿으로 사용합니다.

    Azure Secret 오브젝트의 예

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-azure-secret
    data:
      azure-storage-account-name: "dGVzdAo="
      azure-secret-access-key: "c2VjcmV0Cg=="

  3. 시크릿을 생성합니다.

    $ oc create secret -n openshift-metering generic my-azure-secret \
      --from-literal=azure-storage-account-name=my-storage-account-name \
      --from-literal=azure-secret-access-key=my-secret-key

4.3.4. Google Cloud Storage에 데이터 저장

데이터를 Google Cloud Storage에 저장하려면 기존 버킷을 사용해야 합니다.

프로세스

  1. 아래 gcs-storage.yaml 파일 예에서 spec.storage 섹션을 편집합니다.

    gcs-storage.yaml 파일 예

    apiVersion: metering.openshift.io/v1
    kind: MeteringConfig
    metadata:
      name: "operator-metering"
    spec:
      storage:
        type: "hive"
        hive:
          type: "gcs"
          gcs:
            bucket: "metering-gcs/test1" 1
            secretName: "my-gcs-secret" 2

    1
    버킷 이름을 지정합니다. 선택적으로 데이터를 저장하려는 버킷 내 디렉터리를 지정할 수 있습니다.
    2
    미터링 네임스페이스에 시크릿을 지정합니다. 자세한 내용은 아래 Secret 오브젝트 예제를 참조하십시오.
  2. 다음 Secret 오브젝트를 템플릿으로 사용합니다.

    Google Cloud Storage Secret 오브젝트의 예

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-gcs-secret
    data:
      gcs-service-account.json: "c2VjcmV0Cg=="

  3. 시크릿을 생성합니다.

    $ oc create secret -n openshift-metering generic my-gcs-secret \
      --from-file gcs-service-account.json=/path/to/my/service-account-key.json

4.3.5. 공유 볼륨에 데이터 저장

미터링은 기본적으로 스토리지를 구성하지 않습니다. 그러나 ReadWriteMany PV(영구 볼륨)를 사용하거나 미터링 스토리지에 대한 ReadWriteMany PV를 프로비저닝하는 모든 스토리지 클래스를 사용할 수 있습니다.

참고

NFS를 프로덕션 환경에서 사용하지 않는 것이 좋습니다. RHEL의 NFS 서버를 스토리지 백엔드로 사용하면 미터링 요구 사항을 충족하지 못하고 Metering Operator가 제대로 작동하는 데 필요한 성능을 제공하지 못할 수 있습니다.

마켓플레이스의 다른 NFS 구현에는 PNFS(Parallel Network File System)와 같은 이러한 문제가 발생하지 않을 수 있습니다. pNFS는 분산 및 병렬 기능을 갖춘 NFS 구현입니다. OpenShift Container Platform 핵심 구성 요소에 대해 완료된 테스트에 대한 자세한 내용은 개별 NFS 구현 벤더에 문의하십시오.

프로세스

  1. 스토리지에 대한 ReadWriteMany 영구 볼륨을 사용하도록 shared-storage.yaml 파일을 수정합니다.

    apiVersion: metering.openshift.io/v1
    kind: MeteringConfig
    metadata:
      name: "operator-metering"
    spec:
      storage:
        type: "hive"
        hive:
          type: "sharedPVC"
          sharedPVC:
            claimName: "metering-nfs" 1
            # Uncomment the lines below to provision a new PVC using the specified storageClass. 2
            # createPVC: true
            # storageClass: "my-nfs-storage-class"
            # size: 5Gi

    아래 설정 옵션 중 하나를 선택합니다.

    1
    storage.hive.sharedPVC.claimName을 기존 ReadWriteMany 영구 볼륨 클레임(PVC) 이름으로 설정합니다. 동적 볼륨 프로비저닝이 없거나 영구 볼륨 생성 방법에 대한 더 많은 제어가 필요한 경우 이 구성이 필요합니다.
    2
    storage.hive.sharedPVC.createPVCtrue로 설정하고 storage.hive.sharedPVC.storageClass를 ReadWriteMany 액세스 모드가 있는 스토리지 클래스 이름으로 설정합니다. 이 설정은 동적 볼륨 프로비저닝을 사용하여 자동으로 볼륨을 생성합니다.
  2. 미터링을 위해 NFS 서버를 배포하는 데 필요한 다음 리소스 오브젝트를 생성합니다. oc create -f <file-name>.yaml 명령을 사용하여 오브젝트 YAML 파일을 생성합니다.

    1. PersistentVolume 리소스 오브젝트를 구성합니다.

      nfs_persistentvolume.yaml 예제 파일

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: nfs
        labels:
          role: nfs-server
      spec:
        capacity:
          storage: 5Gi
        accessModes:
        - ReadWriteMany
        storageClassName: nfs-server 1
        nfs:
          path: "/"
          server: REPLACEME
        persistentVolumeReclaimPolicy: Delete

      1
      [kind: StorageClass].metadata.name 필드 값.
    2. nfs-server 역할을 사용하여 Pod 리소스 오브젝트를 구성합니다.

      nfs_server.yaml 예제 파일

      apiVersion: v1
      kind: Pod
      metadata:
        name: nfs-server
        labels:
          role: nfs-server
      spec:
        containers:
          - name: nfs-server
            image: <image_name> 1
            imagePullPolicy: IfNotPresent
            ports:
              - name: nfs
                containerPort: 2049
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: "/mnt/data"
              name: local
        volumes:
          - name: local
            emptyDir: {}

      1
      NFS 서버 이미지를 설치합니다.
    3. nfs-server 역할을 사용하여 Service 리소스 오브젝트를 구성합니다.

      nfs_service.yaml 예제 파일

      apiVersion: v1
      kind: Service
      metadata:
        name: nfs-service
        labels:
          role: nfs-server
      spec:
        ports:
        - name: 2049-tcp
          port: 2049
          protocol: TCP
          targetPort: 2049
        selector:
          role: nfs-server
        sessionAffinity: None
        type: ClusterIP

    4. StorageClass 리소스 오브젝트를 구성합니다.

      nfs_storageclass.yaml 예제 파일

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: nfs-server 1
      provisioner: example.com/nfs
      parameters:
        archiveOnDelete: "false"
      reclaimPolicy: Delete
      volumeBindingMode: Immediate

      1
      [kind: PersistentVolume].spec.storageClassName 필드 값입니다.
주의

NFS 스토리지 및 관련 리소스 오브젝트의 구성은 미터링 스토리지에 사용하는 NFS 서버 이미지에 따라 다릅니다.