MinIO를 사용한 오브젝트 스토리지

Tier: Free, Premium, Ultimate Offering: Self-managed

이 차트는 stable/minio
버전 0.4.3를 기반으로 하며,
거기에서 대부분의 설정을 상속받습니다.

디자인 선택

업스트림 차트와 관련된 디자인 선택은
프로젝트의 README에서 찾을 수 있습니다.

GitLab은 비밀(secrets) 구성을 간소화하고 환경 변수에서 모든 비밀 사용을 제거하기 위해
그 차트를 수정하기로 선택했습니다. GitLab은 config.json에 비밀을 채우기 위해
initContainer를 추가하고 전체 차트에서 사용할 enabled 플래그를 추가했습니다.

이 차트는 하나의 비밀만 사용합니다:

  • global.minio.credentials.secret: 버킷에 대한 인증에 사용되는 accesskey
    secretkey 값을 포함하는 전역 비밀입니다.

구성

구성의 모든 주요 섹션을 아래에서 설명합니다. 부모 차트에서 구성할 때, 이 값들은 다음과 같습니다:

minio:
  init:
  ingress:
    enabled:
    apiVersion:
    tls:
      enabled:
      secretName:
    annotations:
    configureCertmanager:
    proxyReadTimeout:
    proxyBodySize:
    proxyBuffering:
  tolerations:
  persistence:  # Upstream
    volumeName:
    matchLabels:
    matchExpressions:
  serviceType:  # Upstream
  servicePort:  # Upstream
  defaultBuckets:
  minioConfig:  # Upstream

설치 명령줄 옵션

아래 테이블은 --set 플래그를 사용하여 helm install 명령에 공급할 수 있는 모든 가능한 차트 구성입니다:

매개변수 기본값 설명
common.labels {} 이 차트에 의해 생성된 모든 객체에 적용되는 보조 레이블입니다.
init.containerSecurityContext.allowPrivilegeEscalation false initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지를 제어합니다.
init.containerSecurityContext.runAsNonRoot true initContainer 특정: 컨테이너가 비 루트 사용자로 실행되는지를 제어합니다.
init.containerSecurityContext.capabilities.drop [ "ALL" ] initContainer 특정: 컨테이너에 대한 Linux 능력을 제거합니다.
defaultBuckets [{"name": "registry"}] MinIO 기본 버킷
deployment.strategy { type: Recreate } 배포에 의해 사용되는 업데이트 전략을 구성할 수 있습니다.
image minio/minio MinIO 이미지
imagePullPolicy Always MinIO 이미지 풀 정책
imageTag RELEASE.2017-12-28T01-21-00Z MinIO 이미지 태그
minioConfig.browser on MinIO 브라우저 플래그
minioConfig.domain   MinIO 도메인
minioConfig.region us-east-1 MinIO 지역
minioMc.image minio/mc MinIO mc 이미지
minioMc.tag latest MinIO mc 이미지 태그
mountPath /export MinIO 구성 파일 마운트 경로
persistence.accessMode ReadWriteOnce MinIO 지속성 접근 모드
persistence.enabled true MinIO 지속성 활성화 플래그
persistence.matchExpressions   MinIO 레이블-표현식 매치 바인딩
persistence.matchLabels   MinIO 레이블-값 매치 바인딩
persistence.size 10Gi MinIO 지속성 볼륨 크기
persistence.storageClass   MinIO 프로비저닝을 위한 storageClassName
persistence.subPath   MinIO 지속성 볼륨 마운트 경로
persistence.volumeName   MinIO 기존 지속성 볼륨 이름
priorityClassName   우선 클래스이 포드에 할당됩니다.
pullSecrets   이미지 리포지토리를 위한 비밀
resources.requests.cpu 250m MinIO 최소 요청 CPU
resources.requests.memory 256Mi MinIO 최소 요청 메모리
securityContext.fsGroup 1000 포드를 시작하는 그룹 ID
securityContext.runAsUser 1000 포드를 시작하는 사용자 ID
securityContext.fsGroupChangePolicy   볼륨의 소유권 및 권한을 변경하는 정책(쿠버네티스 1.23 필요)
securityContext.seccompProfile.type RuntimeDefault 사용할 Seccomp 프로필
containerSecurityContext.runAsUser 1000 컨테이너가 시작될 특정 보안 컨텍스트를 덮어쓸 수 있도록 허용합니다.
containerSecurityContext.allowPrivilegeEscalation false Gitaly 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 얻을 수 있는지를 제어합니다.
containerSecurityContext.runAsNonRoot true 컨테이너가 비 루트 사용자로 실행되는지를 제어합니다.
containerSecurityContext.capabilities.drop [ "ALL" ] Gitaly 컨테이너에 대한 Linux 능력을 제거합니다.
serviceAccount.automountServiceAccountToken false 기본 ServiceAccount 접근 토큰이 포드에 자동으로 마운트되어야 하는지를 나타냅니다.
servicePort 9000 MinIO 서비스 포트
serviceType ClusterIP MinIO 서비스 유형
tolerations [] 포드 할당을 위한 관용 레이블
jobAnnotations {} 잡 스펙을 위한 주석

