MinIO를 사용한 객체 저장소 사용

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

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

디자인 선택 사항

upstream chart와 관련된 디자인 선택 사항은 해당 프로젝트의 README에서 찾을 수 있습니다.

GitLab은 시크릿(secret)의 구성을 단순화하고 환경 변수에서의 시크릿 사용을 모두 제거하기 위해 해당 차트를 변경하기로 선택했습니다. GitLab은 initContainer를 추가하여 config.json으로의 시크릿 채우기를 제어하고 차트 전역에서 enabled 플래그를 추가했습니다.

이 차트는 오직 하나의 시크릿을 사용합니다:

  • global.minio.credentials.secret: 버킷에 대한 인증에 사용될 accesskeysecretkey 값을 포함하는 글로벌 시크릿입니다.

구성

아래에서 구성의 모든 주요 섹션을 설명합니다. 상위 차트에서 구성할 때, 이러한 값은 다음과 같을 것입니다:

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

설치 명령줄 옵션

아래 표에는 helm install 명령을 통해 --set 플래그를 사용하여 제공할 수 있는 모든 가능한 차트 구성이 포함되어 있습니다:

매개변수 기본값 설명
common.labels {} 이 차트에 의해 생성된 모든 객체에 적용되는 보조 라벨
init.containerSecurityContext.allowPrivilegeEscalation false initContainer 특정: 프로세스가 부모 프로세스보다 더 많은 권한을 얻는지 여부를 제어합니다
init.containerSecurityContext.runAsNonRoot true initContainer 특정: 컨테이너가 비루트(root) 사용자로 실행되는지를 제어합니다
init.containerSecurityContext.capabilities.drop [ "ALL" ] initContainer 특정: 컨테이너의 Linux capabilities를 제거합니다
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   볼륨의 소유권 및 권한을 변경하는 데 필요한 정책 (Kubernetes 1.23 이상 필요)
securityContext.seccompProfile.type RuntimeDefault 사용할 Seccomp 프로필
containerSecurityContext.runAsUser 1000 컨터이너가 시작될 때 특정 보안 컨텍스트를 덮어쓸 수 있도록 허용합니다
containerSecurityContext.allowPrivilegeEscalation false GitLab 컨테이너의 프로세스가 부모 프로세스보다 더 많은 권한을 얻는지를 제어합니다
containerSecurityContext.runAsNonRoot true 컨테이너가 비루트(root) 사용자로 실행되는지를 제어합니다
containerSecurityContext.capabilities.drop [ "ALL" ] GitLab 컨테이너의 Linux capabilities를 제거합니다
serviceAccount.automountServiceAccountToken false 디폴트 서비스 계정 액세스 토큰을 팟에 장착할 지 여부를 나타냅니다
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 액세스 토큰을 팟에 장착해야 하는지를 제어합니다.

이름 유형 기본값 설명
automountServiceAccountToken Boolean false 기본 ServiceAccount 액세스 토큰을 팟에 장착해야 하는지를 제어합니다. 일부 사이드카(예: Istio)에서 정상 작동에 필요한 경우를 제외하고 이를 활성화해선 안 됩니다.

tolerations

tolerations를 사용하면 tainted된 워커 노드에 팟을 예약할 수 있습니다.

아래는 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 템플릿 및 configure를 포함하는 ConfigMap으로, sh에서 실행될 스크립트인 config.json/config에 장착합니다.
  • minio 컨테이너로 전달될 /minio 목록.

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

Ingress 구성

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

이름 유형 기본값 설명
apiVersion String   apiVersion 필드에 사용할 값입니다.
annotations String   이 필드는 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를 해제할 수 없는 경우(예: Ingress 컨트롤러 앞에 TLS를 해제하는 프록시가 있는 경우)에 주로 유용합니다.
tls.secretName String   MinIO URL에 유효한 인증서 및 키가 포함된 쿠버네티스 TLS 시크릿의 이름입니다. 설정되지 않은 경우 global.ingress.tls.secretName이 대신 사용됩니다.

이미지 구성

image, imageTagimagePullPolicy의 기본값은 상위 문서에 문서화되어 있습니다.

지속성

이 차트는 PersistentVolumeClaim를 할당하고 해당 지속성에 대한 지속적인 볼륨을 기본 위치 /export에 장착합니다. 이를 작동시키려면 쿠버네티스 클러스터에서 물리적 저장소가 필요합니다. emptyDir을 대신 사용하려면 PersistenceVolumeClaim를 비활성화하세요: persistence.enabled: false`.

persistence에 대한 동작은 상위 문서에 문서화되어 있습니다.

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

persistence:
  volumeName:
  matchLabels:
  matchExpressions:
이름 유형 기본값 설명
volumeName String false volumeName이 제공되면 PersistentVolumeClaim는 동적으로 PersistentVolume를 생성하는 대신, 제공된 PersistentVolume를 이름별로 사용합니다. 이것은 상위 동작을 무시합니다.
matchLabels Map true 바인딩할 볼륨을 선택할 때 일치시킬 레이블 이름과 레이블 값의 Map을 수용합니다. 이것은 PersistentVolumeClaim selector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요.
matchExpressions Array   바인딩할 볼륨을 선택할 때 일치시킬 레이블 조건 객체의 배열을 수용합니다. 이것은 PersistentVolumeClaim selector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요.

defaultBuckets

defaultBuckets는 MinIO 파드가 설치될 때 버킷을 자동으로 생성하는 메커니즘을 제공합니다. 이 속성에는 각각 name, policy, purge의 최대 세 가지 속성이 있는 항목 배열이 포함됩니다.

defaultBuckets:
  - name: public
    policy: public
    purge: true
  - name: private
  - name: public-read
    policy: download
이름 유형 기본값 설명
name 문자열   생성되는 버킷의 이름입니다. 제공된 값은 AWS 버킷 이름 규칙을 준수해야 합니다. 즉, DNS를 준수하고 문자열에는 a-z, 0-9, - (하이픈) 문자만 포함되어야 하며, 길이는 3에서 63 문자여야 합니다. name 속성은 모든 항목에 대해 _필수_입니다.
policy   none policy의 값은 MinIO에서 버킷의 액세스 정책을 제어합니다. policy 속성은 필수가 아니며, 기본값은 none입니다. 익명 액세스에 대한 가능한 값은 다음과 같습니다: none (익명 액세스 없음), download (익명 읽기 전용 액세스), upload (익명 쓰기 전용 액세스) 또는 public (익명 읽기/쓰기 액세스).
purge 부울   purge 속성은 설치 시 기존 버킷을 강제로 제거하기 위한 수단으로 제공됩니다. 이는 persistence의 volumeName 속성에 기존 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 알림 문서에서 찾을 수 있습니다. 이 문서에는 버킷 오브젝트에 액세스되거나 변경될 때 알림을 게시하는 세부 정보가 포함되어 있습니다.