commit b6c110410f169baf8e74fb0cd7c994b54afa0ec9c88b728d37da9ec529f17b14
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-03-31T16:00:06Z |
| subject | Ditch rc-service control-agent, use daemonset insteaad |
commit b6c110410f169baf8e74fb0cd7c994b54afa0ec9c88b728d37da9ec529f17b14
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-03-31T16:00:06Z
Ditch rc-service control-agent, use daemonset insteaad
---
alpine/configure-system.sh | 1 -
alpine/rootfs-extra/etc/init.d/control-agent | 57 ----------------------------
clitools/pkg/bootstrap/registry.go | 1 -
clitools/pkg/bootstrap/runner.go | 5 ---
clitools/pkg/kube/clients.go | 15 ++++++--
clitools/pkg/node/agent.go | 53 ++++++++++++++++++++++----
6 files changed, 57 insertions(+), 75 deletions(-)
diff --git a/alpine/configure-system.sh b/alpine/configure-system.sh
index eb5ab5d..b6edf64 100755
--- a/alpine/configure-system.sh
+++ b/alpine/configure-system.sh
@@ -12,4 +12,3 @@ rc-update add loopback boot
rc-update add hostname boot
rc-update add localmount boot
rc-update add local default
-# rc-update add ctl-agent default
diff --git a/alpine/rootfs-extra/etc/init.d/control-agent b/alpine/rootfs-extra/etc/init.d/control-agent
deleted file mode 100755
index 1dc276b..0000000
--- a/alpine/rootfs-extra/etc/init.d/control-agent
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/sbin/openrc-run
-
-export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
-
-name="monok8s-control-agent"
-description="System Control Agent (OSUpgrade controller)"
-
-supervisor=supervise-daemon
-
-command="/usr/local/bin/ctl"
-command_args="agent --env-file /opt/monok8s/config/cluster.env"
-
-command_user="root:root"
-
-pidfile="/run/${RC_SVCNAME}.pid"
-
-output_log="/var/log/monok8s/agent.log"
-error_log="/var/log/monok8s/agent.log"
-
-retry="TERM/10/KILL/5"
-
-depend() {
- need localmount
- after net
-}
-
-start_pre() {
- checkpath --directory /run
- checkpath --directory /var/log/monok8s
-
- if [ ! -f /opt/monok8s/config/cluster.env ]; then
- eerror "Missing env file: /opt/monok8s/config/cluster.env"
- return 1
- fi
-}
-
-start() {
- ebegin "Starting monok8s control agent"
- supervise-daemon "$RC_SVCNAME" \
- --start \
- --pidfile "$pidfile" \
- --stdout "$output_log" \
- --stderr "$error_log" \
- --respawn-delay 5 \
- --respawn-max 0 \
- -- \
- $command $command_args
- eend $?
-}
-
-stop() {
- ebegin "Stopping monok8s control agent"
- supervise-daemon "$RC_SVCNAME" \
- --stop \
- --pidfile "$pidfile"
- eend $?
-}
diff --git a/clitools/pkg/bootstrap/registry.go b/clitools/pkg/bootstrap/registry.go
index 157f7c1..9a64cbe 100644
--- a/clitools/pkg/bootstrap/registry.go
+++ b/clitools/pkg/bootstrap/registry.go
@@ -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,
diff --git a/clitools/pkg/bootstrap/runner.go b/clitools/pkg/bootstrap/runner.go
index 56b0f37..4d4606f 100644
--- a/clitools/pkg/bootstrap/runner.go
+++ b/clitools/pkg/bootstrap/runner.go
@@ -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",
- },
},
}
}
diff --git a/clitools/pkg/kube/clients.go b/clitools/pkg/kube/clients.go
index e75dd04..188acb7 100644
--- a/clitools/pkg/kube/clients.go
+++ b/clitools/pkg/kube/clients.go
@@ -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))
diff --git a/clitools/pkg/node/agent.go b/clitools/pkg/node/agent.go
index 4b3aef5..b2db5a9 100644
--- a/clitools/pkg/node/agent.go
+++ b/clitools/pkg/node/agent.go
@@ -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
+ }
+
+ 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)
}
- klog.Warningf("not starting agent due to uboot: %v", 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
}