Upgrade NebulaGraph clusters created with NebulaGraph Operator¶
This topic introduces how to upgrade a NebulaGraph cluster created with NebulaGraph Operator.
Legacy version compatibility
The 1.x version NebulaGraph Operator is not compatible with NebulaGraph of version below v3.x.
Limits¶
- Only for upgrading the NebulaGraph clusters created with NebulaGraph Operator.
- Only support upgrading the NebulaGraph version from 3.0.0 to 3.4.0.
- For upgrading NebulaGraph Enterprise Edition clusters, contact us.
Upgrade a NebulaGraph cluster with Kubectl¶
Prerequisites¶
You have created a NebulaGraph cluster with Kubectl. For details, see Create a NebulaGraph cluster with Kubectl.
The version of the NebulaGraph cluster to be upgraded in this topic is 3.0.0
, and its YAML file name is apps_v1alpha1_nebulacluster.yaml
.
Steps¶
-
Check the image version of the services in the cluster.
kubectl get pods -l app.kubernetes.io/cluster=nebula -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
Output:
1 vesoft/nebula-graphd:3.0.0 1 vesoft/nebula-metad:3.0.0 3 vesoft/nebula-storaged:3.0.0
-
Edit the
apps_v1alpha1_nebulacluster.yaml
file by changing the values of all theversion
parameters from 3.0.0 to v3.4.0.The modified YAML file reads as follows:
apiVersion: apps.nebula-graph.io/v1alpha1 kind: NebulaCluster metadata: name: nebula spec: graphd: resources: requests: cpu: "500m" memory: "500Mi" limits: cpu: "1" memory: "1Gi" replicas: 1 image: vesoft/nebula-graphd version: v3.4.0 //Change the value from 3.0.0 to v3.4.0. service: type: NodePort externalTrafficPolicy: Local logVolumeClaim: resources: requests: storage: 2Gi storageClassName: fast-disks metad: resources: requests: cpu: "500m" memory: "500Mi" limits: cpu: "1" memory: "1Gi" replicas: 1 image: vesoft/nebula-metad version: v3.4.0 //Change the value from 3.0.0 to v3.4.0. dataVolumeClaim: resources: requests: storage: 2Gi storageClassName: fast-disks logVolumeClaim: resources: requests: storage: 2Gi storageClassName: fast-disks storaged: resources: requests: cpu: "500m" memory: "500Mi" limits: cpu: "1" memory: "1Gi" replicas: 3 image: vesoft/nebula-storaged version: v3.4.0 //Change the value from 3.0.0 to v3.4.0. dataVolumeClaims: - resources: requests: storage: 2Gi storageClassName: fast-disks - resources: requests: storage: 2Gi storageClassName: fast-disks logVolumeClaim: resources: requests: storage: 2Gi storageClassName: fast-disks reference: name: statefulsets.apps version: v1 schedulerName: default-scheduler imagePullPolicy: Always
-
Run the following command to apply the version update to the cluster CR.
kubectl apply -f apps_v1alpha1_nebulacluster.yaml
-
After waiting for about 2 minutes, run the following command to see if the image versions of the services in the cluster have been changed to v3.4.0.
kubectl get pods -l app.kubernetes.io/cluster=nebula -o jsonpath="{.items[*].spec.containers[*].image}" |tr -s '[[:space:]]' '\n' |sort |uniq -c
Output:
1 vesoft/nebula-graphd:v3.4.0 1 vesoft/nebula-metad:v3.4.0 3 vesoft/nebula-storaged:v3.4.0
Upgrade a NebulaGraph cluster with Helm¶
Prerequisites¶
You have created a NebulaGraph cluster with Helm. For details, see Create a NebulaGraph cluster with Helm.
Steps¶
-
Update the information of available charts locally from chart repositories.
helm repo update
-
Set environment variables to your desired values.
export NEBULA_CLUSTER_NAME=nebula # The desired NebulaGraph cluster name. export NEBULA_CLUSTER_NAMESPACE=nebula # The desired namespace where your NebulaGraph cluster locates.
-
Upgrade a NebulaGraph cluster.
For example, upgrade a cluster to v3.4.0.
helm upgrade "${NEBULA_CLUSTER_NAME}" nebula-operator/nebula-cluster \ --namespace="${NEBULA_CLUSTER_NAMESPACE}" \ --set nameOverride=${NEBULA_CLUSTER_NAME} \ --set nebula.version=v3.4.0
The value of
--set nebula.version
specifies the version of the cluster you want to upgrade to. -
Run the following command to check the status and version of the upgraded cluster.
Check cluster status:
$ 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
Check cluster version:
$ 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.4.0 1 vesoft/nebula-metad:v3.4.0 3 vesoft/nebula-storaged:v3.4.0
Accelerate the upgrade process¶
The upgrade process of a cluster is a rolling update process and can be time-consuming due to the state transition of the leader partition replicas in the Storage service. You can configure the enableForceUpdate
field in the cluster instance's YAML file to skip the leader partition replica transfer operation, thereby accelerating the upgrade process. For more information, see Specify a rolling update strategy.