Skip to main content

在 Kubernetes 集群中升级 RisingWave

本文将介绍如何使用 RisingWave Kubernetes Operator 和 Helm 在 K8s deployment 中升级 RisingWave。

caution

升级 RisingWave 时,请注意可能存在重大变更。如果升级 RisingWave 到生产环境中遇到任何技术支持问题,请随时与我们联系。

note

假设 Kubernetes 的 namespace 为 default,如果您的 RisingWave 集群部署在其他 namespace 中,请在下方的kubectlhelm 命令中添加-n <namespace>参数,再将 <namespace> 替换成自己的 namespace。

使用 Helm 升级 RisingWave

  1. 检查当前 RisingWave Helm 的状态。

    helm list -f <risingwave-cluster>

    预期输出:

    NAME       NAMESPACE  REVISION UPDATED                                  STATUS   CHART                        APP VERSION
    risingwave default 21 2023-09-20 13:20:58.389424056 +0000 UTC deployed risingwave-0.1.16 v1.3.0
  2. 更新已配置的 Helm 图表仓库中可用图表(软件包)的本地缓存:

    helm repo update
  3. 检查 RisingWave Helm 图表的可用版本:

    helm search repo risingwavelabs/risingwave -l
    Example
    NAME                               CHART VERSION APP VERSION DESCRIPTION
    risingwavelabs/risingwave 0.1.16 v1.1.3 The distributed streaming database SQL stream p...
    risingwavelabs/risingwave 0.1.15 v1.1.2 The distributed streaming database SQL stream p...
    risingwavelabs/risingwave 0.1.14 v1.1.1 The distributed streaming database SQL stream p...
  4. 升级 RisingWave,可以升级到最新版本或特定版本。

    升级到最新版本:

    helm upgrade --reuse-values my-risingwave risingwavelabs/risingwave

    升级到特定版本:

    helm upgrade --set image.tag={risingwave-version} \
    -f values.yaml \
    --reuse-values \
    --version {chart-version} \
    my-risingwave risingwavelabs/risingwave

使用 Operator 升级 RisingWave

记得将所有 <risingwave-cluster> 替换为实际对象名称。

  1. 检查当前 RisingWave 集群的状态。

    kubectl get risingwave <risingwave-cluster>

    预计输出:

    NAME         META STORE   STATE STORE   VERSION   RUNNING   AGE
    risingwave Etcd S3 v1.3.0 True 2m20s
  2. 升级镜像版本。记得将 <target-version> 替换为目标镜像版本。

    kubectl patch risingwave <risingwave-cluster> --type='merge' -p '{"spec": {"image": "ghcr.io/risingwavelabs/risingwave:<target-version>"}}'
  3. 等待重新创建所有的 Pods,Upgrading 条件变为 False 或为空。

    kubectl wait --for=condition=Upgrading=false risingwave/<risingwave-cluster>

如果等待超时,请检查 Pods 是否正常运行。

  • 如果任何 Pods 处于暂停或非运行状态,可能需要首先进行故障排除,查看 Pod 本身是否存在问题。可能的问题包括未找到镜像或未调度 Pod 操作。
  • 如果 meta Pod 未运行,请提交带有日志的问题,并按照以下说明回滚。
  • 如果 meta Pod 正在运行但其他 Pods 未运行,请等待一分钟,看之后是否运行。请提交带有日志的问题,并按照以下说明回滚。
kubectl get pods -l risingwave/name=<risingwave-cluster>

预期输出:

NAME                                    READY   STATUS    RESTARTS      AGE
risingwave-compactor-5cfcb469c5-gnkrp 1/1 Running 2 (1m ago) 2m35s
risingwave-compute-0 1/1 Running 2 (1m ago) 2m35s
risingwave-frontend-86c948f4bb-69cld 1/1 Running 2 (1m ago) 2m35s
risingwave-meta-0 1/1 Running 1 (1m ago) 2m35s

在必要时回滚

如果出现任何问题且在一定时间内无法解决,请使用以下命令回滚升级,记得将 <version-before> 替换为升级之前使用的镜像版本。验证回滚的其他步骤与升级相同。

kubectl patch risingwave <risingwave-cluster> --type='merge' -p '{"spec": {"image": "ghcr.io/risingwavelabs/risingwave:<version-before>"}}'