跳转至

使用 NebulaGraph Operator 升级 NebulaGraph 集群版本

本文介绍如何使用 NebulaGraph Operator 在 Kubernetes 环境中升级 NebulaGraph 集群的版本。

历史版本兼容性

1.x 版本的 NebulaGraph Operator 不兼容 3.x 以下版本的 NebulaGraph。

使用限制

  • 只支持升级使用 NebulaGraph Operator 创建的 NebulaGraph 集群。
  • 只支持升级 NebulaGraph 3.5.0 至 3.6.0 版本。

前提条件

已创建 NebulaGraph 集群。具体步骤,参见创建 NebulaGraph 集群

使用kubectl升级 NebulaGraph 集群

本示例中待升级的 NebulaGraph 版本为 3.5.0。

  1. 查看集群中服务的镜像版本。

    kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
    

    返回示例:

          1 vesoft/nebula-graphd:v3.5.0
          1 vesoft/nebula-metad:v3.5.0
          3 vesoft/nebula-storaged:v3.5.0  
    
  2. 编辑nebula集群配置,将集群服务的version的值从 3.5.0 修改至 v3.8.0。

    1. 打开nebula集群的 YAML 文件。

      kubectl edit nebulacluster nebula -n <namespace>
      
    2. 更新version的值。

      修改后的 YAML 文件内容如下:

      apiVersion: apps.nebula-graph.io/v1alpha1
      kind: NebulaCluster
      metadata:
        name: nebula
      spec:
        graphd:
          version: v3.8.0 //将值从 3.5.0 修改至 v3.8.0。
          ...
        metad:
          version: v3.8.0 //将值从 3.5.0 修改至 v3.8.0。
          ...
        storaged:
          version: v3.8.0 //将值从 3.5.0 修改至 v3.8.0。
          ...
      
  3. 应用配置。

    保存 YAML 文件并退出后,Kubernetes 会自动更新集群的配置,并开始升级集群。

  4. 等待约 2 分钟后,执行以下命令可查看到服务的镜像版本变更为 v3.8.0。

    kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
    

    返回:

          1 vesoft/nebula-graphd:v3.8.0
          1 vesoft/nebula-metad:v3.8.0
          3 vesoft/nebula-storaged:v3.8.0  
    

使用helm升级 NebulaGraph 集群

  1. 更新 Helm 仓库,拉取最新的仓库资源。

    helm repo update
    
  2. 配置 Helm 的环境变量。

    export NEBULA_CLUSTER_NAME=nebula         # NebulaGraph 集群的名字。
    export NEBULA_CLUSTER_NAMESPACE=nebula    # NebulaGraph 集群所处的命名空间的名字。
    
  3. 升级 NebulaGraph 集群。

    例如升级至 v3.8.0 NebulaGraph 集群的命令如下。

    helm upgrade "${NEBULA_CLUSTER_NAME}" nebula-operator/nebula-cluster \
        --namespace="${NEBULA_CLUSTER_NAMESPACE}" \
        --set nameOverride=${NEBULA_CLUSTER_NAME} \
        --set nebula.version=v3.8.0
    

    --set nebula.version的值指需要升级集群的目标版本号。

  4. 查看集群状态及集群版本。

    查看集群状态:

    $ kubectl -n "${NEBULA_CLUSTER_NAMESPACE}" get pod -l "app.kubernetes.io/cluster=${NEBULA_CLUSTER_NAME}"
    NAME                READY   STATUS    RESTARTS   AGE
    nebula-graphd-0     1/1     Running   0          2m
    nebula-graphd-1     1/1     Running   0          2m
    nebula-metad-0      1/1     Running   0          2m
    nebula-metad-1      1/1     Running   0          2m
    nebula-metad-2      1/1     Running   0          2m
    nebula-storaged-0   1/1     Running   0          2m
    nebula-storaged-1   1/1     Running   0          2m
    nebula-storaged-2   1/1     Running   0          2m
    

    查看集群版本:

    $ kubectl get pods -l app.kubernetes.io/cluster=nebula  -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
          1 vesoft/nebula-graphd:v3.8.0
          1 vesoft/nebula-metad:v3.8.0
          3 vesoft/nebula-storaged:v3.8.0
    

加速升级过程

集群的升级过程是一个滚动更新的过程也是耗时的过程,因为 Storage 服务的 Leader 分片副本会进行状态转移。用户可在集群实例的 YAML 文件中配置enableForceUpdate参数,来略过 Leader 分片副本转移操作,以达到加速升级的过程。详情参见配置滚动更新策略

故障排查

升级过程中,如果遇到问题,查看集群服务 Pod 的日志。

kubectl logs <pod-name> -n <namespace>

同时,检查集群的状态和事件。

kubectl describe nebulaclusters <cluster-name> -n <namespace>

最后更新: 2024年12月19日