4.3. 영구 스토리지 구성
미터링은 더 이상 사용되지 않는 기능입니다. 더 이상 사용되지 않는 기능은 여전히 OpenShift Container Platform에 포함되어 있으며 계속 지원됩니다. 그러나 이 기능은 향후 릴리스에서 제거될 예정이므로 새로운 배포에는 사용하지 않는 것이 좋습니다.
OpenShift Container Platform에서 더 이상 사용되지 않거나 삭제된 주요 기능의 최신 목록은 OpenShift Container Platform 릴리스 노트에서 더 이상 사용되지 않고 삭제된 기능 섹션을 참조하십시오.
미터링에는 Metering Operator에서 수집한 데이터를 유지하고 보고서 결과를 저장하기 위해 영구 스토리지가 필요합니다. 다양한 스토리지 공급자 및 스토리지 형식이 지원됩니다. 스토리지 공급자를 선택하고 예제 구성 파일을 수정하여 미터링 설치에 대한 영구 스토리지를 구성합니다.
4.3.1. Amazon S3에 데이터 저장
미터링은 기존 Amazon S3 버킷을 사용하거나 스토리지에 버킷을 생성할 수 있습니다.
Metering 작업은 S3 버킷 데이터를 관리하거나 삭제하지 않습니다. 미터링 데이터를 저장하는 데 사용되는 S3 버킷은 수동으로 정리해야 합니다.
절차
아래
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
다음
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-id
및aws-secret-access-key
의 값은 base64로 인코딩되어야 합니다.시크릿을 생성합니다.
$ 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-id
및aws-secret-access-key
값을 자동으로 base64로 인코딩합니다.
aws-access-key-id
및 aws-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.createBucket
을 true
로 설정하거나 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 호환 스토리지를 사용할 수 있습니다.
절차
아래
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
다음
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 스토리지에 저장하려면 기존 컨테이너를 사용해야 합니다.
프로세스
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
다음
Secret
오브젝트를 템플릿으로 사용합니다.Azure
Secret
오브젝트의 예apiVersion: v1 kind: Secret metadata: name: my-azure-secret data: azure-storage-account-name: "dGVzdAo=" azure-secret-access-key: "c2VjcmV0Cg=="
시크릿을 생성합니다.
$ 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에 저장하려면 기존 버킷을 사용해야 합니다.
프로세스
아래
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
다음
Secret
오브젝트를 템플릿으로 사용합니다.Google Cloud Storage
Secret
오브젝트의 예apiVersion: v1 kind: Secret metadata: name: my-gcs-secret data: gcs-service-account.json: "c2VjcmV0Cg=="
시크릿을 생성합니다.
$ 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 구현 벤더에 문의하십시오.
프로세스
스토리지에 대한 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.createPVC
를true
로 설정하고storage.hive.sharedPVC.storageClass
를 ReadWriteMany 액세스 모드가 있는 스토리지 클래스 이름으로 설정합니다. 이 설정은 동적 볼륨 프로비저닝을 사용하여 자동으로 볼륨을 생성합니다.
미터링을 위해 NFS 서버를 배포하는 데 필요한 다음 리소스 오브젝트를 생성합니다.
oc create -f <file-name>.yaml
명령을 사용하여 오브젝트 YAML 파일을 생성합니다.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
필드 값.
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 서버 이미지를 설치합니다.
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
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 서버 이미지에 따라 다릅니다.