Ditch rc-service control-agent, use daemonset insteaad

This commit is contained in:
2026-04-01 00:00:06 +08:00
parent d8275622e6
commit b6c110410f
6 changed files with 57 additions and 75 deletions

View File

@@ -39,7 +39,6 @@ func NewRegistry(ctx *node.NodeContext) *Registry {
"RunKubeadmUpgradeApply": node.RunKubeadmUpgradeApply,
"RunKubeadmUpgradeNode": node.RunKubeadmUpgradeNode,
"StartCRIO": node.StartCRIO,
"StartControlAgent": node.StartControlAgent,
"ValidateNodeIPAndAPIServerReachability": node.ValidateNodeIPAndAPIServerReachability,
"ValidateRequiredImagesPresent": node.ValidateRequiredImagesPresent,
"WaitForExistingClusterIfNeeded": node.WaitForExistingClusterIfNeeded,

View File

@@ -132,11 +132,6 @@ func NewRunner(cfg *monov1alpha1.MonoKSConfig) *Runner {
Name: "Apply node metadata",
Desc: "Apply labels/annotations to the local node if API server is reachable",
},
{
RegKey: "StartControlAgent",
Name: "Starts the Control Agent",
Desc: "Handles OSUpgrade resources polling",
},
},
}
}

View File

@@ -3,14 +3,15 @@ package kube
import (
"fmt"
monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
apiextensionsclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/dynamic"
kubernetes "k8s.io/client-go/kubernetes"
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/dynamic"
"k8s.io/client-go/rest"
)
@@ -42,6 +43,12 @@ func NewClients(flags *genericclioptions.ConfigFlags) (*Clients, error) {
return &Clients{Config: cfg, Kubernetes: kubeClient, Dynamic: dyn, APIExtensions: ext, RESTClientGetter: flags}, nil
}
func NewClientsFromKubeconfig(kubeconfigPath string) (*Clients, error) {
flags := genericclioptions.NewConfigFlags(false)
flags.KubeConfig = &kubeconfigPath
return NewClients(flags)
}
func Scheme() *runtime.Scheme {
scheme := runtime.NewScheme()
utilruntime.Must(clientgoscheme.AddToScheme(scheme))

View File

@@ -2,17 +2,56 @@ package node
import (
"context"
"fmt"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/klog/v2"
system "undecided.project/monok8s/pkg/system"
"undecided.project/monok8s/pkg/crds"
"undecided.project/monok8s/pkg/kube"
)
// Cluster is fine without uboot commands, just no OSUpgrade agent
func StartControlAgent(ctx context.Context, n *NodeContext) error {
err := ConfigureUBootCommands(ctx, n)
if err == nil {
return system.EnsureServiceRunning(ctx, n.SystemRunner, "control-agent")
func ApplyCRDs(ctx context.Context, n *NodeContext) error {
if n.Config.Spec.ClusterRole != "control-plane" {
return nil
}
klog.Warningf("not starting agent due to uboot: %v", err)
const kubeconfig = "/etc/kubernetes/admin.conf"
clients, err := kube.NewClientsFromKubeconfig(kubeconfig)
if err != nil {
return fmt.Errorf("build kube clients from %s: %w", kubeconfig, err)
}
crdClient := clients.APIExtensions.ApiextensionsV1().CustomResourceDefinitions()
for _, wanted := range crds.Definitions() {
_, err := crdClient.Create(ctx, wanted, metav1.CreateOptions{})
if err == nil {
klog.InfoS("crd created", "name", wanted.Name)
continue
}
if !apierrors.IsAlreadyExists(err) {
return fmt.Errorf("create CRD %s: %w", wanted.Name, err)
}
current, getErr := crdClient.Get(ctx, wanted.Name, metav1.GetOptions{})
if getErr != nil {
return fmt.Errorf("get existing CRD %s: %w", wanted.Name, getErr)
}
updated := wanted.DeepCopy()
updated.ResourceVersion = current.ResourceVersion
_, err = crdClient.Update(ctx, updated, metav1.UpdateOptions{})
if err != nil {
return fmt.Errorf("update CRD %s: %w", wanted.Name, err)
}
klog.InfoS("crd updated", "name", wanted.Name)
}
return nil
}