- 디자인 선택
- 구성
- 차트 구성 예시
- 하위 차트 활성화
- initContainer 구성
- Ingress 구성
- 이미지 구성
- 지속성
- 기본 버킷
- 보안 컨텍스트
- 서비스 유형 및 포트
- 업스트림 항목
MinIO를 사용한 오브젝트 스토리지
이 차트는 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
에 마운트된 인증 항목을 포함하는 비밀로, 일반적으로accesskey
와secretkey
입니다. -
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/issuer 및 acme.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
, imageTag
및 imagePullPolicy
의 기본값은
업스트림에 문서화되어 있습니다.
지속성
이 차트는 PersistentVolumeClaim
을 프로비저닝하고
상응하는 지속적인 볼륨을 기본 위치 /export
에 마운트합니다.
이 기능이 작동하려면 Kubernetes 클러스터에 물리적 저장소가 필요합니다.
emptyDir
를 사용하려면 PersistentVolumeClaim
을 비활성화하세요:
persistence.enabled: false
.
persistence
의 동작은
업스트림에 문서화되어 있습니다.
GitLab은 몇 가지 항목을 추가했습니다:
persistence:
volumeName:
matchLabels:
matchExpressions:
이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
volumeName |
문자열 | false |
volumeName 이 제공되면, PersistentVolumeClaim 은 제공된 이름의 PersistentVolume 을 사용하며, 동적으로 PersistentVolume 을 생성하는 대신 이를 사용하게 됩니다. 이는 업스트림 동작을 재정의합니다. |
matchLabels |
맵 | true |
바인딩할 볼륨을 선택할 때 일치하는 레이블 이름 및 레이블 값의 맵을 수락합니다. 이는 PersistentVolumeClaim 의 selector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요. |
matchExpressions |
배열 | 바인딩할 볼륨을 선택할 때 일치하는 레이블 조건 객체의 배열을 수락합니다. 이는 PersistentVolumeClaim 의 selector 섹션에서 사용됩니다. 볼륨 문서를 참조하세요. |
기본 버킷
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 . |
보안 컨텍스트
이러한 옵션을 사용하면 팟을 시작하는 데 사용되는 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 알림 문서에서 찾을 수 있습니다. 여기에는 버킷 객체에 접근하거나 변경될 때 알림을 게시하는 방법에 대한 세부 정보가 포함되어 있습니다.