차트 구성 예시

pullSecrets

pullSecrets는 포드를 위한 이미지를 가져오기 위해 개인 레지스트리에 인증할 수 있도록 해줍니다.

개인 레지스트리 및 해당 인증 방법에 대한 추가 세부정보는 Kubernetes 문서에서 확인할 수 있습니다.

아래는 pullSecrets의 사용 예시입니다:

image: my.minio.repository
imageTag: latest
imagePullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-name

serviceAccount

이 섹션은 기본 ServiceAccount 액세스 토큰이 pods에 마운트되는지를 제어합니다.

이름 유형 기본값 설명
automountServiceAccountToken Boolean false 기본 ServiceAccount 액세스 토큰이 pods에 마운트되는지를 제어합니다. 특정 사이드카가 제대로 작동하는 데 필요하지 않으면 이 기능을 활성화하지 않는 것이 좋습니다(예: Istio와 같은).

tolerations

tolerations는 오염된 작업자 노드에 포드를 스케줄할 수 있도록 허용합니다.

아래는 tolerations의 사용 예시입니다:

tolerations:
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoSchedule"
- key: "node_label"
  operator: "Equal"
  value: "true"
  effect: "NoExecute"

하위 차트 활성화

우리가 선택한 분리된 하위 차트를 구현하는 방법에는 특정 배포에서 원하지 않을 수 있는 구성 요소를 비활성화할 수 있는 기능이 포함됩니다. 이러한 이유로 첫 번째로 결정해야 할 설정은 enabled:입니다.

기본적으로 MinIO는 즉시 사용할 수 있도록 활성화되어 있지만, 프로덕션 사용에는 권장되지 않습니다.

비활성화할 준비가 될 때 --set global.minio.enabled: false를 실행하세요.

initContainer 구성

드물게 변경되지만, initContainer 동작은 다음 항목을 통해 변경할 수 있습니다:

init:
  image:
    repository:
    tag:
    pullPolicy: IfNotPresent
  script:

initContainer 이미지

initContainer 이미지 설정은 일반 이미지 구성과 동일합니다.

기본적으로 차트 로컬 값은 비어 있으며, 전역 설정인 global.gitlabBase.image.repository와 현재 global.gitlabVersion과 연결된 이미지 태그가 initContainer 이미지를 채우는 데 사용됩니다.

전역 구성은 차트 로컬 값(예: minio.init.image.tag)에 의해 덮어쓸 수 있습니다.

initContainer 스크립트

initContainer는 다음 항목을 전달받습니다:

  • /config에 마운트된 인증 항목을 포함하는 비밀로, 일반적으로 accesskeysecretkey입니다.
  • config.json 템플릿을 포함하는 ConfigMap과 sh로 실행할 스크립트를 포함하는 configure/config에 마운트됩니다.
  • /minio에 마운트된 emptyDir이 데몬의 컨테이너에 전달됩니다.

initContainer는 /minio/config.json을 완료된 구성으로 채우도록 예상됩니다. /config/configure 스크립트를 사용합니다. minio-config 컨테이너가 해당 작업을 완료하면 /minio 디렉터리가 minio 컨테이너에 전달되어 MinIO 서버에 config.json을 제공합니다.

Ingress 구성

이 설정은 MinIO Ingress를 제어합니다.

이름 유형 기본값 설명
apiVersion 문자열   apiVersion 필드에서 사용할 값입니다.
annotations 문자열   이 필드는 Kubernetes Ingress의 표준 annotations와 정확히 일치합니다.
enabled Boolean false 서비스에 대한 Ingress 객체를 생성할지 여부를 제어하는 설정입니다. false일 경우 global.ingress.enabled 설정이 사용됩니다.
configureCertmanager Boolean   Ingress 주석 cert-manager.io/issueracme.cert-manager.io/http01-edit-in-place를 전환합니다. 자세한 내용은 GitLab Pages의 TLS 요구 사항을 참조하세요.
tls.enabled Boolean true false로 설정하면 MinIO에 대한 TLS가 비활성화됩니다. 이는 Ingress 수준에서 TLS 종료를 사용할 수 없을 때 유용합니다.
tls.secretName 문자열   MinIO URL에 대한 유효한 인증서와 키를 포함하는 Kubernetes TLS 비밀의 이름입니다. 설정되지 않은 경우 global.ingress.tls.secretName이 대신 사용됩니다.

