使用 MinIO 作为对象存储
- Tier: 基础版, 专业版, 旗舰版
- Offering: 私有化部署
此 chart 基于 stable/minio 0.4.3,因此继承了绝大多数设置。
设计选择
与上游 chart相关的设计选择可以在项目的 README 中找到。
极狐GitLab 选择更改该 chart 以简化密钥的配置,并删除环境变量中所有密钥的使用。极狐GitLab 添加了 initContainer 来控制将密钥填充到 config.json 中,并添加了一个 chart 范围内的 enabled 标志。
此 chart 仅使用一个密钥:
- global.minio.credentials.secret: 一个全局密钥,包含将用于存储桶认证的 accesskey 和 secretkey 值。
配置
我们将在下文描述配置的所有主要部分。从父 chart 配置时,这些值将为:
yaml1minio: 2 init: 3 ingress: 4 enabled: 5 apiVersion: 6 tls: 7 enabled: 8 secretName: 9 annotations: 10 configureCertmanager: 11 proxyReadTimeout: 12 proxyBodySize: 13 proxyBuffering: 14 tolerations: 15 persistence: # 上游 16 volumeName: 17 matchLabels: 18 matchExpressions: 19 serviceType: # 上游 20 servicePort: # 上游 21 defaultBuckets: 22 minioConfig: # 上游
安装命令行选项
下表包含所有可能的 chart 配置,可以通过 --set 标志提供给 helm install 命令:
参数 | 默认值 | 描述 |
---|---|---|
common.labels | {} | 应用于此 chart 创建的所有对象的补充标签。 |
init.containerSecurityContext.allowPrivilegeEscalation | false | initContainer 特定:控制进程是否可以获得比其父进程更多的权限 |
init.containerSecurityContext.runAsNonRoot | true | initContainer 特定:控制容器是否以非 root 用户运行 |
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 | 分配给 pod 的优先级类。 | |
pullSecrets | 映像仓库的密钥 | |
resources.requests.cpu | 250m | MinIO 请求的最小 CPU |
resources.requests.memory | 256Mi | MinIO 请求的最小内存 |
securityContext.fsGroup | 1000 | 启动 pod 的组 ID |
securityContext.runAsUser | 1000 | 启动 pod 的用户 ID |
securityContext.fsGroupChangePolicy | 更改卷的所有权和权限的策略(需要 Kubernetes 1.23) | |
securityContext.seccompProfile.type | RuntimeDefault | 使用的 seccomp 配置文件 |
containerSecurityContext.runAsUser | 1000 | 允许覆盖启动容器时使用的特定安全上下文 |
containerSecurityContext.allowPrivilegeEscalation | false | 控制 Gitaly 容器的进程是否可以获得比其父进程更多的权限 |
containerSecurityContext.runAsNonRoot | true | 控制容器是否以非 root 用户运行 |
containerSecurityContext.capabilities.drop | [ "ALL" ] | 移除 Gitaly 容器的 Linux 能力 |
serviceAccount.automountServiceAccountToken | false | 指示默认的 ServiceAccount 访问令牌是否应该挂载到 pod 中 |
servicePort | 9000 | MinIO 服务端口 |
serviceType | ClusterIP | MinIO 服务类型 |
tolerations | [] | pod 分配的容忍标签 |
jobAnnotations | {} | 作业规范的注释 |
Chart 配置示例
pullSecrets
pullSecrets 允许您认证到私有仓库以拉取 pod 的映像。
有关私有仓库及其认证方法的更多详细信息,请参阅 Kubernetes 文档。
以下是 pullSecrets 的示例用法:
yaml1image: my.minio.repository 2imageTag: latest 3imagePullPolicy: Always 4pullSecrets: 5- name: my-secret-name 6- name: my-secondary-secret-name
serviceAccount
此部分控制是否应将默认的 ServiceAccount 访问令牌挂载到 pod 中。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
automountServiceAccountToken | Boolean | false | 控制默认的 ServiceAccount 访问令牌是否应挂载到 pod 中。除非某些 sidecars 需要正常工作(例如 Istio),否则不应启用此选项。 |
tolerations
tolerations 允许您在标记的工作节点上调度 pod
以下是 tolerations 的示例用法:
yaml1tolerations: 2- key: "node_label" 3 operator: "Equal" 4 value: "true" 5 effect: "NoSchedule" 6- key: "node_label" 7 operator: "Equal" 8 value: "true" 9 effect: "NoExecute"
启用子 chart
我们选择实现划分子 chart 的方法包括禁用您可能不希望在给定部署中使用的组件的能力。因此,您应该首先决定的设置是 enabled:。
默认情况下,MinIO 是开箱即用的,但不建议用于生产环境。当您准备禁用它时,请运行 --set global.minio.enabled: false。
配置 initContainer
虽然很少更改,但可以通过以下项目更改 initContainer 的行为:
yaml1init: 2 image: 3 repository: 4 tag: 5 pullPolicy: IfNotPresent 6 script:
initContainer 映像
initContainer 映像设置与普通映像配置相同。默认情况下,chart 本地值保持为空,global.gitlabBase.image.repository 和与当前 global.gitlabVersion 关联的映像标签将用于填充 initContainer 映像。可以通过 chart 本地值(例如 minio.init.image.tag)覆盖全局配置。
initContainer 脚本
initContainer 被传递以下项目:
- 包含认证项目的密钥挂载在 /config,通常是 accesskey 和 secretkey。
- 包含 config.json 模板的 ConfigMap,和包含将使用 sh 执行的脚本 configure,挂载在 /config。
- 一个挂载在 /minio 的 emptyDir,将传递给守护进程的容器。
initContainer 预期使用 /config/configure 脚本填充完整的配置到 /minio/config.json。当 minio-config 容器完成该任务时,/minio 目录将传递给 minio 容器,并用于向 MinIO 服务器提供 config.json。
配置 Ingress
这些设置控制 MinIO Ingress。
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
apiVersion | String | 用于 apiVersion 字段的值。 | |
annotations | String | 该字段完全匹配 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 终止时有用,例如,当您在 Ingress 控制器前面有一个 TLS 终止代理时。 |
tls.secretName | String | 包含 MinIO URL 的有效证书和密钥的 Kubernetes TLS Secret 的名称。如果未设置,则使用 global.ingress.tls.secretName。 |
配置映像
image,imageTag 和 imagePullPolicy 的默认值在上游文档中记录。
持久性
此 chart 提供一个 PersistentVolumeClaim 并将相应的持久性卷挂载到默认位置 /export。您需要在 Kubernetes 集群中有可用的物理存储才能正常工作。如果您更愿意使用 emptyDir,请通过以下方式禁用 PersistentVolumeClaim:persistence.enabled: false。
persistence 的行为在上游文档中记录。
极狐GitLab 添加了一些项目:
yamlpersistence: volumeName: matchLabels: matchExpressions:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
volumeName | String | false | 提供 volumeName 时,PersistentVolumeClaim 将使用按名称提供的 PersistentVolume,而不是动态创建 PersistentVolume。这会覆盖上游行为。 |
matchLabels | Map | true | 接受标签名称和标签值的 Map,以在选择要绑定的卷时进行匹配。这用于 PersistentVolumeClaim 的 selector 部分。请参阅 卷文档。 |
matchExpressions | Array | 接受标签条件对象的数组,以在选择要绑定的卷时进行匹配。这用于 PersistentVolumeClaim 的 selector 部分。请参阅 卷文档。 |
defaultBuckets
defaultBuckets 提供了一种在 MinIO pod 安装 时自动创建存储桶的机制。此属性包含一个项目数组,每个项目最多包含三个属性:name,policy 和 purge。
yaml1defaultBuckets: 2 - name: public 3 policy: public 4 purge: true 5 - name: private 6 - name: public-read 7 policy: download
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
name | String | 创建的存储桶的名称。提供的值应符合 AWS 存储桶命名规则,这意味着它应符合 DNS 并且仅包含字符 a-z,0-9 和 -(连字符),字符串长度在 3 到 63 个字符之间。name 属性对于所有条目是_必需的_。 | |
policy | none | policy 的值控制 MinIO 上存储桶的访问策略。policy 属性不是必需的,默认值是 none。关于匿名访问,可能的值是:none(没有匿名访问),download(匿名只读访问),upload(匿名只写访问)或 public(匿名读/写访问)。 | |
purge | Boolean | purge 属性提供了一种在安装时强制删除任何现有存储桶的方法。此功能仅在为 persistence 的 volumeName 属性使用预先存在的 PersistentVolume 时才会生效。如果您使用动态创建的 PersistentVolume,这将没有有价值的效果,因为它仅在 chart 安装时发生,并且新创建的 PersistentVolume 中将没有数据。此属性不是必需的,但您可以指定此属性的值为 true,以便强制删除存储桶 mc rm -r --force。 |
安全上下文
这些选项允许控制用哪个 user 和/或 group 启动 pod。
服务类型和端口
这些在上游文档中记录,其关键总结是:
yaml1## 将 MinIO 服务暴露为集群外部可访问(LoadBalancer 服务) 2## 或从集群内部访问它(ClusterIP 服务)。设置服务类型和端口以提供它。 3## 参考:http://kubernetes.io/docs/user-guide/services/ 4## 5serviceType: LoadBalancer 6servicePort: 9000
该 chart 不期望为 type: NodePort,因此不要这样设置。
上游项目
以下内容的上游文档也完全适用于此 chart:
- resources
- nodeSelector
- minioConfig
关于 minioConfig 设置的进一步解释可以在 MinIO 通知文档中找到。这包括有关在存储桶对象被访问或更改时发布通知的详细信息。