diff --git a/README.md b/README.md index ff40141..eb7e257 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,13 @@ ```shell # 适用超级节点 -$ kubectl debugger pod -n -i --rm +$ kubectl debugger pod -n -i --rm -- COMMAND ``` ### 普通节点或者原生节点 ```shell # 适用普通节点和原生节点 -$ kubectl debugger node -i --rm +$ kubectl debugger node -i --rm -- COMMAND ``` ## 超级节点场景特殊说明 diff --git a/cmd/node.go b/cmd/node.go index 1f2c857..04d220a 100644 --- a/cmd/node.go +++ b/cmd/node.go @@ -61,6 +61,8 @@ func (o *NodeCmdOptions) run() { case k8s.SuperNodeType: klog.Warning("kubectl debugger node 子命令不支持超级节点, 请使用 kubectl debugger pod 子命令.") case k8s.NormalNodeType: - klog.Fatal(plugin.SpawnDebuggerPodOnNormalNode(client, helper)) + if err = plugin.SpawnDebuggerPodOnNormalNode(client, helper); err != nil { + klog.Fatal(err) + } } } diff --git a/cmd/pod.go b/cmd/pod.go index 40739df..c184d90 100644 --- a/cmd/pod.go +++ b/cmd/pod.go @@ -35,7 +35,7 @@ func newPodCmd() *cobra.Command { podCmd.Flags().StringVarP(&opt.Namespace, "namespace", "n", "default", "Namespace of the debug pod") podCmd.Flags().StringVarP(&opt.Image, "image", "i", "busybox", "Image of the debug pod") - podCmd.Flags().BoolVarP(&opt.Rm, "rm", "r", false, "Remove the debug pod after it exits") + podCmd.Flags().BoolVarP(&opt.Rm, "rm", "r", true, "Remove the debug pod after it exits") return podCmd } @@ -68,10 +68,14 @@ func (o *PodCmdOptions) run() { switch nodeType { case k8s.NormalNodeType: - klog.Fatal(plugin.SpawnDebuggerPodOnNormalNode(client, helper)) + if err = plugin.SpawnDebuggerPodOnNormalNode(client, helper); err != nil { + klog.Fatal(err) + } case k8s.SuperNodeType: klog.Info("超级节点") - klog.Fatal(plugin.SpawnDebuggerPodOnSuperNode(client, helper)) + if err = plugin.SpawnDebuggerPodOnSuperNode(client, helper); err != nil { + klog.Fatal(err) + } } } diff --git a/src/k8s/k8s.go b/src/k8s/k8s.go index 5162923..4bc7aba 100644 --- a/src/k8s/k8s.go +++ b/src/k8s/k8s.go @@ -142,6 +142,9 @@ func (c *KubernetesClient) RemovePodAnnotation(podName, namespace string) error // 移除指定的注解 annotations := pod.GetAnnotations() if annotations != nil { + if _, exists := annotations[EksDebuggerPodAnnotationKey]; !exists { + return nil + } delete(annotations, EksDebuggerPodAnnotationKey) pod.SetAnnotations(annotations) } @@ -167,7 +170,7 @@ func (c *KubernetesClient) IsDebuggerContainerRunning(podName, namespace string) // 检查指定容器的状态 for _, container := range pod.Status.ContainerStatuses { - if container.Name == "debugger" { + if container.Name == "[pod-debugger]debugger" { return container.State.Running != nil, nil } } diff --git a/src/plugin/plugin.go b/src/plugin/plugin.go index 8aa2c8a..73e324b 100644 --- a/src/plugin/plugin.go +++ b/src/plugin/plugin.go @@ -38,7 +38,7 @@ func SpawnDebuggerPodOnSuperNode(client *k8s.KubernetesClient, helper *DebuggerP fmt.Printf("spawning debugger pod in pod %s success\n", helper.PodName) - err = client.ExecCommand(helper.PodName, helper.Namespace, "debugger", helper.Command) + err = client.ExecCommand(helper.PodName, helper.Namespace, "[pod-debugger]debugger", helper.Command) // 仅输出报错,依然根据 --rm 参数删除pod if err != nil { klog.Errorf("Error executing command: %v\n", err)