- 设计选择
- 配置
- 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.busybox.image.repository
和 global.busybox.image.tag
将填入 initContainer 镜像。如果指定了 chart 本地值,则使用它们而不是全局设置的值。
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 。获取更多信息请查看 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 通知文档,包括有关在访问或更改存储桶对象时发布通知的详细信息。