升级旧版 MinIO 运算符
MinIO 支持以下旧版 MinIO 运算符的升级路径
当前版本 |
支持的升级目标 |
---|---|
5.0.15 或更高版本 |
6.0.4 |
5.0.0 到 5.0.14 |
5.0.15 |
4.2.3 到 4.5.7 |
4.5.8 |
4.0.0 到 4.2.2 |
4.2.3 |
3.X.X |
4.2.2 |
要从运算符 4.5.7 或更早版本升级到 6.0.4,您必须先升级到 4.5.8 版本,然后升级到 5.0.15 版本。根据您当前的版本,您可能需要进行一次或多次中间升级才能达到 v4.5.8 版本。
升级到 5.0.15 后,请参阅 升级 MinIO 运算符 以升级到最新版本。
将 MinIO 运算符 4.5.8 及更高版本升级到 5.0.15
先决条件
此过程需要以下内容
您有一个运行 4.5.8 或更高版本的现有 MinIO 运算符部署
您的 Kubernetes 集群运行 1.21.0 或更高版本
您的本地主机安装了
kubectl
并配置为访问 Kubernetes 集群
此过程将 MinIO 运算符从任何 4.5.8 或更高版本升级到 5.0.15
租户自定义资源定义更改
以下更改适用于运算符 v5.0.0 或更高版本
.spec.s3
字段被.spec.features
字段替换。.spec.credsSecret
字段被.spec.configuration
字段替换。The
.spec.credsSecret
应该包含 MinIO 部署的所有包含敏感信息的環境变量,并且不应出现在.spec.env
中。此更改影响租户 CRD,并且只影响直接编辑租户 YAML 的用户,例如通过 Helm 或 Kustomize。日志搜索 API (
.spec.log
) 和 Prometheus (.spec.prometheus
) 部署都已删除。但是,现有部署将作为独立部署/有状态集继续运行,并且与租户 CR 无连接。删除租户 CRD 不会级联到日志或 Prometheus 部署。重要事项
MinIO 建议您创建 yaml 文件以管理这些部署。
日志搜索和 Prometheus
最新版本的 Operator 从包含的 Operator 工具中删除了日志搜索和 Prometheus。以下步骤将备份现有 yaml 文件,进行一些清理,并提供继续使用这两个功能中的一个或两个的步骤。
备份 Prometheus 和日志搜索 yaml 文件。
export TENANT_NAME=myminio export NAMESPACE=mynamespace kubectl -n $NAMESPACE get secret $TENANT_NAME-log-secret -o yaml > $TENANT_NAME-log-secret.yaml kubectl -n $NAMESPACE get cm $TENANT_NAME-prometheus-config-map -o yaml > $TENANT_NAME-prometheus-config-map.yaml kubectl -n $NAMESPACE get sts $TENANT_NAME-prometheus -o yaml > $TENANT_NAME-prometheus.yaml kubectl -n $NAMESPACE get sts $TENANT_NAME-log -o yaml > $TENANT_NAME-log.yaml kubectl -n $NAMESPACE get deployment $TENANT_NAME-log-search-api -o yaml > $TENANT_NAME-log-search-api.yaml kubectl -n $NAMESPACE get svc $TENANT_NAME-log-hl-svc -o yaml > $TENANT_NAME-log-hl-svc.yaml kubectl -n $NAMESPACE get svc $TENANT_NAME-log-search-api -o yaml > $TENANT_NAME-log-search-api-svc.yaml kubectl -n $NAMESPACE get svc $TENANT_NAME-prometheus-hl-svc -o yaml > $TENANT_NAME-prometheus-hl-svc.yaml
将
myminio
替换为您要升级的 Operator 部署上的租户名称。将
mynamespace
替换为您要升级的 Operator 部署上的租户的命名空间。
对每个租户重复此操作。
删除所有备份文件的所有租户的
.metadata.ownerReferences
。(可选) 要继续使用日志搜索 API 和 Prometheus,请在租户 yaml 规范文件的
.spec.env
下添加以下变量使用以下命令编辑租户
kubectl edit tenants <TENANT-NAME> -n <TENANT-NAMESPACE>
将
<TENANT-NAME>
替换为要修改的租户的名称。将
<TENANT-NAMESPACE>
替换为要修改的租户的命名空间。
在文件中的
.spec.env
下添加以下值- name: MINIO_LOG_QUERY_AUTH_TOKEN valueFrom: secretKeyRef: key: MINIO_LOG_QUERY_AUTH_TOKEN name: <TENANT_NAME>-log-secret - name: MINIO_LOG_QUERY_URL value: http://<TENANT_NAME>-log-search-api:8080 - name: MINIO_PROMETHEUS_JOB_ID value: minio-job - name: MINIO_PROMETHEUS_URL value: http://<TENANT_NAME>-prometheus-hl-svc:9001
将
<TENANT_NAME>
在name
或value
行中替换为您的租户名称。
步骤
以下步骤使用 Kustomize 升级 MinIO Operator。
对于使用 MinIO Kubernetes 插件安装的 5.0.1 到 5.0.14 版本的 Operator,请按照以下 Kustomize 指示进行升级到 5.0.15 或更高版本。如果您使用 Helm 安装了 Operator,请改用 使用 Helm 升级 指示。
(可选) 将每个 MinIO 租户更新到最新的稳定 MinIO 版本。
定期升级 MinIO 可确保您的租户拥有最新的功能和性能改进。在应用于生产租户之前,请在较低的环境(例如开发或 QA 租户)中测试升级。有关升级 MinIO 租户的步骤,请参阅 升级 MinIO 租户。
验证现有的 Operator 安装。使用
kubectl get all -n minio-operator
验证所有 Operator pod 和服务的运行状况和状态。如果您将 Operator 安装到自定义命名空间,请指定该命名空间作为
-n <NAMESPACE>
。您可以通过检索命名空间中 Operator pod 的对象规范来验证当前安装的 Operator 版本。以下示例使用
jq
工具从kubectl
中筛选必要的信息kubectl get pod -l 'name=minio-operator' -n minio-operator -o json | jq '.items[0].spec.containers'
输出类似于以下内容
{ "env": [ { "name": "CLUSTER_DOMAIN", "value": "cluster.local" } ], "image": "minio/operator:v6.0.4", "imagePullPolicy": "IfNotPresent", "name": "minio-operator" }
如果您的本地主机未安装
jq
实用程序,您可以运行命令的第一部分,并找到输出中的spec.containers
部分。使用 Kustomize 升级 Operator
以下命令将 Operator 升级到 5.0.15 版本
kubectl apply -k github.com/minio/operator/?ref=v5.0.15
在下面的示例输出中,行末的
configured
指示从更新的 CRD 应用了新更改的地方namespace/minio-operator configured customresourcedefinition.apiextensions.k8s.io/miniojobs.job.min.io configured customresourcedefinition.apiextensions.k8s.io/policybindings.sts.min.io configured customresourcedefinition.apiextensions.k8s.io/tenants.minio.min.io configured serviceaccount/console-sa unchanged serviceaccount/minio-operator unchanged clusterrole.rbac.authorization.k8s.io/console-sa-role unchanged clusterrole.rbac.authorization.k8s.io/minio-operator-role unchanged clusterrolebinding.rbac.authorization.k8s.io/console-sa-binding unchanged clusterrolebinding.rbac.authorization.k8s.io/minio-operator-binding unchanged configmap/console-env unchanged secret/console-sa-secret configured service/console unchanged service/operator unchanged service/sts unchanged deployment.apps/console configured deployment.apps/minio-operator configured
验证 Operator 升级
您可以使用之前使用的相同
kubectl
命令检查新的 Operator 版本kubectl get pod -l 'name=minio-operator' -n minio-operator -o json | jq '.items[0].spec.containers'
(可选) 连接到 Operator 控制台
Operator 控制台服务不会自动绑定或公开自身以供 Kubernetes 集群上的外部访问。相反,您必须配置网络控制平面组件(如负载均衡器或入口)以授予外部访问权限。
出于测试目的或短期访问,可以使用以下补丁通过 NodePort 公开 Operator 控制台服务
kubectl patch service -n minio-operator console -p ' { "spec": { "ports": [ { "name": "http", "port": 9090, "protocol": "TCP", "targetPort": 9090, "nodePort": 30090 }, { "name": "https", "port": 9443, "protocol": "TCP", "targetPort": 9443, "nodePort": 30433 } ], "type": "NodePort" } }'
应用路径后,您可以通过 Kubernetes 工作节点上的端口
30433
访问该服务。将
nodePort
值追加到 Kubernetes 集群中工作节点的外部可访问 IP 地址。根据您是否使用 TLS 部署了 Operator 控制台,使用适当的http
或https
端口。检索用于登录的 Operator 控制台 JWT
要继续升级到 6.0.4,请参阅 升级 MinIO Operator。
使用以下命令检索登录 Operator 控制台所需的 JSON Web 令牌 (JWT)
kubectl get secret/console-sa-secret -n minio-operator -o json | jq -r '.data.token' | base64 -d如果您的本地主机未安装
jq
实用程序,您可以运行kubectl
命令的一部分(在| jq
之前),并找到输出中的data.token
部分。
以下步骤使用 Helm 升级现有的 MinIO Operator 安装。
如果您使用 Kustomize 安装了 Operator,请改用 使用 Kustomize 升级 指示。
(可选) 将每个 MinIO 租户更新到最新的稳定 MinIO 版本。
定期升级 MinIO 可确保您的租户拥有最新的功能和性能改进。在应用于生产租户之前,请在较低的环境(例如开发或 QA 租户)中测试升级。有关升级 MinIO 租户的步骤,请参阅 升级 MinIO 租户。
验证现有的 Operator 安装。
使用
kubectl get all -n minio-operator
验证所有 Operator pod 和服务的运行状况和状态。如果您将 Operator 安装到自定义命名空间,请指定该命名空间作为
-n <NAMESPACE>
。使用
helm list
命令查看命名空间中安装的图表helm list -n minio-operator
结果应类似于以下内容
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION operator minio-operator 1 2023-11-01 15:49:54.539724775 -0400 EDT deployed operator-5.0.x v5.0.x
更新 Operator 存储库
使用
helm repo update minio-operator
更新 MinIO Operator 存储库。如果您为 MinIO Operator 存储库设置了不同的别名,请在命令中指定该别名,而不是minio-operator
。您可以使用helm repo list
查看已安装的存储库。使用
helm search
检查更新 Operator 存储库后可用的最新图表版本helm search repo minio-operator
响应应类似于以下内容
NAME CHART VERSION APP VERSION DESCRIPTION minio-operator/minio-operator 4.3.7 v4.3.7 A Helm chart for MinIO Operator minio-operator/operator 6.0.4 v6.0.4 A Helm chart for MinIO Operator minio-operator/tenant 6.0.4 v6.0.4 A Helm chart for MinIO Operator
The
minio-operator/minio-operator
is a legacy chart and should not be installed under normal circumstances.运行
helm upgrade
Helm 使用最新的图表来升级 MinIO Operator
helm upgrade -n minio-operator \ operator minio-operator/operator
如果您将 MinIO Operator 安装到不同的命名空间,请在
-n
参数中指定该命名空间。如果您使用的安装名称与
operator
不同,请将上面的值替换为安装名称。命令结果应返回成功,并且
REVISION
值会增加。验证 Operator 升级
Operator 控制台服务不会自动绑定或公开自身以供 Kubernetes 集群上的外部访问。相反,您必须配置网络控制平面组件(如负载均衡器或入口)以授予外部访问权限。
出于测试目的或短期访问,可以使用以下补丁通过 NodePort 公开 Operator 控制台服务
kubectl patch service -n minio-operator console -p ' { "spec": { "ports": [ { "name": "http", "port": 9090, "protocol": "TCP", "targetPort": 9090, "nodePort": 30090 }, { "name": "https", "port": 9443, "protocol": "TCP", "targetPort": 9443, "nodePort": 30433 } ], "type": "NodePort" } }'
应用路径后,您可以通过 Kubernetes 工作节点上的端口
30433
访问该服务。将
nodePort
值追加到 Kubernetes 集群中工作节点的外部可访问 IP 地址。根据您是否使用 TLS 部署了 Operator 控制台,使用适当的http
或https
端口。检索用于登录的 Operator 控制台 JWT
使用以下命令检索登录 Operator 控制台所需的 JSON Web 令牌 (JWT)
kubectl get secret/console-sa-secret -n minio-operator -o json | jq -r '.data.token' | base64 -d
如果您的本地主机未安装
jq
实用程序,您可以运行kubectl
命令的一部分(在| jq
之前),并找到输出中的data.token
部分。
将 MinIO Operator 4.2.3 到 4.5.7 升级到 4.5.8
先决条件
此过程需要以下内容
您有一个正在运行 4.2.3 到 4.5.7 版本的 MinIO Operator 部署
您的 Kubernetes 集群运行的是 1.19.0 或更高版本
您的本地主机安装了
kubectl
并配置为访问 Kubernetes 集群
步骤
此步骤将 MinIO Operator 从 4.2.3 到 4.5.7 版本升级到 4.5.8 版本。然后,您可以从 4.5.8 版本升级到 5.0.15 版本。
(可选) 将每个 MinIO 租户更新到最新的稳定 MinIO 版本。
定期升级 MinIO 可确保您的租户拥有最新的功能和性能改进。
在应用于生产租户之前,请在较低的环境(例如开发或 QA 租户)中测试升级。
有关升级 MinIO 租户的步骤,请参阅 升级 MinIO 租户。
验证现有的 Operator 安装。
使用
kubectl get all -n minio-operator
验证所有 Operator pod 和服务的运行状况和状态。如果您将 Operator 安装到自定义命名空间,请指定该命名空间作为
-n <NAMESPACE>
。您可以通过检索命名空间中 Operator pod 的对象规范来验证当前安装的 Operator 版本。以下示例使用
jq
工具从kubectl
中筛选必要的信息kubectl get pod -l 'name=minio-operator' -n minio-operator -o json | jq '.items[0].spec.containers'
输出类似于以下内容
{ "env": [ { "name": "CLUSTER_DOMAIN", "value": "cluster.local" } ], "image": "minio/operator:v4.5.1", "imagePullPolicy": "IfNotPresent", "name": "minio-operator" }
下载 MinIO Kubernetes 插件的最新稳定版本
您可以使用 Kubernetes Krew 插件管理器或通过将插件二进制文件下载并安装到本地主机来手动安装 MinIO 插件
Krew 是由 Kubernetes SIG CLI 小组 开发的
kubectl
插件管理器。有关具体说明,请参阅krew
安装文档。您可以将 Krew 插件用于 Linux、macOS 和 Windows 操作系统。您可以使用 Krew 通过以下命令安装 MinIO
kubectl
插件kubectl krew update kubectl krew install minio
如果您要使用 Krew 更新 MinIO 插件,请使用以下命令
kubectl krew upgrade minio
您可以将 MinIO
kubectl
插件下载到本地系统路径。kubectl
CLI 会自动发现并运行兼容的插件。以下代码将下载 MinIO Kubernetes 插件的最新版本,并将其安装到系统路径
curl https://github.com/minio/operator/releases/download/v5.0.14/kubectl-minio_5.0.14_linux_amd64 -o kubectl-minio chmod +x kubectl-minio mv kubectl-minio /usr/local/bin/
根据已认证用户的权限,上面的
mv
命令可能需要sudo
升级。运行以下命令以验证插件的安装
kubectl minio version
输出应显示 Operator 版本为 5.0.14。
您可以将 MinIO
kubectl
插件下载到本地系统路径。kubectl
CLI 会自动发现并运行兼容的插件。以下 PowerShell 命令将下载 MinIO Kubernetes 插件的最新版本,并将其安装到系统路径
Invoke-WebRequest -Uri "https://github.com/minio/operator/releases/download/v5.0.14/kubectl-minio_5.0.14_windows_amd64.exe" -OutFile "C:\kubectl-plugins\kubectl-minio.exe"
确保插件文件夹的路径包含在 Windows PATH 中。
运行以下命令以验证插件的安装
kubectl minio version
输出应显示 Operator 版本为 5.0.14。
运行初始化命令以升级 Operator
使用
kubectl minio init
命令升级现有的 MinIO Operator 安装kubectl minio init
验证 Operator 升级
您可以通过使用之前的步骤查看 Operator Pod 的对象规范来检查 Operator 版本。
端口转发
该 Operator 控制台服务 不会自动绑定或暴露自身以供 Kubernetes 集群外部访问。相反,配置一个网络控制平面组件(如负载均衡器或 Ingress)来授予外部访问权限。
出于测试目的或短期访问,可以使用以下补丁通过 NodePort 公开 Operator 控制台服务
kubectl patch service -n minio-operator console -p ' { "spec": { "ports": [ { "name": "http", "port": 9090, "protocol": "TCP", "targetPort": 9090, "nodePort": 30090 }, { "name": "https", "port": 9443, "protocol": "TCP", "targetPort": 9443, "nodePort": 30433 } ], "type": "NodePort" } }'
patch 命令应该输出
service/console patched
。现在您可以通过端口30433
(HTTPS)或30090
(HTTP)访问服务,该端口位于任何 Kubernetes 工作节点上。例如,具有以下 Operator 节点的 Kubernetes 集群可以在
https://172.18.0.2:30443
访问。kubectl get nodes -o custom-columns=IP:.status.addresses[:] IP map[address:172.18.0.5 type:InternalIP],map[address:k3d-MINIO-agent-3 type:Hostname] map[address:172.18.0.6 type:InternalIP],map[address:k3d-MINIO-agent-2 type:Hostname] map[address:172.18.0.2 type:InternalIP],map[address:k3d-MINIO-server-0 type:Hostname] map[address:172.18.0.4 type:InternalIP],map[address:k3d-MINIO-agent-1 type:Hostname] map[address:172.18.0.3 type:InternalIP],map[address:k3d-MINIO-agent-0 type:Hostname]
使用以下命令检索登录 Operator 控制台所需的 JWT 令牌
kubectl get secret/console-sa-secret -n minio-operator -o json | jq -r '.data.token' | base64 -d
如果您的本地主机未安装
jq
实用程序,您可以运行kubectl
命令的一部分(在| jq
之前),并找到输出中的data.token
部分。
将 MinIO Operator 4.0.0 到 4.2.2 升级到 4.2.3
先决条件
此过程假设:
您有一个现有的 MinIO Operator 部署,运行从 4.0.0 到 4.2.2 的任何版本。
您的 Kubernetes 集群运行的是 1.19.0 或更高版本
您的本地主机安装了
kubectl
并配置为访问 Kubernetes 集群
流程
此过程涵盖将运行从 4.0.0 到 4.2.2 的任何版本的 MinIO Operator 部署升级到 4.2.3 所需的步骤。然后,您可以执行 将 MinIO Operator 5.0.15 升级到 6.0.4 以完成升级到 6.0.4。
从 4.0.0 到 4.2.2 的安装程序没有直接的升级路径到 6.0.4。
(可选) 将每个 MinIO 租户更新到最新的稳定 MinIO 版本。
定期升级 MinIO 可确保您的租户拥有最新的功能和性能改进。在应用于生产租户之前,请在开发或测试租户等较低的环境中测试升级。
有关升级 MinIO 租户的步骤,请参阅 升级 MinIO 租户。
检查每个租户池的安全上下文
使用以下命令验证每个托管的 MinIO 租户的规范
kubectl get tenants <TENANT-NAME> -n <TENANT-NAMESPACE> -o yaml
如果租户不存在
spec.pools.securityContext
字段,则租户 Pod 可能以 root 身份运行。作为 4.2.3 及更高系列的一部分,Pod 以受限的权限集运行,这些权限集在 Operator 升级过程中强制执行。但是,以 root 身份运行 Pod 的租户可能由于安全上下文不匹配而无法启动。您可以为这些租户设置一个明确的安全上下文,允许 Pod 以 root 身份运行。
securityContext: runAsUser: 0 runAsGroup: 0 runAsNonRoot: false fsGroup: 0
您可以使用以下命令编辑租户并应用更改
kubectl edit tenants <TENANT-NAME> -n <TENANT-NAMESPACE> # Modify the securityContext as needed
有关 Kubernetes 安全上下文的更多信息,请参阅 Pod 安全标准。
升级到 Operator 4.2.3
下载 MinIO Kubernetes 插件 4.2.3 并使用它来升级 Operator。在浏览器中打开 https://github.com/minio/operator/releases/tag/v4.2.3 并下载与您本地主机操作系统相对应的二进制文件。
例如,运行 Intel 或 AMD 处理器的 Linux 主机可以运行以下命令
wget https://github.com/minio/operator/releases/download/v4.2.3/kubectl-minio_4.2.3_linux_amd64 -o kubectl-minio_4.2.3 chmod +x kubectl-minio_4.2.3 ./kubectl-minio_4.2.3 init
验证所有租户和 Operator Pod
检查 Operator 和 MinIO 租户命名空间,以确保所有 Pod 和服务都已成功启动。
例如
kubectl get all -n minio-operator kubectl get pods -l "v1.min.io/tenant" --all-namespaces
升级到 6.0.4
按照 将 MinIO Operator 5.0.15 升级到 6.0.4 过程升级到最新的稳定 Operator 版本。
将 MinIO Operator 3.0.0 到 3.0.29 升级到 4.2.2
先决条件
此过程假设:
您有一个运行 3.X.X 的现有 MinIO Operator 部署。
您的 Kubernetes 集群运行的是 1.19.0 或更高版本
您的本地主机安装了
kubectl
并配置为访问 Kubernetes 集群
流程
此过程涵盖将运行从 3.0.0 到 3.2.9 的任何版本的 MinIO Operator 部署升级到 4.2.2 所需的步骤。然后,您可以执行 将 MinIO Operator 4.0.0 到 4.2.2 升级到 4.2.3,然后执行 将 MinIO Operator 5.0.15 升级到 6.0.4。
从 3.X.X 系列安装程序到 6.0.4 没有直接的升级路径。
(可选)将每个 MinIO 租户更新到最新的稳定 MinIO 版本。
定期升级 MinIO 可确保您的租户拥有最新的功能和性能改进。
在应用于生产租户之前,请在较低的环境(例如开发或 QA 租户)中测试升级。
有关升级 MinIO 租户的步骤,请参阅 升级 MinIO 租户。
验证租户
tenant.spec.zones
值使用以下命令验证每个托管的 MinIO 租户的规范
kubectl get tenants <TENANT-NAME> -n <TENANT-NAMESPACE> -o yaml
确保每个
tenant.spec.zones
元素都具有设置为该区域名称的name
字段。每个区域必须对该租户具有唯一的名称,例如,对于第一个和第二个区域,分别为zone-0
和zone-1
。确保每个
tenant.spec.zones
具有一个明确的securityContext
,描述 Pod 在集群中运行的权限集。
以下示例租户 YAML 片段设置指定的字段
image: "minio/minio:$(LATEST-VERSION)" ... zones: - servers: 4 name: "zone-0" volumesPerServer: 4 volumeClaimTemplate: metadata: name: data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Ti securityContext: runAsUser: 0 runAsGroup: 0 runAsNonRoot: false fsGroup: 0 - servers: 4 name: "zone-1" volumesPerServer: 4 volumeClaimTemplate: metadata: name: data spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Ti securityContext: runAsUser: 0 runAsGroup: 0 runAsNonRoot: false fsGroup: 0
您可以使用以下命令编辑租户并应用更改
kubectl edit tenants <TENANT-NAME> -n <TENANT-NAMESPACE>
升级到 Operator 4.2.2
下载 MinIO Kubernetes 插件 4.2.2 并使用它来升级 Operator。在浏览器中打开 https://github.com/minio/operator/releases/tag/v4.2.2 并下载与您本地主机操作系统相对应的二进制文件。例如,运行 Intel 或 AMD 处理器的 Linux 主机可以运行以下命令
wget https://github.com/minio/operator/releases/download/v4.2.3/kubectl-minio_4.2.2_linux_amd64 -o kubectl-minio_4.2.2 chmod +x kubectl-minio_4.2.2 ./kubectl-minio_4.2.2 init
验证所有租户和 Operator Pod
检查 Operator 和 MinIO 租户命名空间,以确保所有 Pod 和服务都已成功启动。
例如
kubectl get all -n minio-operator kubectl get pods -l "v1.min.io/tenant" --all-namespaces
升级到 4.2.3
按照 将 MinIO Operator 4.0.0 到 4.2.2 升级到 4.2.3 过程升级到 Operator 4.2.3。然后您可以升级到 6.0.4。