Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Match labels #133

Merged
merged 12 commits into from
Aug 3, 2023
9 changes: 6 additions & 3 deletions controllers/selfnoderemediation_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,8 +543,9 @@ func verifyNodeIsUnschedulable() *v1.Node {
func verifySelfNodeRemediationPodExist() {
podList := &v1.PodList{}
selector := labels.NewSelector()
requirement, _ := labels.NewRequirement("app", selection.Equals, []string{"self-node-remediation-agent"})
selector = selector.Add(*requirement)
nameRequirement, _ := labels.NewRequirement("app.kubernetes.io/name", selection.Equals, []string{"self-node-remediation"})
componentRequirement, _ := labels.NewRequirement("app.kubernetes.io/component", selection.Equals, []string{"agent"})
selector = selector.Add(*nameRequirement, *componentRequirement)

EventuallyWithOffset(1, func() (int, error) {
err := k8sClient.Client.List(context.Background(), podList, &client.ListOptions{LabelSelector: selector})
Expand All @@ -567,7 +568,9 @@ func createSNR(strategy v1alpha1.RemediationStrategyType) {
func createSelfNodeRemediationPod() {
pod := &v1.Pod{}
pod.Spec.NodeName = unhealthyNodeName
pod.Labels = map[string]string{"app": "self-node-remediation-agent"}
pod.Labels = map[string]string{"app.kubernetes.io/name": "self-node-remediation",
"app.kubernetes.io/component": "agent"}

pod.Name = "self-node-remediation"
pod.Namespace = namespace
container := v1.Container{
Expand Down
7 changes: 4 additions & 3 deletions install/self-node-remediation-deamonset.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,14 @@ metadata:
spec:
selector:
matchLabels:
control-plane: controller-manager
app.kubernetes.io/name: self-node-remediation
app.kubernetes.io/component: agent
template:
metadata:
creationTimestamp: null
labels:
control-plane: controller-manager
app: self-node-remediation-agent
app.kubernetes.io/name: self-node-remediation
app.kubernetes.io/component: agent
spec:
volumes:
- name: devices
Expand Down
8 changes: 8 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import (
"github.com/medik8s/self-node-remediation/pkg/reboot"
"github.com/medik8s/self-node-remediation/pkg/snrconfighelper"
"github.com/medik8s/self-node-remediation/pkg/template"
"github.com/medik8s/self-node-remediation/pkg/updatehelper"
"github.com/medik8s/self-node-remediation/pkg/utils"
"github.com/medik8s/self-node-remediation/pkg/watchdog"
//+kubebuilder:scaffold:imports
Expand Down Expand Up @@ -182,6 +183,13 @@ func initSelfNodeRemediationManager(mgr manager.Manager) {
setupLog.Error(err, "failed to add template creator to the manager")
os.Exit(1)
}

updateInitializer := updatehelper.New(mgr.GetClient(), ctrl.Log.WithName("update initializer"))
if err = mgr.Add(updateInitializer); err != nil {
setupLog.Error(err, "failed to add update initializer to the manager")
os.Exit(1)
}

}

func getDurEnvVarOrDie(varName string) time.Duration {
Expand Down
56 changes: 56 additions & 0 deletions pkg/updatehelper/updatehelper.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package updatehelper

import (
"context"

"github.com/go-logr/logr"
"github.com/pkg/errors"

appsv1 "k8s.io/api/apps/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/types"
"sigs.k8s.io/controller-runtime/pkg/client"

"github.com/medik8s/self-node-remediation/pkg/utils"
)

const dsName = "self-node-remediation-ds"

type UpdateInitializer struct {
client client.Client
log logr.Logger
}

func New(c client.Client, log logr.Logger) *UpdateInitializer {
return &UpdateInitializer{
client: c,
log: log,
}
}

func (ui *UpdateInitializer) Start(ctx context.Context) error {
ns, err := utils.GetDeploymentNamespace()
if err != nil {
return errors.Wrap(err, "unable to get the deployment namespace")
}
ds := &appsv1.DaemonSet{}
key := types.NamespacedName{
Namespace: ns,
Name: dsName,
}
if err := ui.client.Get(ctx, key, ds); err == nil {
if err = ui.client.Delete(ctx, ds); err != nil {
ui.log.Error(err, "snr update failed could not delete old damenoset")
mshitrit marked this conversation as resolved.
Show resolved Hide resolved
return errors.Wrap(err, "unable to delete old daemon set")
}
ui.log.Info("snr update old daemonset deleted")
return nil

} else if !apierrors.IsNotFound(err) {
ui.log.Error(err, "snr install/update failed error when trying to fetch old damenoset")
return errors.Wrap(err, "unable to fetch daemon set")
}

ui.log.Info("snr didn't find old daemonset to be deleted")
return nil
}
5 changes: 3 additions & 2 deletions pkg/utils/pods.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,9 @@ func GetSelfNodeRemediationAgentPod(nodeName string, r client.Reader) (*v1.Pod,
podList := &v1.PodList{}

selector := labels.NewSelector()
requirement, _ := labels.NewRequirement("app", selection.Equals, []string{"self-node-remediation-agent"})
selector = selector.Add(*requirement)
nameRequirement, _ := labels.NewRequirement("app.kubernetes.io/name", selection.Equals, []string{"self-node-remediation"})
componentRequirement, _ := labels.NewRequirement("app.kubernetes.io/component", selection.Equals, []string{"agent"})
selector = selector.Add(*nameRequirement, *componentRequirement)

err := r.List(context.Background(), podList, &client.ListOptions{LabelSelector: selector})
if err != nil {
Expand Down