正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

オブジェクトストレージに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.allowPrivilegeEscalationfalseInitContainerに固有: プロセスがその親プロセスよりも多くの特権を取得できるかどうかを制御します
init.containerSecurityContext.runAsNonRoottrueInitContainerに固有: コンテナを非ルートユーザーで実行するかどうかを制御します
init.containerSecurityContext.capabilities.drop[ "ALL" ]InitContainerに固有: コンテナのLinuxケイパビリティを削除します
defaultBuckets[{"name": "registry"}]MinIOデフォルトバケット
deployment.strategy{ `type`: `Recreate` }デプロイで使用される更新戦略を設定できます
imageminio/minioMinIOイメージ
imagePullPolicyAlwaysMinIOイメージプルポリシー
imageTagRELEASE.2017-12-28T01-21-00ZMinIOイメージタグ付け
minioConfig.browseronMinIOブラウザフラグ
minioConfig.domainMinIOドメイン
minioConfig.regionus-east-1MinIOリージョン
minioMc.imageminio/mcMinIO mcイメージ
minioMc.taglatestMinIO mcイメージタグ付け
mountPath/exportMinIO設定ファイルのマウントパス
persistence.accessModeReadWriteOnceMinIO永続的アクセスモード
persistence.annotationsMinIO PersistentVolumeClaim注釈
persistence.enabledtrueMinIO永続の有効化フラグ
persistence.matchExpressionsバインドするMinIOラベル式一致
persistence.matchLabelsバインドするMinIOラベル値一致
persistence.size10GiMinIO永続ボリュームサイズ
persistence.storageClassプロビジョニング用のMinIO storageClassName
persistence.subPathMinIO永続ボリュームのマウントパス
persistence.volumeNameMinIO既存の永続ボリューム名
priorityClassNameポッドに割り当てられる優先度クラス
pullSecretsイメージリポジトリのシークレット
resources.requests.cpu250mMinIO最小CPUリクエスト
resources.requests.memory256MiMinIO最小メモリリクエスト
securityContext.fsGroup1000ポッドの開始に使用するグループID
securityContext.runAsUser1000ポッドの開始に使用するユーザーID
securityContext.fsGroupChangePolicyボリュームの所有権と許可を変更するためのポリシー(Kubernetes 1.23が必要です)
securityContext.seccompProfile.typeRuntimeDefault使用するSeccompプロファイル
containerSecurityContext.runAsUser1000コンテナが起動される特定のセキュリティコンテキストの上書きを許可します
containerSecurityContext.allowPrivilegeEscalationfalseGitalyコンテナのプロセスが親プロセスよりも多くの特権を取得できるかどうかを制御します
containerSecurityContext.runAsNonRoottrueコンテナを非ルートユーザーで実行するかどうかを制御します
containerSecurityContext.capabilities.drop[ "ALL" ]GitalyコンテナのLinuxケイパビリティを削除します
serviceAccount.automountServiceAccountTokenfalseデフォルトのServiceAccountアクセストークンをポッドにマウントするかどうかを示します
servicePort9000MinIOサービスポート
serviceTypeClusterIPMinIOサービスタイプ
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

serviceAccount

このセクションでは、ポッドにデフォルトの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にマウントされた認証アイテム(通常はaccesskeysecretkey)を含むシークレット。
  • 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/issueracme.cert-manager.io/http01-edit-in-placeを切り替えます。詳細については、GitLab PagesのTLS要件を参照してください。
tls.enabledブール値truefalseに設定すると、MinIOのTLSが無効になります。これは、IngressレベルでTLS終端を使用できない場合に特に役立ちます。たとえば、Ingressコントローラーの前にTLS終端プロキシがある場合などです。
tls.secretName文字列MinIO URLの有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定されていない場合、代わりにglobal.ingress.tls.secretNameが使用されます。

イメージの設定

imageimageTag、およびimagePullPolicyのデフォルトは、アップストリームにドキュメント化されています。

永続

このチャートは、PersistentVolumeClaimをプロビジョニングし、対応する永続ボリュームをデフォルトの場所/exportにマウントします。これが機能するには、Kubernetesクラスタリングで利用可能な物理ストレージが必要です。emptyDirを使用する場合は、persistence.enabled: falsePersistentVolumeClaimを無効にします。

アップストリームpersistenceの動作がドキュメント化されています。

GitLabはいくつかの項目を追加しました:

persistence:
  volumeName:
  matchLabels:
  matchExpressions:
名前デフォルト説明
volumeName文字列falsevolumeNameが指定されている場合、PersistentVolumeClaimは、動的にPersistentVolumeを作成する代わりに、指定された名前でPersistentVolumeを使用します。これにより、アップストリームの動作がオーバーライドされます。
matchLabelsマップtrueボリュームのバインドを選択するときに、照合するラベル名とラベル値のマップを受け入れます。これは、PersistentVolumeClaim selectorセクションで使用されます。ボリュームドキュメントを参照してください。
matchExpressions配列ボリュームのバインドを選択するときに、照合するラベル条件オブジェクトの配列を受け入れます。これは、PersistentVolumeClaim selectorセクションで使用されます。ボリュームドキュメントを参照してください。

defaultBuckets

defaultBucketsは、インストール時にMinIOポッドにバケットを自動的に作成するメカニズムを提供します。このプロパティには、namepolicy、および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プロパティは_必須_です。
policynonepolicyの値は、MinIOのバケットのアクセスポリシーを制御します。policyプロパティは必須ではなく、デフォルト値はnoneです。anonymous(匿名)アクセスに関して、可能な値は、none(匿名アクセスなし)、download(匿名読み取り専用アクセス)、upload(匿名の書き込み専用アクセス)またはpublic(匿名の読み取り/書き込みアクセス)です。
purgeブール値purgeプロパティは、インストール時に、既存のバケットを強制的に削除する手段として提供されます。これは、永続のvolumeNameプロパティに既存のPersistentVolumeを使用する場合にのみ有効になります。動的に作成されたPersistentVolumeを使用する場合、これはチャートのインストール時にのみ発生し、作成されたばかりのPersistentVolumeにデータがないため、貴重な効果はありません。このプロパティは必須ではありませんが、mc rm -r --forceでバケットを強制的にパージするために、trueの値を指定できます。

セキュリティコンテキスト

これらのオプションを使用すると、ポッドの起動に使用されるusergroupを制御できます。

セキュリティコンテキストの詳細については、公式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ドキュメントを参照してください。これには、バケットオブジェクトにアクセスまたは変更されたときに通知を公開する方法の詳細が含まれます。