nebula-operator方式部署nebula-cluster,仅重启nebula-cluster时候,只重启了graphd,metad和storaged都没有重启

nebula-operator:v0.9.0
nebula-cluster:v2.6.2

1、nebula-operator方式部署nebula-cluster,仅重启nebula-cluster时候,只重启了graphd,metad和storaged都没有重启,但是正常扩缩容时,是正常的。请问这是什么情况?
2、上面这种方式部署的nebula集群是否可以部署使用nebula-importer工具?

  1. 请问你是如何重启nebula-cluster的
  2. 可以的,你可以创建一个包含importer的pod在集群内访问nebula,也可以创建一个node port类型的service,在集群外访问 连接 Nebula Graph 数据库 - Nebula Graph Database 手册
1 个赞

我们重启的时候一般是apply对应的yaml文件,nebula-cluster重启的具体步骤是不是在operator里面控制的?是不是有什么特殊的逻辑呢?

是在operator里控制的,可能是因为你apply只改了graphd相关的spec,与metad和stroaged无关,所以另外两个组件没变化

三个组件都没修改spec里面的,现在就是创建和重启的时候是一模一样的spec,也是同样的只会重启graphd

了解了,就是你重复执行apply nebula-cluster,graphd会稳定重启?,可以提供一下你的nebula-cluster yaml 和graphd的yaml吗,另外是否可以提供graphd重启时,nebula-operator的相关日志

是的。现在就是为了测试一下重启nebula-cluster集群的时候在单个replicas和多个replicas会不会出现数据丢失等问题。升级或者扩缩容是不会有这个问题的。
下面是pod的describe和logs,其他的看不到了。



nebula-cluster.yaml (6.2 KB)

看样子你是通过helm部署的?可以把apply的完整nebulacluster yaml文件贴一下吗,你发的这个是helm的配置

是的,通过helm的recreate pod重启nebula-cluster的。
apply完成的nebula-cluster yaml文件是指通过kubectl edit pod 获取到的那个吗?

所以你的helm是v2版本?我怀疑是recreate pod这个命令导致的,看上去像是重启某个pod,因为nebulacluster是一个自定义资源,所以没有重启概念。如果你要更新它而触发某个nebula组件的重启,可以试一试通过kubectl edit 修改某个spec属性

目前helm是v3版本,就是在没有修改的spec属性的情况,只重启了graphd不是很好理解。

了解,可以贴一下你使用的命令吗,我这边尝试复现一下

使用的helm v3 client,—recreate-pod 命令应该是这个参数
// recreate captures all the logic for recreating pods for both upgrade and
// rollback. If we end up refactoring rollback to use upgrade, this can just be
// made an unexported method on the upgrade action.

func recreate(cfg *Configuration, resources kube.ResourceList) error {
	for _, res := range resources {
		versioned := kube.AsVersioned(res)
		selector, err := kube.SelectorsForObject(versioned)
		if err != nil {
			// If no selector is returned, it means this object is
			// definitely not a pod, so continue onward
			continue
		}

		client, err := cfg.KubernetesClientSet()
		if err != nil {
			return errors.Wrapf(err, "unable to recreate pods for object %s/%s because an error occurred", res.Namespace, res.Name)
		}

		pods, err := client.CoreV1().Pods(res.Namespace).List(context.Background(), metav1.ListOptions{
			LabelSelector: selector.String(),
		})
		if err != nil {
			return errors.Wrapf(err, "unable to recreate pods for object %s/%s because an error occurred", res.Namespace, res.Name)
		}

		// Restart pods
		for _, pod := range pods.Items {
			// Delete each pod for get them restarted with changed spec.
			if err := client.CoreV1().Pods(pod.Namespace).Delete(context.Background(), pod.Name, *metav1.NewPreconditionDeleteOptions(string(pod.UID))); err != nil {
				return errors.Wrapf(err, "unable to recreate pods for object %s/%s because an error occurred", res.Namespace, res.Name)
			}
		}
	}
	return nil
}

我本地通过helm命令执行,没有重启,recreate-pod 在helm里是和 rollback 命令一起用的,helm rollback --recreate-pod, 它会将helm部署的nebulacluster回滚,如果有pod版本和之前不一致,会重启pod,你可以打印一下versioned和selector,和你环境里的pod对比一下

如果你想验证重启,一个简单的方法就是把meatd、storaged、graphd的sts删掉,kubectl delete sts nebula-metad,或者先scale replicas到 0,再scale回去

好的。谢谢解答。

如果你觉得 kqzh 的回复解决了你的问题,你可以勾选为【解决方案】哈,方便后续遇到相似问题的小伙伴可以快速找到答案~

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。