オブジェクトストレージへのMinIOの使用

このChartはstable/minio バージョン0.4.3に基づいており、ほとんどの設定を継承しています。

設計の選択

アップストリームチャートに関連する設計上の選択肢は、プロジェクトのREADMEに記載されています。

GitLabは、シークレットの設定を単純化し、環境変数でのシークレットの使用をすべて削除するために、このチャートを変更することを選択しました。GitLabは、config.json へのシークレットの投入を制御するためにinitContainerを追加し、チャート全体のenabled フラグを追加しました。

このチャートではシークレットをひとつだけ使っています:

  • global.minio.credentials.secret:バケツへの認証に使われるaccesskeysecretkey の値を含むグローバルシークレット。

設定

以下、設定の主な部分をすべて説明します。親チャートから設定する場合、これらの値は次のようになります:

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 コマンドに提供できるすべての可能な Chart 設定です:

パラメータデフォルト説明
common.labels{}このChartで作成されたすべてのオブジェクトに適用される補助ラベル。
defaultBuckets[{"name": "registry"}]MinIOのデフォルトバケット
deployment.strategy{typeRecreate }デプロイによって使用されるアップデート戦略を設定できます。
imageminio/minioMinIOイメージ
imagePullPolicyAlwaysMinIOイメージのプルポリシー
imageTagRELEASE.2017-12-28T01-21-00ZMinIOイメージタグ
minioConfig.browseronMinIOブラウザフラグ
minioConfig.domain MinIOドメイン
minioConfig.regionus-east-1MinIO領域
minioMc.imageminio/mcMinIO mc イメージ
minioMc.taglatestMinIO mc イメージタグ
mountPath/exportMinIO設定ファイルのマウントパス
persistence.accessModeReadWriteOnceMinIO永続アクセスモード
persistence.enabledtrueMinIO イネーブル・パーシステンス・フラグ
persistence.matchExpressions バインドするMinIOラベル式マッチ
persistence.matchLabels MinIOラベル値にマッチしてバインド
persistence.size10GiMinIO永続ボリュームサイズ
persistence.storageClass プロビジョニング用のMinIOストレージクラス名
persistence.subPath MinIO永続ボリュームマウントパス
persistence.volumeName MinIO既存の永続ボリューム名
priorityClassName ポッドに割り当てられる優先度クラス
pullSecrets 画像リポジトリのシークレット
replicas4MinIO レプリカ数
resources.requests.cpu250mMinIO 最小要求CPU数
resources.requests.memory256MiMinIO 最小メモリ要求量
securityContext.fsGroup1000ポッドを起動するグループID
securityContext.runAsUser1000ポッドを起動するユーザーID
securityContext.fsGroupChangePolicy ボリュームの所有権と権限を変更するためのポリシー (Kubernetes 1.23 が必要)
servicePort9000MinIO サービスポート
serviceTypeClusterIPMinIOサービスタイプ
tolerations[]ポッド割り当て用のトレラベル
jobAnnotations{}ジョブ仕様の注釈

Chart設定例

プルシークレット

pullSecrets を使用すると、非公開レジストリで認証してポッドのイメージをプルできるようになります。

非公開レジストリとその認証方法の詳細については、Kubernetesのドキュメントを参照してください。

以下は、pullSecrets の使用例です:

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

許容範囲

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画像の設定は通常の画像設定と同じです。デフォルトでは、Chart-localの値は空のままで、グローバル設定global.gitlabBase.image.repository と現在のglobal.gitlabVersion に関連付けられた画像タグがinitContainer画像の入力に使われます。グローバル設定は、Chart-local 値によって上書きすることができます(例:minio.init.image.tag )。

initContainer スクリプト

initContainerには以下の項目が渡されます:

  • /config にマウントされた認証アイテムを含むシークレット。通常はaccesskeysecretkey です。
  • config.json テンプレートを含む ConfigMap、およびsh で実行されるスクリプトを含むconfigure は、/config にマウントされています。
  • デーモンのコンテナに渡される/minio にマウントされたemptyDir

initContainerは、/config/configure スクリプトを使用して、完了した設定で/minio/config.jsonminio-config コンテナがこのタスクを完了すると、/minio ディレクトリがminio コンテナに渡され、config.jsonMinIOサーバーに提供するために使用されます。

イングレスの設定

これらの設定は、MinIO Ingressを制御します。

名前種類デフォルト説明
apiVersion文字列  apiVersion フィールドで使用する値。
annotations文字列 このフィールドは、Kubernetes Ingressの標準annotations
enabledブール値falseIngressオブジェクトをサポートするサービスに対して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終端プロキシがある場合など、IngressレベルでTLS終端を使用できない場合に便利です。
tls.secretName文字列 MinIO URLの有効な証明書とキーを含むKubernetes TLSシークレットの名前。設定されていない場合は、代わりにglobal.ingress.tls.secretName

イメージの設定

imageimageTagimagePullPolicy のデフォルトはアップストリームに記載されています。

永続性

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

persistence の動作はアップストリームで文書化されています。

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

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

デフォルトバケット

defaultBuckets は、インストール時にMinIOポッドにバケットを自動的に作成するメカニズムを提供します。このプロパティには、それぞれ最大 3 つのプロパティを持つアイテムの配列が含まれます:name,policy, およびpurge

defaultBuckets:
  - name: public
    policy: public
    purge: true
  - name: private
  - name: public-read
    policy: download
名前種類デフォルト説明
name文字列 作成されるバケットの名前。つまり、DNS に準拠し、a-z, 0-9, - (ハイフン) のみを含む文字列を 3 文字以上 63 文字以下で指定します。name プロパティは、すべてのエントリで_必須_です。
policy noneの値は、policy MinIO上のバケットのアクセスポリシーを制御 policyします。policy この policyプロパティは必須ではなく、デフォルト値はnoneです: none (匿名アクセスなし)、download (匿名読み込み専用アクセス)、upload (匿名書き込み専用アクセス)、public (匿名読み込み/書き込みアクセス) です。
purgeブール値  purge プロパティは、インストール時に既存のバケットを強制的に削除する手段として提供されます。これは、PersistentVolume 永続化の volumeName プロパティに PersistentVolume既存のものを使用する場合にのみ有効です。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

Chartはtype: NodePort 、そのように設定されることを期待していません

アップストリーム項目

以下のアップストリームドキュメントは、このChartにも完全に適用されます:

  • resources
  • nodeSelector
  • minioConfig

minioConfig 設定の詳細については、MinIO notifyドキュメントを参照してください。これには、バケットオブジェクトがアクセスまたは変更されたときの通知の発行に関する詳細も含まれます。