オブジェクトストレージにMinIOを使用する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
このチャートは、stable/minioバージョン0.4.3に基づいており、ほとんどの設定をそこから継承します。
設計の選択
アップストリームチャートに関連する設計上の選択については、プロジェクトのReadmeに記載されています。
GitLabは、シークレットの設定を簡素化し、環境変数でのシークレットの使用をすべて削除するために、そのチャートを変更することを選択しました。GitLabは、config.jsonにシークレットを入力する処理を制御するためにinitContainerを追加し、チャート全体のenabledフラグを追加しました。
このチャートは、1つのシークレットのみを使用します:
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:
annotations:
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.annotations | MinIO PersistentVolumeClaim注釈 | |
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 | Gitalyコンテナのプロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します |
containerSecurityContext.runAsNonRoot | true | コンテナを非ルートユーザーで実行するかどうかを制御します |
containerSecurityContext.capabilities.drop | [ "ALL" ] | GitalyコンテナのLinuxケイパビリティを削除します |
serviceAccount.automountServiceAccountToken | false | デフォルトのServiceAccountアクセストークンをポッドにマウントするかどうかを示します |
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-nameserviceAccount
このセクションでは、ポッドにデフォルトのServiceAccountアクセストークンをマウントするかどうかを制御します。
| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
automountServiceAccountToken | ブール値 | 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を実行します。
initContainerinitContainerを設定します。
めったに変更されませんが、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、および/configにマウントされたshで実行されるスクリプトを含むconfigure。- デーモンのコンテナに渡される
/minioにマウントされたemptyDir。
InitContainerは、/config/configureスクリプトを使用して、完了した設定で/minio/config.jsonを入力することが想定されています。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/issuerとacme.cert-manager.io/http01-edit-in-placeを切り替えます。詳細については、GitLab PagesのTLS要件を参照してください。 | |
tls.enabled | ブール値 | true | falseに設定すると、MinIOのTLSが無効になります。これは、IngressレベルでTLS終端を使用できない場合に特に役立ちます。たとえば、Ingressコントローラーの前にTLS終端プロキシがある場合などです。 |
tls.secretName | 文字列 | MinIO URLの有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定されていない場合、代わりにglobal.ingress.tls.secretNameが使用されます。 |
イメージの設定
image、imageTag、およびimagePullPolicyのデフォルトは、アップストリームにドキュメント化されています。
永続
このチャートは、PersistentVolumeClaimをプロビジョニングし、対応する永続ボリュームをデフォルトの場所/exportにマウントします。これが機能するには、Kubernetesクラスタリングで利用可能な物理ストレージが必要です。emptyDirを使用する場合は、persistence.enabled: falseでPersistentVolumeClaimを無効にします。
アップストリームで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の3つまでのプロパティを持つ項目の配列が含まれています。
defaultBuckets:
- name: public
policy: public
purge: true
- name: private
- name: public-read
policy: download| 名前 | 型 | デフォルト | 説明 |
|---|---|---|---|
name | 文字列 | 作成されるバケットの名前。指定された値は、AWSバケットの命名規則に準拠している必要があります。つまり、DNSに準拠し、長さが3〜63文字の文字列でaz、0〜9、-(ハイフン)の文字のみを含める必要があります。すべてのエントリにnameプロパティは_必須_です。 | |
policy | none | policyの値は、MinIOのバケットのアクセスポリシーを制御します。policyプロパティは必須ではなく、デフォルト値はnoneです。anonymous(匿名)アクセスに関して、可能な値は、none(匿名アクセスなし)、download(匿名読み取り専用アクセス)、upload(匿名の書き込み専用アクセス)またはpublic(匿名の読み取り/書き込みアクセス)です。 | |
purge | ブール値 | purgeプロパティは、インストール時に、既存のバケットを強制的に削除する手段として提供されます。これは、永続のvolumeNameプロパティに既存のPersistentVolumeを使用する場合にのみ有効になります。動的に作成されたPersistentVolumeを使用する場合、これはチャートのインストール時にのみ発生し、作成されたばかりのPersistentVolumeにデータがないため、貴重な効果はありません。このプロパティは必須ではありませんが、mc rm -r --forceでバケットを強制的にパージするために、trueの値を指定できます。 |
セキュリティコンテキスト
これらのオプションを使用すると、ポッドの起動に使用される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であるとは想定されていないため、そのように設定しないでください。
アップストリーム項目
次のアップストリームドキュメントも、このチャートに完全に適用されます:
resourcesnodeSelectorminioConfig
minioConfig設定の詳細な説明については、MinIO notifyドキュメントを参照してください。これには、バケットオブジェクトにアクセスまたは変更されたときに通知を公開する方法の詳細が含まれます。