- 设计选择
- 配置
- Chart 配置示例
- 启用子 chart
- 配置 initContainer
- 配置 Ingress
- 配置镜像
- 持久化
- defaultBuckets
- Security Context
- Service 类型和端口
- 上游配置项
使用 MinIO 作为 Object storage
此 chart 基于 stable/minio
版本 0.4.3
,并从那里继承了大部分设置。
设计选择
与上游 chart 相关的设计选择可以在项目的 README 中找到。
GitLab 选择更改该 chart 以简化 secret 的配置,并删除环境变量中所有 secret 的使用。GitLab 添加了 initContainer
以控制添加到 config.json
中的 secret,并在 chart 范围内添加了 enabled
标志。
该 chart 只使用一个 secret:
-
global.minio.credentials.secret
:包含accesskey
和secretkey
值的全局 secret,将用于对存储桶进行身份验证。
配置
我们将在下面描述配置的所有主要部分。从父 chart 配置时,这些值将是:
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 |
{ type : Recreate } |
允许配置 deployment 使用的更新策略。如果未提供,使用集群默认值。 |
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 label-expression 匹配绑定 | |
persistence.matchLabels |
MinIO label-value 匹配绑定 | |
persistence.size |
10Gi |
MinIO 持久卷大小 |
persistence.storageClass |
配置的 storageClassName | |
persistence.subPath |
MinIO 持久卷挂载路径 | |
persistence.volumeName |
MinIO 的已有持久卷名称 | |
priorityClassName |
指派给 pods 的 Priority class。 | |
pullSecrets |
拉取镜像仓库的 Secrets | |
replicas |
4 |
MinIO 副本数 |
resources.requests.cpu |
250m |
MinIO 最小 CPU 请求 |
resources.requests.memory |
256Mi |
MinIO 最小内存请求 |
securityContext.fsGroup |
1000 |
在其下启动 Pod 的 Group ID |
securityContext.runAsUser |
1000 |
在其下启动 Pod 的 User ID |
securityContext.fsGroupChangePolicy |
更改卷的所有权和权限的策略(需要 Kubernetes 1.23) | |
servicePort |
9000 |
MinIO service 端口 |
serviceType |
ClusterIP |
MinIO service 类型 |
tolerations |
[] |
分配给 Pod 的容忍标签 |
jobAnnotations |
{} |
作业 spec 的 annotations |
Chart 配置示例
pullSecrets
pullSecrets
允许您对私有仓库进行身份验证,以拉取 pod 的镜像。
有关私有仓库及其身份验证方法的其它详细信息,请参见 Kubernetes 文档。
下面是一个使用 pullSecrets
的例子:
image: my.minio.repository
imageTag: latest
imagePullPolicy: Always
pullSecrets:
- name: my-secret-name
- name: my-secondary-secret-name
tolerations
tolerations
允许您调度 Pod 到受污染的工作节点上。
下面是一个使用 tolerations
的例子:
tolerations:
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoSchedule"
- key: "node_label"
operator: "Equal"
value: "true"
effect: "NoExecute"
启用子 chart
我们选择实施分区子 chart 的方式包括禁用给定部署中您可能不需要的组件的能力。因此,您应该决定的第一个设置是enabled:
。
默认情况下,MinIO 是开箱即用的,但不建议用于生产用途。
当你准备好禁用它时,运行 --set global.minio.enabled: false
。
配置 initContainer
虽然很少更改,但可以通过以下项目更改 initContainer
的表现:
init:
image:
repository:
tag:
pullPolicy: IfNotPresent
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。
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
annotations |
String | 此字段与 Kubernetes Ingress 的标准 annotations 完全匹配。 |
|
configureCertmanager |
Boolean | false |
切换 Ingress annotation cert-manager.io/issuer 和 acme.cert-manager.io/http01-edit-in-place 。获取更多信息请查看 GitLab Pages 的 TLS 要求. |
enabled |
Boolean | 控制是否为支持它们的服务创建 Ingress 对象的设置。 如果未设置,则使用 global.ingress.enabled 设置。 |
|
tls.enabled |
Boolean | 当设置为 false 时,将禁用 Registry 子 chart 的 TLS,主要用于无法在 ingress-level 使用 TLS 终止的情况,例如在 Ingress Controller 之前有 TLS 终止代理时。 |
|
tls.secretName |
String | Kubernetes TLS Secret 的名称,其中包含 registry URL 的有效证书和密钥。如果未设置,则使用 global.ingress.tls.secretName 。 |
配置镜像
image
、imageTag
和 imagePullPolicy
默认值记录于上游文档。
持久化
此 chart 提供了一个 PersistentVolumeClaim
并将相应的持久卷安装到默认位置 /export
。您需要 Kubernetes 集群中有可用的物理存储才能使其工作。如果您更愿意使用 emptyDir
,请通过以下方式禁用 PersistentVolumeClaim
:persistence.enabled: false
。
persistence
的表现已记录在上游文档。
GitLab 添加了以下几项:
persistence:
volumeName:
matchLabels:
matchExpressions:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
volumeName |
String | false |
当提供 volumeName 时,PersistentVolumeClaim 将使用提供的 PersistentVolume 名称,而不是动态创建 PersistentVolume 。此处会覆盖上游。 |
matchLabels |
Map | true |
在选择要绑定的卷时,接受要匹配的标签名称和标签值的映射。 这用于PersistentVolumeClaim selector 部分。请参阅卷文档。 |
matchExpressions |
Array | 在选择要绑定的卷时,接受要匹配的标签条件对象数组,用于PersistentVolumeClaim selector 部分。请参阅卷文档。 |
defaultBuckets
defaultBuckets
提供了一种在安装时,在 MinIO pod 上自动创建存储桶的机制。此属性包含一组配置项,每一项最多具有三个属性:name
、policy
和 purge
。
defaultBuckets:
- name: public
policy: public
purge: true
- name: private
- name: public-read
policy: download
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
name |
String | 创建的存储桶的名称。提供的值应符合 AWS 存储桶命名规则,这意味着它应符合 DNS 且仅包含字符 az 、0-9 和 –(连字符),符合长度介于 3 到 63 个字符之间的字符串。 所有条目都_需要_ name 属性。 |
|
policy |
none |
policy 的值控制着 MinIO 上存储桶的访问策略。 policy 属性不是必需的,默认值为 none 。 关于匿名访问,可能的值为:none (无匿名访问)、download (匿名只读访问)、upload (匿名只写访问)或public (匿名读/写访问)。 |
|
purge |
Boolean |
purge 属性用于在安装时强制移除任何现有的存储桶。 这仅在对持久化的 volumeName 属性使用预先存在的 PersistentVolume 时起作用。如果您使用动态创建的 PersistentVolume ,此参数没有任何价值,因为它只会在 chart 安装时发生,并且刚刚创建的 PersistentVolume 中将没有数据。 此属性不是必需的,但您可以使用 true 值指定此属性,以便使用强制 mc rm -r --force 清除存储桶。 |
Security Context
这些选项允许控制使用哪个 user
和/或 group
来启动 pod。
更深入的安全上下文信息请参考官方 Kubernetes文档。
Service 类型和端口
以下是上游文档,关键摘要是:
## 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 通知文档,包括有关在访问或更改存储桶对象时发布通知的详细信息。