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

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

デザインの選択

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

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

このChartは1つのシークレットだけを使用しています:

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

設定

以下、コンフィギュレーションの主要な部分について説明します。 親チャートからコンフィギュレーションを行う場合、これらの値は次のようになります:

minio:
  init:
  ingress:
    enabled:
    tls:
      enabled:
      secretName:
    annotations:
    proxyReadTimeout:
    proxyBodySize:
    proxyBuffering:
  tolerations:
  persistence:  # Upstream
    volumeName:
    matchLabels:
    matchExpressions:
  serviceType:  # Upstream
  servicePort:  # Upstream
  defaultBuckets:
  minioConfig:  # Upstream

インストールコマンドラインオプション

以下の表は、--set フラグを使用して、helm install コマンドに供給できるすべての可能なチャート設定です:

パラメータ デフォルト 説明
defaultBuckets [{"name": "registry"}] MinIOのデフォルトバケット
image minio/minio MinIOイメージ
imagePullPolicy Always MinIOイメージプルポリシー
imageTag RELEASE.2017-12-28T01-21-00Z MinIO画像タグ
minioConfig.browser on MinIOブラウザフラグ
minioConfig.domain   ミニオドメイン
minioConfig.region us-east-1 ミニオ領域
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既存の永続ボリューム名
pullSecrets   画像リポジトリの秘密
replicas 4 MinIOのレプリカ数
resources.requests.cpu 250m MinIO 最小要求CPU
resources.requests.memory 256Mi MinIO 最小要求メモリ
securityContext.fsGroup 1000 ポッドを開始するグループID
securityContext.runAsUser 1000 ポッドを開始するユーザーID
servicePort 9000 MinIOサービスポート
serviceType ClusterIP MinIOサービスタイプ
tolerations [] ポッド割り当てのためのトレラベル

チャート構成例

プルシークレット

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.busybox.image.repositoryglobal.busybox.image.tag がinitContainer画像の入力に使用されます。chart-localの値が指定された場合、グローバル設定の値の代わりに使用されます。

initContainerスクリプト

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

  • /configに実装されている認証項目を含むシークレット。通常はaccesskeysecretkey
  • config.json テンプレートを含むコンフィグマップと、shで実行されるスクリプトを含むconfigure が、/configにマウントされています。
  • デーモンのコンテナに渡される/minio にマウントされたemptyDir

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

イングレスの設定

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

名称 タイプ デフォルト 説明
annotations 文字列   このフィールドは、KubernetesIngressの標準annotations と完全に一致します。
enabled ブーリアン false Ingressオブジェクトをサポートするサービスに対してIngressオブジェクトを作成するかどうかを制御する設定。false の場合、global.ingress.enabled の設定が使用されます。
tls.enabled ブーリアン true falseに設定すると、MinIOのTLSを無効にします。これは主に、Ingressコントローラの前にTLS終端プロキシがある場合など、IngressレベルでTLS終端を使用できない場合に便利です。
tls.secretName 文字列   MinIO URLの有効な証明書とキーを含むKubernetes TLS Secretの名前。設定されていない場合、代わりにglobal.ingress.tls.secretName

画像の設定

imageimageTagimagePullPolicy のデフォルトは、上流で文書化されています。

永続性

このチャートでは、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 セクションで使用します。volume のドキュメントを参照ください。

デフォルトバケット

defaultBuckets は、インストール時にMinIOポッド上にバケットを自動的に作成するメカニズムを提供します。 このプロパティには項目の配列が含まれ、各項目には最大3つのプロパティがあります:namepolicypurge

defaultBuckets:
  - name: public
    policy: public
    purge: true
  - name: private
  - name: public-read
    policy: download
名称 タイプ デフォルト 説明
name 文字列   作成されるバケットの名前。指定される値は、AWS バケットの命名規則に準拠する必要があります。つまり、DNS に準拠し、a-z, 0-9, - (ハイフン) の文字のみを含み、3 文字以上 63 文字以下の文字列である必要があります。name プロパティは、すべてのエントリで_必須_です。
policy   none policy この policyプロパティは必須ではなく、デフォルト値はnoneです。匿名アクセスに関しては、none (匿名アクセスなし)、download (匿名読み込み専用アクセス)、upload (匿名書き込み専用アクセス)、public (匿名読み込み/書き込みアクセス) のいずれかを指定します。
purge ブーリアン   purge プロパティは、インストール時に、既存のバケットを強制的に削除するための手段として提供されています。 これは、PersistentVolume 永続化の volumeName プロパティに PersistentVolume既存のものを使用する場合にのみ有効ですPersistentVolume 。動的に作成されたものを使用する場合 PersistentVolume、これはチャートのインストール時にのみ発生し、作成されたばかりのPersistentVolume にはデータが存在しないため、何の価値もありません。 このプロパティは必須ではありませんが、バケットを強制的に削除するために、このプロパティにtrue という値を指定することができます。mc rm -r --force

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

これらのオプションにより、ポッドの起動に使用する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 ドキュメントを参照してください。これには、バケットオブジェクトがアクセスまたは変更されたときの通知の発行に関する詳細も含まれています。