MinIO를 사용한 객체 리포지터리 사용

Tier: 무료, Premium, Ultimate Offering: Self-Managed

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

디자인 선택

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

GitLab은 시크릿의 구성을 단순화하고 환경 변수에서 시크릿 사용을 모두 제거하기 위해 해당 차트를 변경하기로 결정했습니다. 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:  # 상위
    volumeName:
    matchLabels:
    matchExpressions:
  serviceType:  # 상위
  servicePort:  # 상위
  defaultBuckets:
  minioConfig:  # 상위

설치 명령줄 옵션

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

매개변수 기본값 설명
common.labels {} 이 차트에 의해 생성된 모든 오브젝트에 적용되는 보조 라벨
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   파드에 할당된 Priority 클래스
pullSecrets   이미지 리포지터리의 비공개 레지스트리에 인증하기 위한 시크릿
replicas 4 MinIO 복제본 수
resources.requests.cpu 250m MinIO 최소 CPU 요청
resources.requests.memory 256Mi MinIO 최소 메모리 요청
securityContext.fsGroup 1000 파드 시작을 위한 그룹 ID
securityContext.runAsUser 1000 파드 시작을 위한 사용자 ID
securityContext.fsGroupChangePolicy   볼륨 소유권 및 권한 변경 정책 (Kubernetes 1.23 이상 필요)
servicePort 9000 MinIO 서비스 포트
serviceType ClusterIP MinIO 서비스 유형
tolerations [] 파드 할당을 위한 Toleration 라벨
jobAnnotations {} 작업 스펙을 위한 어노테이션

차트 구성 예시

pullSecrets

pullSecrets를 사용하면 파드에 이미지를 끌어오기 위해 비공개 리포지터리에 인증할 수 있습니다.

비공개 리포지터리 및 그들의 인증 방법에 대한 추가 세부 정보는 Kubernetes 문서에서 찾을 수 있습니다.

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

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

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 템플릿과 configure를 실행하기 위해 sh에 장착된 ConfigMap, /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 부울 false 해당 값을 설정하여 지원하는 서비스에 대한 Ingress 객체를 생성할지 여부를 제어합니다. false일 때 global.ingress.enabled 설정이 사용됩니다.
configureCertmanager 부울   Ingress 주석 cert-manager.io/issueracme.cert-manager.io/http01-edit-in-place를 토글합니다. 자세한 내용은 GitLab Pages의 TLS 요구사항을 참조하십시오.
tls.enabled 부울 true false로 설정하면 MinIO의 TLS를 비활성화합니다. 이것은 주로 Ingress 수준에서 TLS 종료를 사용할 수 없는 경우에 유용합니다.
tls.secretName 문자열   MinIO URL에 대한 유효한 인증서와 키를 포함하는 Kubernetes TLS Secret의 이름입니다. 설정되지 않은 경우 global.ingress.tls.secretName이 대신 사용됩니다.

이미지 구성

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

Persistence

이 차트는 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

defaultBuckets는 MinIO pod에 자동으로 버킷을 만드는 메커니즘을 제공합니다. 이 속성은 각각 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 속성은 설치 시 기존 버킷을 강제로 제거하는 수단으로 제공됩니다. 이것은 persistencevolumeName 속성을 사용할 때만 작용합니다. 동적으로 생성된 PersistentVolume을 사용하는 경우 이것은 가치 있는 효과가 없으며 차트 설치 시만 발생하므로 방금 생성한 PersistentVolume에 데이터가 없을 것입니다. 이 속성은 필수가 아니지만 true 값을 명시하여 버킷을 mc rm -r --force로 강제로 삭제할 수 있습니다.

보안 컨텍스트

이 옵션들은 pod을 시작하는 데 사용되는 user 및/또는 group을 제어합니다.

보안 컨텍스트에 대한 심층적인 정보는 공식 Kubernetes 문서를 참조하십시오.

서비스 유형 및 포트

이는 상위 문서에 문서화되어 있으며, 주요 요약은 다음과 같습니다:

## Expose the MinIO service to be accessed from outside the cluster (LoadBalancer service).
## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
## ref: http://kubernetes.io/docs/user-guide/services/
##
serviceType: LoadBalancer
servicePort: 9000

차트가 type: NodePort로 예상되지 않으므로 이러한 형태로 설정하지 마십시오.

상위 항목

다음의 상위 문서도 이 차트에 완전히 적용됩니다:

  • resources
  • nodeSelector
  • minioConfig

minioConfig 설정에 대한 자세한 설명은 MinIO notify 문서에서 찾을 수 있습니다. 이것은 버킷 개체에 액세스 또는 변경이 발생할 때 알림을 발행하는 세부 정보를 포함합니다.