nebula-operator:v0.9.0
nebula-cluster:v2.6.2
1、nebula-operator方式部署nebula-cluster,仅重启nebula-cluster时候,只重启了graphd,metad和storaged都没有重启,但是正常扩缩容时,是正常的。请问这是什么情况?
2、上面这种方式部署的nebula集群是否可以部署使用nebula-importer工具?
nebula-operator:v0.9.0
nebula-cluster:v2.6.2
1、nebula-operator方式部署nebula-cluster,仅重启nebula-cluster时候,只重启了graphd,metad和storaged都没有重启,但是正常扩缩容时,是正常的。请问这是什么情况?
2、上面这种方式部署的nebula集群是否可以部署使用nebula-importer工具?
我们重启的时候一般是apply对应的yaml文件,nebula-cluster重启的具体步骤是不是在operator里面控制的?是不是有什么特殊的逻辑呢?
是在operator里控制的,可能是因为你apply只改了graphd相关的spec,与metad和stroaged无关,所以另外两个组件没变化
了解了,就是你重复执行apply nebula-cluster,graphd会稳定重启?,可以提供一下你的nebula-cluster yaml 和graphd的yaml吗,另外是否可以提供graphd重启时,nebula-operator的相关日志
是的。现在就是为了测试一下重启nebula-cluster集群的时候在单个replicas和多个replicas会不会出现数据丢失等问题。升级或者扩缩容是不会有这个问题的。
下面是pod的describe和logs,其他的看不到了。
看样子你是通过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 天后被自动关闭。不再允许新回复。