升级 Kubernetes 的 Redis Enterprise 7.8.2-6

此任务描述了如何通过操作员升级Redis Enterprise集群。

Redis 在 Kubernetes 部署中实现了软件升级的滚动更新。升级过程包括更新三个组件:

  1. 升级Redis Enterprise操作符
  2. 升级Redis企业集群(REC)
  3. 升级 Redis Enterprise 数据库 (REDB)

先决条件

以下步骤确保您拥有升级到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替换为特定的发布标签。

应用捆绑包

应用捆绑包以部署新的操作员二进制文件。这也将应用新版本中对自定义资源定义、角色、角色绑定或操作员服务帐户的任何更改。

注意:
如果您不是从Docker Hub拉取镜像,请更新操作员镜像规范以指向您的私有仓库。 如果您已对前一版本中的角色、角色绑定、RBAC或自定义资源定义(CRD)进行了更改,请将它们与新版本文件中的更新声明合并。

使用单个命令升级捆绑包和操作符,传入捆绑包 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

Note:

6.4.2及更高版本使用新的ValidatingWebhookConfiguration资源来替换redb-admission。要使用更新的版本,请删除旧的webhook资源并应用新的文件。

  1. 删除Kubernetes集群上现有的ValidatingWebhookConfiguration(名为redb-admission)。

     ```sh
     kubectl delete ValidatingWebhookConfiguration redb-admission
     ```
    
  2. 从新文件中应用资源。

     ```sh
     kubectl apply -f deploy/admission/webhook.yaml
     ```
    
  1. 验证admission-tls密钥是否存在。

    kubectl get secret admission-tls
    

    输出应该看起来类似于

    NAME            TYPE     DATA   AGE
    admission-tls   Opaque   2      2m43s
    
  2. 将证书保存到本地环境变量。

    CERT=`kubectl get secret admission-tls -o jsonpath='{.data.cert}'`
    
  3. 创建一个Kubernetes验证webhook,将替换为安装REC的命名空间。

    webhook.yaml 模板可以在 redis-enterprise-k8s-docs/admission 中找到

    sed 's/OPERATOR_NAMESPACE/<namespace>/g' webhook.yaml | kubectl create -f -
    
  4. 为Kubernetes验证webhook创建一个补丁文件。

    cat > modified-webhook.yaml <<EOF
    webhooks:
    - name: redisenterprise.admission.redislabs
      clientConfig:
       caBundle: $CERT
    EOF
    
  5. 使用证书修补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
警告:
我们建议在更新操作员后尽快升级REC。操作员升级完成后,操作员将暂停对REC及其关联的REDBs的管理,直到REC升级完成。

升级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

  1. 编辑REC自定义资源的YAML文件。

    kubectl edit rec <your-rec.yaml>
    
  2. redisEnterpriseImageSpec下的versionTag:声明替换为新的版本标签。

    spec:
      redisEnterpriseImageSpec:
        imagePullPolicy:  IfNotPresent
        repository:       redislabs/redis
        versionTag:       <new-version-tag>
    
  3. 保存更改以应用。

重新应用角色和角色绑定

如果您的操作员正在监控多个命名空间,您将需要为每个受管理的命名空间重新应用您的角色和角色绑定。有关更多详细信息,请参阅在多个命名空间中管理数据库

监控升级

你可以使用 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自定义资源以反映更改。

RATE THIS PAGE
Back to top ↑