This is an automated email from the ASF dual-hosted git repository.

zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git


The following commit(s) were added to refs/heads/master by this push:
     new 1b3ba344 [horus] Changing the project name and adding a new pod action 
(#378)
1b3ba344 is described below

commit 1b3ba34472dde794dbe4195ccc46cc5ef55c02bc
Author: mfordjody <[email protected]>
AuthorDate: Wed Sep 25 13:57:10 2024 +0800

    [horus] Changing the project name and adding a new pod action (#378)
    
    fix typo
---
 app/horus/core/horuser/action.go                   | 166 ---------------------
 app/horus/core/horuser/node_cordon.go              |  58 +++++++
 .../core/horuser/{downtime.go => node_downtime.go} |   0
 app/horus/core/horuser/node_drain.go               |  65 ++++++++
 .../core/horuser/{modular.go => node_modular.go}   |   0
 .../core/horuser/{recovery.go => node_recovery.go} |   0
 .../core/horuser/{restart.go => node_restart.go}   |   0
 app/horus/core/horuser/node_uncordon.go            |  54 +++++++
 app/horus/core/horuser/pod_evict.go                |  52 +++++++
 app/horus/core/horuser/pod_remove.go               |  48 ++++++
 app/horus/core/horuser/{prome.go => query.go}      |   0
 11 files changed, 277 insertions(+), 166 deletions(-)

diff --git a/app/horus/core/horuser/action.go b/app/horus/core/horuser/action.go
deleted file mode 100644
index 53a7ba89..00000000
--- a/app/horus/core/horuser/action.go
+++ /dev/null
@@ -1,166 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//     http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package horuser
-
-import (
-       "fmt"
-       v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-       "k8s.io/klog/v2"
-)
-
-func (h *Horuser) Cordon(nodeName, clusterName, moduleName string) (err error) 
{
-       kubeClient := h.kubeClientMap[clusterName]
-       if kubeClient == nil {
-               klog.Errorf("node Cordon kubeClient by clusterName empty.")
-               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
-               return err
-       }
-
-       ctxFirst, cancelFirst := h.GetK8sContext()
-       defer cancelFirst()
-       node, err := kubeClient.CoreV1().Nodes().Get(ctxFirst, nodeName, 
v1.GetOptions{})
-       if err != nil {
-               klog.Errorf("node Cordon get err nodeName:%v clusterName:%v", 
nodeName, clusterName)
-               return err
-       }
-       annotations := node.Annotations
-       if annotations == nil {
-               annotations = map[string]string{}
-       }
-       annotations["dubbo.apache.org/disable-by"] = "horus"
-
-       node.Spec.Unschedulable = true
-       if node.Spec.Unschedulable {
-               klog.Infof("Node %v is already cordoned.", nodeName)
-               return nil
-       }
-       ctxSecond, cancelSecond := h.GetK8sContext()
-       defer cancelSecond()
-       node, err = kubeClient.CoreV1().Nodes().Update(ctxSecond, node, 
v1.UpdateOptions{})
-       if err != nil {
-               klog.Errorf("node Cordon update err nodeName:%v 
clusterName:%v", nodeName, clusterName)
-       } else {
-               klog.Infof("node Cordon success nodeName:%v clusterName:%v", 
nodeName, clusterName)
-       }
-       return err
-}
-
-func (h *Horuser) UnCordon(nodeName, clusterName string) (err error) {
-       kubeClient := h.kubeClientMap[clusterName]
-       if kubeClient == nil {
-               klog.Errorf("node UnCordon kubeClient by clusterName empty.")
-               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
-               return err
-       }
-
-       ctxFirst, cancelFirst := h.GetK8sContext()
-       defer cancelFirst()
-       node, err := kubeClient.CoreV1().Nodes().Get(ctxFirst, nodeName, 
v1.GetOptions{})
-       if err != nil {
-               klog.Errorf("node UnCordon get err nodeName:%v clusterName:%v", 
nodeName, clusterName)
-               return err
-       }
-
-       node.Spec.Unschedulable = false
-       if !node.Spec.Unschedulable {
-               klog.Infof("Node %v is already uncordoned.", nodeName)
-               return nil
-       }
-
-       ctxSecond, cancelSecond := h.GetK8sContext()
-       defer cancelSecond()
-       node, err = kubeClient.CoreV1().Nodes().Update(ctxSecond, node, 
v1.UpdateOptions{})
-       if err != nil {
-               klog.Errorf("node UnCordon update err nodeName:%v 
clusterName:%v", nodeName, clusterName)
-               return err
-       }
-       klog.Infof("node UnCordon success nodeName:%v clusterName:%v", 
nodeName, clusterName)
-       return nil
-}
-
-func (h *Horuser) Drain(nodeName, clusterName string) (err error) {
-       kubeClient := h.kubeClientMap[clusterName]
-       if kubeClient == nil {
-               klog.Errorf("node Drain kubeClient by clusterName empty.")
-               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
-               return err
-       }
-
-       ctxFirst, cancelFirst := h.GetK8sContext()
-       defer cancelFirst()
-       listOpts := v1.ListOptions{FieldSelector: fmt.Sprintf("nodeName=%s", 
nodeName)}
-       var podNamespace string
-       pod, err := kubeClient.CoreV1().Pods(podNamespace).List(ctxFirst, 
listOpts)
-       if err != nil {
-               klog.Errorf("node Drain err:%v nodeName:%v clusterName:%v", 
err, nodeName, clusterName)
-               return err
-       }
-       if len(pod.Items) == 0 {
-               klog.Errorf("Cannot find pod on node.")
-               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
-       }
-       count := len(pod.Items)
-       for items, pods := range pod.Items {
-               ds := false
-               for _, owner := range pods.OwnerReferences {
-                       if owner.Kind == "DaemonSet" {
-                               ds = true
-                               break
-                       }
-               }
-               klog.Errorf("node Drain evict pod result items:%d count:%v 
nodeName:%v clusterName:%v podName:%v podNamespace:%v", items+1, count, 
nodeName, clusterName, pods.Name, pods.Namespace)
-               if ds {
-                       continue
-               }
-               err := h.Evict(pods.Name, pods.Namespace, clusterName)
-               if err != nil {
-                       klog.Errorf("node Drain evict pod err:%v items:%d 
count:%v nodeName:%v clusterName:%v podName:%v podNamespace:%v", err, items+1, 
count, nodeName, clusterName, pods.Name, pods.Namespace)
-                       return err
-               }
-       }
-       return nil
-}
-
-func (h *Horuser) Evict(podName, podNamespace, clusterName string) (err error) 
{
-       kubeClient := h.kubeClientMap[clusterName]
-       if kubeClient == nil {
-               klog.Errorf("pod Evict kubeClient by clusterName empty.")
-               klog.Infof("podName:%v podNamespace:%v clusterName:%v", 
podName, podNamespace, clusterName)
-               return err
-       }
-
-       ctxFirst, cancelFirst := h.GetK8sContext()
-       defer cancelFirst()
-       _, err = kubeClient.CoreV1().Pods(podNamespace).Get(ctxFirst, podName, 
v1.GetOptions{})
-       if err != nil {
-               klog.Errorf("pod Evict get err clusterName:%v podName:%v 
podNamespace:%v", clusterName, podName, podNamespace)
-               return err
-       }
-       ctxSecond, cancelSecond := h.GetK8sContext()
-       defer cancelSecond()
-       var gracePeriodSeconds int64 = -1
-       propagationPolicy := v1.DeletePropagationBackground
-       err = kubeClient.CoreV1().Pods(podNamespace).Delete(ctxSecond, podName, 
v1.DeleteOptions{
-               GracePeriodSeconds: &gracePeriodSeconds,
-               PropagationPolicy:  &propagationPolicy,
-       })
-       if err != nil {
-               klog.Errorf("pod Evict delete err clusterName:%v podName:%v 
podNamespace:%v", clusterName, podName, podNamespace)
-               return err
-       }
-       klog.Infof("pod Evict delete success clusterName:%v podName:%v 
podNamespace:%v", clusterName, podName, podNamespace)
-       return nil
-}
diff --git a/app/horus/core/horuser/node_cordon.go 
b/app/horus/core/horuser/node_cordon.go
new file mode 100644
index 00000000..1f398c91
--- /dev/null
+++ b/app/horus/core/horuser/node_cordon.go
@@ -0,0 +1,58 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package horuser
+
+import (
+       v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/klog/v2"
+)
+
+func (h *Horuser) Cordon(nodeName, clusterName, moduleName string) (err error) 
{
+       kubeClient := h.kubeClientMap[clusterName]
+       if kubeClient == nil {
+               klog.Errorf("node Cordon kubeClient by clusterName empty.")
+               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
+               return err
+       }
+
+       ctxFirst, cancelFirst := h.GetK8sContext()
+       defer cancelFirst()
+       node, err := kubeClient.CoreV1().Nodes().Get(ctxFirst, nodeName, 
v1.GetOptions{})
+       if err != nil {
+               klog.Errorf("node Cordon get err nodeName:%v clusterName:%v", 
nodeName, clusterName)
+               return err
+       }
+       annotations := node.Annotations
+       if annotations == nil {
+               annotations = map[string]string{}
+       }
+       annotations["dubbo.apache.org/disable-by"] = "horus"
+
+       node.Spec.Unschedulable = true
+       if node.Spec.Unschedulable {
+               klog.Infof("Node %v is already cordoned.", nodeName)
+               return nil
+       }
+       ctxSecond, cancelSecond := h.GetK8sContext()
+       defer cancelSecond()
+       node, err = kubeClient.CoreV1().Nodes().Update(ctxSecond, node, 
v1.UpdateOptions{})
+       if err != nil {
+               klog.Errorf("node Cordon update err nodeName:%v 
clusterName:%v", nodeName, clusterName)
+       } else {
+               klog.Infof("node Cordon success nodeName:%v clusterName:%v", 
nodeName, clusterName)
+       }
+       return err
+}
diff --git a/app/horus/core/horuser/downtime.go 
b/app/horus/core/horuser/node_downtime.go
similarity index 100%
rename from app/horus/core/horuser/downtime.go
rename to app/horus/core/horuser/node_downtime.go
diff --git a/app/horus/core/horuser/node_drain.go 
b/app/horus/core/horuser/node_drain.go
new file mode 100644
index 00000000..f7fe8726
--- /dev/null
+++ b/app/horus/core/horuser/node_drain.go
@@ -0,0 +1,65 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package horuser
+
+import (
+       "fmt"
+       v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/klog/v2"
+)
+
+func (h *Horuser) Drain(nodeName, clusterName string) (err error) {
+       kubeClient := h.kubeClientMap[clusterName]
+       if kubeClient == nil {
+               klog.Errorf("node Drain kubeClient by clusterName empty.")
+               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
+               return err
+       }
+
+       ctxFirst, cancelFirst := h.GetK8sContext()
+       defer cancelFirst()
+       listOpts := v1.ListOptions{FieldSelector: fmt.Sprintf("nodeName=%s", 
nodeName)}
+       var podNamespace string
+       pod, err := kubeClient.CoreV1().Pods(podNamespace).List(ctxFirst, 
listOpts)
+       if err != nil {
+               klog.Errorf("node Drain err:%v nodeName:%v clusterName:%v", 
err, nodeName, clusterName)
+               return err
+       }
+       if len(pod.Items) == 0 {
+               klog.Errorf("Cannot find pod on node.")
+               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
+       }
+       count := len(pod.Items)
+       for items, pods := range pod.Items {
+               ds := false
+               for _, owner := range pods.OwnerReferences {
+                       if owner.Kind == "DaemonSet" {
+                               ds = true
+                               break
+                       }
+               }
+               klog.Errorf("node Drain evict pod result items:%d count:%v 
nodeName:%v clusterName:%v podName:%v podNamespace:%v", items+1, count, 
nodeName, clusterName, pods.Name, pods.Namespace)
+               if ds {
+                       continue
+               }
+               err := h.Evict(pods.Name, pods.Namespace, clusterName)
+               if err != nil {
+                       klog.Errorf("node Drain evict pod err:%v items:%d 
count:%v nodeName:%v clusterName:%v podName:%v podNamespace:%v", err, items+1, 
count, nodeName, clusterName, pods.Name, pods.Namespace)
+                       return err
+               }
+       }
+       return nil
+}
diff --git a/app/horus/core/horuser/modular.go 
b/app/horus/core/horuser/node_modular.go
similarity index 100%
rename from app/horus/core/horuser/modular.go
rename to app/horus/core/horuser/node_modular.go
diff --git a/app/horus/core/horuser/recovery.go 
b/app/horus/core/horuser/node_recovery.go
similarity index 100%
rename from app/horus/core/horuser/recovery.go
rename to app/horus/core/horuser/node_recovery.go
diff --git a/app/horus/core/horuser/restart.go 
b/app/horus/core/horuser/node_restart.go
similarity index 100%
rename from app/horus/core/horuser/restart.go
rename to app/horus/core/horuser/node_restart.go
diff --git a/app/horus/core/horuser/node_uncordon.go 
b/app/horus/core/horuser/node_uncordon.go
new file mode 100644
index 00000000..257eef6f
--- /dev/null
+++ b/app/horus/core/horuser/node_uncordon.go
@@ -0,0 +1,54 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package horuser
+
+import (
+       v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/klog/v2"
+)
+
+func (h *Horuser) UnCordon(nodeName, clusterName string) (err error) {
+       kubeClient := h.kubeClientMap[clusterName]
+       if kubeClient == nil {
+               klog.Errorf("node UnCordon kubeClient by clusterName empty.")
+               klog.Infof("nodeName:%v,clusterName:%v", nodeName, clusterName)
+               return err
+       }
+
+       ctxFirst, cancelFirst := h.GetK8sContext()
+       defer cancelFirst()
+       node, err := kubeClient.CoreV1().Nodes().Get(ctxFirst, nodeName, 
v1.GetOptions{})
+       if err != nil {
+               klog.Errorf("node UnCordon get err nodeName:%v clusterName:%v", 
nodeName, clusterName)
+               return err
+       }
+
+       node.Spec.Unschedulable = false
+       if !node.Spec.Unschedulable {
+               klog.Infof("Node %v is already uncordoned.", nodeName)
+               return nil
+       }
+
+       ctxSecond, cancelSecond := h.GetK8sContext()
+       defer cancelSecond()
+       node, err = kubeClient.CoreV1().Nodes().Update(ctxSecond, node, 
v1.UpdateOptions{})
+       if err != nil {
+               klog.Errorf("node UnCordon update err nodeName:%v 
clusterName:%v", nodeName, clusterName)
+               return err
+       }
+       klog.Infof("node UnCordon success nodeName:%v clusterName:%v", 
nodeName, clusterName)
+       return nil
+}
diff --git a/app/horus/core/horuser/pod_evict.go 
b/app/horus/core/horuser/pod_evict.go
new file mode 100644
index 00000000..8c0abb23
--- /dev/null
+++ b/app/horus/core/horuser/pod_evict.go
@@ -0,0 +1,52 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package horuser
+
+import (
+       v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/klog/v2"
+)
+
+func (h *Horuser) Evict(podName, podNamespace, clusterName string) (err error) 
{
+       kubeClient := h.kubeClientMap[clusterName]
+       if kubeClient == nil {
+               klog.Errorf("pod Evict kubeClient by clusterName empty.")
+               klog.Infof("podName:%v podNamespace:%v clusterName:%v", 
podName, podNamespace, clusterName)
+               return err
+       }
+
+       ctxFirst, cancelFirst := h.GetK8sContext()
+       defer cancelFirst()
+       _, err = kubeClient.CoreV1().Pods(podNamespace).Get(ctxFirst, podName, 
v1.GetOptions{})
+       if err != nil {
+               klog.Errorf("pod Evict get err clusterName:%v podName:%v 
podNamespace:%v", clusterName, podName, podNamespace)
+               return err
+       }
+       ctxSecond, cancelSecond := h.GetK8sContext()
+       defer cancelSecond()
+       var gracePeriodSeconds int64 = -1
+       propagationPolicy := v1.DeletePropagationBackground
+       err = kubeClient.CoreV1().Pods(podNamespace).Delete(ctxSecond, podName, 
v1.DeleteOptions{
+               GracePeriodSeconds: &gracePeriodSeconds,
+               PropagationPolicy:  &propagationPolicy,
+       })
+       if err != nil {
+               klog.Errorf("pod Evict delete err clusterName:%v podName:%v 
podNamespace:%v", clusterName, podName, podNamespace)
+               return err
+       }
+       klog.Infof("pod Evict delete success clusterName:%v podName:%v 
podNamespace:%v", clusterName, podName, podNamespace)
+       return nil
+}
diff --git a/app/horus/core/horuser/pod_remove.go 
b/app/horus/core/horuser/pod_remove.go
new file mode 100644
index 00000000..9d2ea881
--- /dev/null
+++ b/app/horus/core/horuser/pod_remove.go
@@ -0,0 +1,48 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package horuser
+
+import (
+       "encoding/json"
+       v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/apimachinery/pkg/types"
+       "k8s.io/klog/v2"
+)
+
+type SampleValue struct {
+       Operation string `json:"operation"`
+       Path      string `json:"path"`
+}
+
+func (h *Horuser) Finalizer(clusterName, podName, podNamespace string) error {
+       kubeClient := h.kubeClientMap[clusterName]
+       if kubeClient == nil {
+               klog.Errorf("Finalizer kubeClient by clusterName empty.")
+               klog.Infof("clusterName:%v podName:%v", clusterName, podName)
+               return nil
+       }
+       finalizer := SampleValue{
+               Operation: "remove",
+               Path:      "/metadata/finalizers",
+       }
+       var payload []interface{}
+       payload = append(payload, finalizer)
+       data, _ := json.Marshal(payload)
+       ctx, cancel := h.GetK8sContext()
+       defer cancel()
+       _, err := kubeClient.CoreV1().Pods(podNamespace).Patch(ctx, podName, 
types.JSONPatchType, data, v1.PatchOptions{})
+       return err
+}
diff --git a/app/horus/core/horuser/prome.go b/app/horus/core/horuser/query.go
similarity index 100%
rename from app/horus/core/horuser/prome.go
rename to app/horus/core/horuser/query.go

Reply via email to