重启 K8s 上的NebulaGraph集群服务¶
Note
重启集群服务 Pod 功能为 Alpha 版本功能。
在日常维护时,出于各种原因需要重启NebulaGraph集群的某个服务 Pod,例如 Pod 状态异常或是执行强行重启逻辑。Pod 重启的本质是重启服务进程,为了确保服务的高可用性,NebulaGraph Operator 支持优雅滚动重启集群内所有 Graph,Meta,或 Storage 服务 Pod,也支持优雅重启单个 Storage 服务 Pod。
前提条件¶
已经在 K8s 环境中创建了一个NebulaGraph集群。具体步骤,参见创建NebulaGraph集群。
优雅滚动重启集群内某类服务的所有 Pod¶
通过在不同服务 StatefulSet 控制器的配置中添加注解(annotation)nebula-graph.io/restart-timestamp
并将值设置为当前时间来实现优雅滚动重启集群同类服务 Pod。当 NebulaGraph Operator 检测到相应服务的 StatefulSet 控制器存在注解nebula-graph.io/restart-timestamp
并且其值发生了变更,即会触发优雅滚动重启集群内某类服务的所有 Pod 的操作。
以下示例中,为所有 Graph 服务都设置注解,表示将逐个重启所有 Graph 服务 Pod。
假设所有集群名为nebula
,集群资源都放在default
命名空间下,执行以下命令:
-
查看 StatefulSet 控制器的名称。
kubectl get statefulset
示例输出:
NAME READY AGE nebula-graphd 2/2 33s nebula-metad 3/3 69s nebula-storaged 3/3 69s
-
获取当前时间戳。
示例输出:date -u +%s
1700547115
-
覆盖 StatefulSet 控制器时间戳注解以触发优雅滚动重启操作。
kubectl annotate statefulset nebula-graphd nebula-graph.io/restart-timestamp="1700547115" --overwrite
示例输出:
statefulset.apps/nebula-graphd annotate
-
观察重启过程。
kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=graphd -w
示例输出:
NAME READY STATUS RESTARTS AGE nebula-graphd-0 1/1 Running 0 9m37s nebula-graphd-1 0/1 Running 0 17s nebula-graphd-1 1/1 Running 0 20s nebula-graphd-0 1/1 Terminating 0 9m40s nebula-graphd-0 0/1 Terminating 0 9m41s nebula-graphd-0 0/1 Terminating 0 9m42s nebula-graphd-0 0/1 Terminating 0 9m42s nebula-graphd-0 0/1 Terminating 0 9m42s nebula-graphd-0 0/1 Pending 0 0s nebula-graphd-0 0/1 Pending 0 0s nebula-graphd-0 0/1 ContainerCreating 0 0s nebula-graphd-0 0/1 Running 0 2s
上述输出显示所有 Graph 服务 Pod 重启过程。
-
确认 StatefulSet 控制器注解更新。
kubectl get statefulset nebula-graphd -o yaml | grep "nebula-graph.io/restart-timestamp"
示例输出:
nebula-graph.io/last-applied-configuration: '{"persistentVolumeClaimRetentionPolicy":{"whenDeleted":"Retain","whenScaled":"Retain"},"podManagementPolicy":"Parallel","replicas":2,"revisionHistoryLimit":10,"selector":{"matchLabels":{"app.kubernetes.io/cluster":"nebula","app.kubernetes.io/component":"graphd","app.kubernetes.io/managed-by":"nebula-operator","app.kubernetes.io/name":"nebula-graph"}},"serviceName":"nebula-graphd-headless","template":{"metadata":{"annotations":{"nebula-graph.io/cm-hash":"7c55c0e5ac74e85f","nebula-graph.io/restart-timestamp":"1700547815"},"creationTimestamp":null,"labels":{"app.kubernetes.io/cluster":"nebula","app.kubernetes.io/component":"graphd","app.kubernetes.io/managed-by":"nebula-operator","app.kubernetes.io/name":"nebula-graph"}},"spec":{"containers":[{"command":["/bin/sh","-ecx","exec nebula-graph.io/restart-timestamp: "1700547115" nebula-graph.io/restart-timestamp: "1700547815"
由上述输出可知,StatefulSet 控制器的注解已经更新并且 Graph 服务的所有 Pod 已经重启。
优雅滚动重启单个 Storage 服务 Pod¶
通过在 Storage 服务的 StatefulSet 控制器的配置中添加注解(annotation)nebula-graph.io/restart-ordinal
并将值设置为 Storage 服务 Pod 的序号来实现优雅滚动重启单个 Storage 服务 Pod,即执行状态转移操作。在 Storage 服务 Pod 重启后,添加的注解会被删除。
以下示例为序号为1
的 Storage Pod 添加注解,表示将优雅重启名为nebula-storaged-1
的 Storage 服务 Pod。
假设所有集群名为nebula
,集群资源都放在default
命名空间下,执行以下命令:
-
查看 StatefulSet 控制器名称。
kubectl get statefulset
示例输出:
NAME READY AGE nebula-graphd 2/2 33s nebula-metad 3/3 69s nebula-storaged 3/3 69s
-
获取 Storage 服务 Pod 的序号。
kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=storaged
示例输出:
NAME READY STATUS RESTARTS AGE nebula-storaged-0 1/1 Running 0 13h nebula-storaged-1 1/1 Running 0 13h nebula-storaged-2 1/1 Running 0 13h nebula-storaged-3 1/1 Running 0 13h nebula-storaged-4 1/1 Running 0 13h nebula-storaged-5 1/1 Running 0 13h nebula-storaged-6 1/1 Running 0 13h nebula-storaged-7 1/1 Running 0 13h nebula-storaged-8 1/1 Running 0 13h
-
为
nebula-storaged-1
Pod 添加注解以触发优雅滚动重启该 Pod 操作。kubectl annotate statefulset nebula-storaged nebula-graph.io/restart-ordinal="1"
示例输出:
statefulset.apps/nebula-storaged annotate
-
观察重启过程。
kubectl get pods -l app.kubernetes.io/cluster=nebula,app.kubernetes.io/component=storaged -w
示例输出:
NAME READY STATUS RESTARTS AGE nebula-storaged-0 1/1 Running 0 13h nebula-storaged-1 1/1 Running 0 13h nebula-storaged-2 1/1 Running 0 13h nebula-storaged-3 1/1 Running 0 13h nebula-storaged-4 1/1 Running 0 13h nebula-storaged-5 1/1 Running 0 12h nebula-storaged-6 1/1 Running 0 12h nebula-storaged-7 1/1 Running 0 12h nebula-storaged-8 1/1 Running 0 12h nebula-storaged-1 1/1 Running 0 13h nebula-storaged-1 1/1 Terminating 0 13h nebula-storaged-1 0/1 Terminating 0 13h nebula-storaged-1 0/1 Terminating 0 13h nebula-storaged-1 0/1 Terminating 0 13h nebula-storaged-1 0/1 Terminating 0 13h nebula-storaged-1 0/1 Pending 0 0s nebula-storaged-1 0/1 Pending 0 0s nebula-storaged-1 0/1 ContainerCreating 0 0s nebula-storaged-1 0/1 Running 0 1s nebula-storaged-1 1/1 Running 0 10s
由上述输出可知,
nebula-storaged-1
Storage 服务 Pod 已经重启。在重启单个 Storage 服务 Pod 后,数据 Leader 的分布可能不均衡。可以执行
BALANCE LEADER
命令重新均衡数据 Leader 的分布。关于如何查看 Leader 分布情况,请参见SHOW HOSTS
。