이미지 구성

image, imageTagimagePullPolicy의 기본값은
업스트림에 문서화되어 있습니다.

지속성

이 차트는 PersistentVolumeClaim을 프로비저닝하고
상응하는 지속적인 볼륨을 기본 위치 /export에 마운트합니다.
이 기능이 작동하려면 Kubernetes 클러스터에 물리적 저장소가 필요합니다.
emptyDir를 사용하려면 PersistentVolumeClaim을 비활성화하세요:
persistence.enabled: false.

persistence의 동작은
업스트림에 문서화되어 있습니다.

GitLab은 몇 가지 항목을 추가했습니다:

persistence:
  volumeName:
  matchLabels:
  matchExpressions:
이름 유형 기본값 설명
volumeName 문자열 false volumeName이 제공되면, PersistentVolumeClaim은 제공된 이름의 PersistentVolume을 사용하며, 동적으로 PersistentVolume을 생성하는 대신 이를 사용하게 됩니다. 이는 업스트림 동작을 재정의합니다.
matchLabels true 바인딩할 볼륨을 선택할 때 일치하는 레이블 이름 및 레이블 값의 맵을 수락합니다. 이는 PersistentVolumeClaimselector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요.
matchExpressions 배열   바인딩할 볼륨을 선택할 때 일치하는 레이블 조건 객체의 배열을 수락합니다. 이는 PersistentVolumeClaimselector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요.

기본 버킷

defaultBuckets설치 시 MinIO 포드에서
버킷을 자동으로 생성하는 메커니즘을 제공합니다.
이 속성은 최대 세 가지 속성인 name, policypurge가 포함된 항목의 배열을 포함합니다.

defaultBuckets:
  - name: public
    policy: public
    purge: true
  - name: private
  - name: public-read
    policy: download
이름 유형 기본값 설명
name 문자열   생성되는 버킷의 이름입니다. 제공된 값은 AWS 버킷 명명 규칙에 부합해야 하며, DNS 준수 및 3~63자의 문자열에 a-z, 0-9, – (하이픈)만 포함되어야 합니다. name 속성은 모든 항목에 대해 _필수_입니다.
policy   none policy의 값은 MinIO에서 버킷의 접근 정책을 제어합니다. policy 속성은 필수가 아니며 기본값은 none입니다. 익명 접근과 관련하여 가능한 값은: none (익명 접근 없음), download (익명 읽기 전용 접근), upload (익명 쓰기 전용 접근) 또는 public (익명 읽기/쓰기 접근)입니다.
purge 불리언   purge 속성은 설치 시 기존 버킷을 강제로 제거할 수 있는 수단으로 제공됩니다. 이는 persistence의 volumeName 속성에 대해 기존의 PersistentVolume을 사용할 때만 적용됩니다. 동적으로 생성된 PersistentVolume을 사용하는 경우, 이는 차트 설치 시에만 발생하며 방금 생성된 PersistentVolume에는 데이터가 없으므로 효과가 없습니다. 이 속성은 필수가 아니지만, 강제로 버킷을 제거하기 위해 true 값을 지정할 수 있습니다: mc rm -r --force.

보안 컨텍스트

이러한 옵션을 사용하면 팟을 시작하는 데 사용되는 user 및/또는 group을 제어할 수 있습니다.

보안 컨텍스트에 대한 자세한 정보는 공식 Kubernetes 문서를 참조하세요.

서비스 유형 및 포트

이들은 문서화된 업스트림이며, 핵심 요약은 다음과 같습니다:

## 클러스터 외부에서 접근할 수 있도록 MinIO 서비스를 노출합니다 (LoadBalancer 서비스).
## 또는 클러스터 내에서 접근합니다 (ClusterIP 서비스). 서비스 유형과 포트를 설정하여 제공합니다.
## ref: http://kubernetes.io/docs/user-guide/services/
##
serviceType: LoadBalancer
servicePort: 9000

차트는 type: NodePort일 것으로 예상하지 않으므로, 절대 그렇게 설정하지 마세요.

업스트림 항목

다음에 대한 업스트림 문서가 이 차트에도 완전히 적용됩니다:

  • resources
  • nodeSelector
  • minioConfig

minioConfig 설정에 대한 추가 설명은 MinIO 알림 문서에서 찾을 수 있습니다. 여기에는 버킷 객체에 접근하거나 변경될 때 알림을 게시하는 방법에 대한 세부 정보가 포함되어 있습니다.