升级 Kubernetes 的 Redis Enterprise 7.8.2-6
此任务描述了如何通过操作员升级Redis Enterprise集群。
Redis 在 Kubernetes 部署中实现了软件升级的滚动更新。升级过程包括更新三个组件:
先决条件
以下步骤确保您拥有升级到7.8.2-6所需的所有组件的最低版本。如果没有这些最低版本,升级将冻结并需要手动恢复。
请参阅故障排除部分以了解如何恢复失败的升级。
Kubernetes 版本
检查支持的Kubernetes发行版以确保您的Kubernetes发行版受7.8.2-6支持。如果不支持,请在升级Redis操作符之前升级您的Kubernetes发行版。
Redis 操作员版本
在升级到7.8.2-6之前,您的Redis Enterprise集群必须运行7.4.2-2或更高版本。有关详细步骤,请参阅7.4升级。
Redis 数据库版本
在将集群版本升级到7.8.2-6之前,您的Redis数据库必须运行7.2或更高版本。有关详细步骤,请参阅升级数据库。您可以在REDB spec.redisVersion
字段中找到您的数据库版本。
RHEL9兼容模块
升级到Redis操作员版本7.8.2-6涉及将您的Redis Enterprise节点从Ubuntu 18或RHEL8迁移到RHEL9。如果您的数据库使用模块,您需要手动安装与RHEL9兼容的模块。
要查看已安装的模块,请运行:
curl -k -u <rec_username>:<rec_password> -X GET https://localhost:9443/v1/modules | jq -r 'map([.module_name, .semantic_version, (.platforms | keys)]) | .[] | .[0] as $name | .[1] as $version | .[2][] | $name + "-" + $version + "-" + .' | sort
要查看当前正在使用的模块,请运行:
curl -k -u <rec_username>:<rec_password> -X GET https://localhost:9443/v1/bdbs | jq -r '.[].module_list | map(.module_name + "-" + .semantic_version) | .[]'
有关如何使用rladmin
工具升级模块的详细信息,请参见Upgrade modules。
有效许可证
在开始升级过程之前,请使用kubectl get rec
并验证您的REC上的LICENSE STATE
是否有效。
升级操作员
下载捆绑包
确保你拉取了正确版本的捆绑包。你可以通过查看GitHub上的操作员发布或使用GitHub API来找到版本标签。
您可以使用以下curl
命令下载最新版本的捆绑包:
VERSION=`curl --silent https://api.github.com/repos/RedisLabs/redis-enterprise-k8s-docs/releases/latest | grep tag_name | awk -F'"' '{print $4}'`
curl --silent -O https://raw.githubusercontent.com/RedisLabs/redis-enterprise-k8s-docs/$VERSION/bundle.yaml
如果你需要不同的版本,请将上面的VERSION
替换为特定的发布标签。
应用捆绑包
应用捆绑包以部署新的操作员二进制文件。这也将应用新版本中对自定义资源定义、角色、角色绑定或操作员服务帐户的任何更改。
使用单个命令升级捆绑包和操作符,传入捆绑包 YAML 文件:
kubectl apply -f bundle.yaml
运行此命令后,您应该会看到类似以下结果:
role.rbac.authorization.k8s.io/redis-enterprise-operator configured
serviceaccount/redis-enterprise-operator configured
rolebinding.rbac.authorization.k8s.io/redis-enterprise-operator configured
customresourcedefinition.apiextensions.k8s.io/redisenterpriseclusters.app.redislabs.com configured
customresourcedefinition.apiextensions.k8s.io/redisenterprisedatabases.app.redislabs.com configured
deployment.apps/redis-enterprise-operator configured
重新应用准入控制器webhook
如果您启用了准入控制器,您需要手动重新应用ValidatingWebhookConfiguration
。
6.4.2及更高版本使用新的ValidatingWebhookConfiguration
资源来替换redb-admission
。要使用更新的版本,请删除旧的webhook资源并应用新的文件。
-
删除Kubernetes集群上现有的
ValidatingWebhookConfiguration
(名为redb-admission
)。```sh kubectl delete ValidatingWebhookConfiguration redb-admission ```
-
从新文件中应用资源。
```sh kubectl apply -f deploy/admission/webhook.yaml ```
-
验证
admission-tls
密钥是否存在。kubectl get secret admission-tls
输出应该看起来类似于
NAME TYPE DATA AGE admission-tls Opaque 2 2m43s
-
将证书保存到本地环境变量。
CERT=`kubectl get secret admission-tls -o jsonpath='{.data.cert}'`
-
创建一个Kubernetes验证webhook,将
替换为安装REC的命名空间。webhook.yaml
模板可以在 redis-enterprise-k8s-docs/admission 中找到sed 's/OPERATOR_NAMESPACE/<namespace>/g' webhook.yaml | kubectl create -f -
-
为Kubernetes验证webhook创建一个补丁文件。
cat > modified-webhook.yaml <<EOF webhooks: - name: redisenterprise.admission.redislabs clientConfig: caBundle: $CERT EOF
-
使用证书修补webhook。
kubectl patch ValidatingWebhookConfiguration \ redis-enterprise-admission --patch "$(cat modified-webhook.yaml)"
验证操作员是否正在运行
您可以检查您的部署以验证操作员是否在您的命名空间中运行。
kubectl get deployment/redis-enterprise-operator
你应该会看到类似这样的结果:
NAME READY UP-TO-DATE AVAILABLE AGE
redis-enterprise-operator 1/1 1 1 0m36s
升级Redis企业集群(REC)
Redis Enterprise集群(REC)可以自动或手动更新。要在操作员升级完成后触发REC的自动升级,请在您的REC规范中指定autoUpgradeRedisEnterprise: true
。如果您没有启用自动升级,请按照以下步骤进行手动升级。
在开始升级Redis Enterprise集群之前,请查看Redis Enterprise for Kubernetes发布说明以找到Redis Enterprise镜像标签。
操作员升级完成后,您可以升级Redis Enterprise集群(REC)。
升级带有Active-Active数据库的REC
我们建议将所有参与的集群升级到相同的操作员版本。
如果您正在从Active-Active控制器的预览版本升级,您可以移除以下环境变量:ACTIVE_ACTIVE_DATABASE_CONTROLLER_ENABLED
, REMOTE_CLUSTER_CONTROLLER_ENABLED
, 和 ENABLE_ALPHA_FEATURES
。
编辑REC规范中的redisEnterpriseImageSpec
-
编辑REC自定义资源的YAML文件。
kubectl edit rec <your-rec.yaml>
-
将
redisEnterpriseImageSpec
下的versionTag:
声明替换为新的版本标签。spec: redisEnterpriseImageSpec: imagePullPolicy: IfNotPresent repository: redislabs/redis versionTag: <new-version-tag>
-
保存更改以应用。
重新应用角色和角色绑定
如果您的操作员正在监控多个命名空间,您将需要为每个受管理的命名空间重新应用您的角色和角色绑定。有关更多详细信息,请参阅在多个命名空间中管理数据库。
监控升级
你可以使用 kubectl get rec
查看 REC 的状态。
在升级过程中,状态应为Upgrade
。
当升级完成且集群准备就绪时,状态将变为Running
。
如果状态为InvalidUpgrade
,则升级过程中存在错误(通常与配置有关)。
$ kubectl get rec
NAME NODES VERSION STATE SPEC STATUS LICENSE STATE SHARDS LIMIT LICENSE EXPIRATION DATE AGE
rec 3 6.2.10-107 Upgrade Valid Valid 4 2022-07-16T13:59:00Z 92m
要查看当前滚动升级的状态,请运行:
kubectl rollout status sts <REC_name>
升级数据库
集群升级后,您可以升级您的数据库。在您的REDB和REAADB自定义资源的spec.redisVersion
字段中指定新的数据库版本。操作员版本7.8.2-6支持的数据库版本包括"7.2"
和"7.4"
(注意此值为字符串)。
请注意,如果您的集群redisUpgradePolicy
或您的数据库redisVersion
设置为major
,您将无法将这些数据库升级到次要版本。有关更多详细信息,请参阅Redis升级策略。
故障排除
如果您在未满足先决条件的情况下开始升级,操作员将冻结升级。请检查操作员日志以查找错误来源。在升级期间,REDB 的协调功能无法正常工作,因此您需要使用 Redis 软件 API 手动修复(示例如下)。更新还需要添加到 REDB 自定义资源中。
无效的模块版本
如果操作员日志显示与不受支持的模块相关的事件,请在本地下载更新的模块,并使用v2/modules
API端点进行安装。
curl -sfk -u <rec_username>:<rec_password> -X POST -F 'module=@<full path to your module>' https://localhost:9443/v2/modules
使用Redis软件API更新模块后,更新REDB自定义资源以反映更改。
无效的数据库版本
如果操作员日志显示与不兼容的数据库版本相关的事件,请使用Redis Software API升级数据库。
curl -sfk -u <rec_username>:<rec_password> -X POST -H "Content-Type: application/json" -d '{"redis_version": <target redis version>}' https://localhost:9443/v1/bdbs/<BDB UID>/upgrade
使用Redis软件API更新模块后,更新REDB自定义资源以反映更改。