MinIO를 사용한 객체 저장소

Tier: Free, 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   팟에 할당된 우선 순위 클래스
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 [] 팟 할당을 위한 허용 라벨
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.gitlabVersion과 관련된 이미지 태그를 포함하는 global.gitlabBase.image.repository가 initContainer 이미지를 채우는 데 사용됩니다. 차트 지역 값(예: minio.init.image.tag)으로 전역 설정을 재정의할 수 있습니다.

initContainer 스크립트

initContainer에는 다음 항목이 전달됩니다:

  • /config에 장착된 인증 항목을 포함하는 시크릿으로 보통 accesskeysecretkey입니다.
  • config.json 템플릿 및 configure를 포함하는 ConfigMap으로, sh로 실행될 스크립트인 config.json을 완성하는 데 예상됩니다.
  • 데몬 컨테이너에 전달될 /minio로, minio 서버에 config.json을 제공하고자 사용됩니다.

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

인그레스 구성

이 설정은 MinIO 인그레스를 제어합니다.

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

이미지 구성

image, imageTagimagePullPolicy의 기본 설정은 상위 문서에 기록되어 있습니다.

지속성

이 차트는 PersistentVolumeClaim를 생성하고 해당하는 영구적인 볼륨을 기본 위치 /export에 장착합니다. 이를 위해 Kubernetes 클러스터에 물리적 스토리지가 있어야 합니다. emptyDir을 대신 사용하려면 persistence.enabled: false로 설정하세요.

persistence의 동작은 상위 문서에 기록되어 있습니다.

GitLab에서는 몇 가지 항목을 추가했습니다:

persistence:
  volumeName:
  matchLabels:
  matchExpressions:
이름 유형 기본값 설명
volumeName 문자열 false volumeName이 제공되면, PersistentVolumeClaim은 동적으로 PersistentVolume를 생성하는 대신 제공된 PersistentVolume를 이름으로 사용합니다. 이는 상위 동작을 재정의합니다.
matchLabels true 바인딩할 볼륨을 선택할 때 일치시킬 레이블 이름과 레이블 값의 맵을 허용합니다. 이는 PersistentVolumeClaim selector 부분에서 사용됩니다. 볼륨 문서를 참조하세요.
matchExpressions 배열   바인딩할 볼륨을 선택할 때 일치시킬 레이블 조건 객체의 배열을 허용합니다. 이는 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와 일치하고 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 명령을 사용하여 버킷을 강제로 삭제할 수 있습니다.

Security Context

이러한 옵션은 팟을 시작하는 데 사용되는 user 및/또는 group의 제어를 허용합니다.

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

서비스 유형 및 포트

이것은 상위 문서에 기술된 내용이며, 주요 요약은 다음과 같습니다:

## 클러스터 외부에서 MinIO 서비스에 액세스하도록 노출(로드밸런서 서비스).
## 또는 클러스터 내부에서 액세스합니다(ClusterIP 서비스). 서비스 유형 및 포트를 설정합니다.
## ref: http://kubernetes.io/docs/user-guide/services/
##
serviceType: LoadBalancer
servicePort: 9000

이 차트는 type: NodePort로 설정되어 있지 않으므로 해당 설정을 하지 마십시오.

상위 항목

다음에 대한 상위 문서는 이 차트에 완전히 적용됩니다:

  • resources
  • nodeSelector
  • minioConfig

minioConfig 설정의 자세한 설명은 MinIO notify 문서에서 찾을 수 있습니다. 이는 Bucket Objects에 액세스하거나 변경될 때 알림을 게시하는 세부 정보를 포함합니다.