commit bdbc29649c689c956d036d8667627255d5c8f7131493affdc8e529c1f439bf18
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-03-30T13:50:04Z |
| subject | Some basic agent startup |
commit bdbc29649c689c956d036d8667627255d5c8f7131493affdc8e529c1f439bf18
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-03-30T13:50:04Z
Some basic agent startup
---
alpine/configure-system.sh | 3 +-
alpine/rootfs-extra/etc/init.d/bootstrap-cluster | 25 ----------
alpine/rootfs-extra/etc/init.d/control-agent | 58 ++++++++++++++++++++++++
alpine/rootfs-extra/etc/local.d/monok8s.start | 4 ++
clitools/pkg/bootstrap/registry.go | 9 +---
clitools/pkg/bootstrap/runner.go | 7 +++
clitools/pkg/cmd/agent/agent.go | 6 +--
clitools/pkg/cmd/initcmd/init.go | 3 +-
clitools/pkg/node/agent.go | 11 +++++
clitools/pkg/node/kubeadm.go | 2 +-
configs/cluster.env.default | 18 ++++----
11 files changed, 98 insertions(+), 48 deletions(-)
diff --git a/alpine/configure-system.sh b/alpine/configure-system.sh
index 77c1354..eb5ab5d 100755
--- a/alpine/configure-system.sh
+++ b/alpine/configure-system.sh
@@ -11,4 +11,5 @@ rc-update add fancontrol boot
rc-update add loopback boot
rc-update add hostname boot
rc-update add localmount boot
-rc-update add bootstrap-cluster default
+rc-update add local default
+# rc-update add ctl-agent default
diff --git a/alpine/rootfs-extra/etc/init.d/bootstrap-cluster b/alpine/rootfs-extra/etc/init.d/bootstrap-cluster
deleted file mode 100755
index e010305..0000000
--- a/alpine/rootfs-extra/etc/init.d/bootstrap-cluster
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/sbin/openrc-run
-
-export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
-
-name="Bootstrap the Cluster"
-description="Runs the ctl init bootstrap sequence"
-
-command="/usr/local/bin/ctl"
-command_args="init --env-file /opt/monok8s/config/cluster.env"
-
-LOG_DIR="/var/log/monok8s"
-LOG_FILE="$LOG_DIR/bootstrap-cluster.log"
-
-depend() {
- need localmount
-}
-
-start() {
- checkpath --directory "$LOG_DIR"
- ebegin "Starting the bootstrap sequence"
- start-stop-daemon --start \
- --exec "$command" \
- -- $command_args >>"$LOG_FILE" 2>&1
- eend $?
-}
diff --git a/alpine/rootfs-extra/etc/init.d/control-agent b/alpine/rootfs-extra/etc/init.d/control-agent
new file mode 100755
index 0000000..2f10193
--- /dev/null
+++ b/alpine/rootfs-extra/etc/init.d/control-agent
@@ -0,0 +1,58 @@
+#!/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 \
+ --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/alpine/rootfs-extra/etc/local.d/monok8s.start b/alpine/rootfs-extra/etc/local.d/monok8s.start
new file mode 100755
index 0000000..4f44f2b
--- /dev/null
+++ b/alpine/rootfs-extra/etc/local.d/monok8s.start
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
+/usr/local/bin/ctl init --env-file /opt/monok8s/config/cluster.env >>/var/log/monok8s/bootstrap.log 2>&1 &
diff --git a/clitools/pkg/bootstrap/registry.go b/clitools/pkg/bootstrap/registry.go
index 6f948d0..f0947d3 100644
--- a/clitools/pkg/bootstrap/registry.go
+++ b/clitools/pkg/bootstrap/registry.go
@@ -38,6 +38,7 @@ 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,
@@ -45,14 +46,6 @@ func NewRegistry(ctx *node.NodeContext) *Registry {
}
}
-func (r *Registry) MustGet(name string) node.Step {
- step, ok := r.steps[name]
- if !ok {
- panic(fmt.Sprintf("unknown step %q", name))
- }
- return step
-}
-
func (r *Registry) Get(name string) (node.Step, error) {
step, ok := r.steps[name]
if !ok {
diff --git a/clitools/pkg/bootstrap/runner.go b/clitools/pkg/bootstrap/runner.go
index 0fde459..56b0f37 100644
--- a/clitools/pkg/bootstrap/runner.go
+++ b/clitools/pkg/bootstrap/runner.go
@@ -4,6 +4,7 @@ import (
"context"
"fmt"
+ "k8s.io/klog/v2"
monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
"undecided.project/monok8s/pkg/node"
"undecided.project/monok8s/pkg/system"
@@ -131,6 +132,11 @@ 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",
+ },
},
}
}
@@ -153,6 +159,7 @@ func (r *Runner) Init(ctx context.Context) error {
return fmt.Errorf("step %d (%s): %w", i+1, step.Name, err)
}
}
+ klog.Info("All steps completed successfully")
return nil
}
diff --git a/clitools/pkg/cmd/agent/agent.go b/clitools/pkg/cmd/agent/agent.go
index 832dc9c..b79f91c 100644
--- a/clitools/pkg/cmd/agent/agent.go
+++ b/clitools/pkg/cmd/agent/agent.go
@@ -5,19 +5,19 @@ import (
"fmt"
"time"
- monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
- "undecided.project/monok8s/pkg/kube"
"github.com/spf13/cobra"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/klog/v2"
+ monov1alpha1 "undecided.project/monok8s/pkg/apis/monok8s/v1alpha1"
+ "undecided.project/monok8s/pkg/kube"
)
func NewCmdAgent(flags *genericclioptions.ConfigFlags) *cobra.Command {
var namespace string
cmd := &cobra.Command{
- Use: "agent",
+ Use: "agent --env-file path",
Short: "Watch OSUpgrade resources and do nothing for now",
RunE: func(cmd *cobra.Command, _ []string) error {
clients, err := kube.NewClients(flags)
diff --git a/clitools/pkg/cmd/initcmd/init.go b/clitools/pkg/cmd/initcmd/init.go
index 60d9ea2..03fdaf6 100644
--- a/clitools/pkg/cmd/initcmd/init.go
+++ b/clitools/pkg/cmd/initcmd/init.go
@@ -81,6 +81,7 @@ Supported formats:
rendered := templates.DefaultMonoKSConfig(vals)
cfg = &rendered
+ klog.InfoS("starting init", "node", cfg.Spec.NodeName, "envFile", envFile)
default:
path, err := (config.Loader{}).ResolvePath(configPath)
if err != nil {
@@ -92,7 +93,7 @@ Supported formats:
return err
}
cfg = loaded
- klog.InfoS("starting init", "config", path, "node", cfg.Spec.NodeName, "envFile", envFile)
+ klog.InfoS("starting init", "node", cfg.Spec.NodeName, "config", path)
}
runner := bootstrap.NewRunner(cfg)
diff --git a/clitools/pkg/node/agent.go b/clitools/pkg/node/agent.go
new file mode 100644
index 0000000..314b4e3
--- /dev/null
+++ b/clitools/pkg/node/agent.go
@@ -0,0 +1,11 @@
+package node
+
+import (
+ "context"
+
+ system "undecided.project/monok8s/pkg/system"
+)
+
+func StartControlAgent(ctx context.Context, n *NodeContext) error {
+ return system.EnsureServiceRunning(ctx, n.SystemRunner, "control-agent")
+}
diff --git a/clitools/pkg/node/kubeadm.go b/clitools/pkg/node/kubeadm.go
index adc9b86..c1440aa 100644
--- a/clitools/pkg/node/kubeadm.go
+++ b/clitools/pkg/node/kubeadm.go
@@ -429,7 +429,7 @@ func ValidateRequiredImagesPresent(ctx context.Context, n *NodeContext) error {
missing = append(missing, img)
continue
}
- klog.Infof("found image: %s", img)
+ klog.V(4).Infof("found image: %s", img)
}
if len(missing) > 0 {
diff --git a/configs/cluster.env.default b/configs/cluster.env.default
index 188c00a..5cb2009 100644
--- a/configs/cluster.env.default
+++ b/configs/cluster.env.default
@@ -5,7 +5,7 @@ MKS_NODE_NAME=monok8s-master
# RJ45 Ports from left to right (interface name inside the OS)
# - eth1, eth2, eth0
MKS_MGMT_IFACE=eth1
-MKS_MGMT_ADDRESS=10.0.0.14/24
+MKS_MGMT_ADDRESS=10.0.0.10/24
MKS_MGMT_GATEWAY=10.0.0.1
# Space-separated real upstream DNS servers.
@@ -16,8 +16,9 @@ MKS_DNS_NAMESERVERS="10.0.0.1 1.1.1.1 1.0.0.1"
MKS_DNS_SEARCH_DOMAINS="lan"
## k8s config
-MKS_KUBERNETES_VERSION=v1.35.3
-MKS_APISERVER_ADVERTISE_ADDRESS=10.0.0.14
+# Do not set this yourself, this auto follows the build version
+# DEV_ONLY MKS_KUBERNETES_VERSION=v1.35.1
+MKS_APISERVER_ADVERTISE_ADDRESS=10.0.0.10
# Optional but strongly recommended
MKS_CLUSTER_NAME=monok8s
@@ -25,11 +26,10 @@ MKS_POD_SUBNET=10.244.0.0/16
MKS_SERVICE_SUBNET=10.96.0.0/12
MKS_CLUSTER_DOMAIN=cluster.local
-# Bootstrap mode: init, join
-MKS_BOOTSTRAP_MODE=init
+# control-plane, worker
+MKS_CLUSTER_ROLE=control-plane
+MKS_INIT_CONTROL_PLANE=yes
-# For join mode: worker, control-plane
-MKS_JOIN_KIND=worker
MKS_API_SERVER_ENDPOINT=
MKS_BOOTSTRAP_TOKEN=
MKS_DISCOVERY_TOKEN_CA_CERT_HASH=
@@ -46,7 +46,7 @@ MKS_NODE_ANNOTATIONS=mono.si/board=ls1046a,mono.si/image-version=dev
# Optional
# Extra API server SANs, comma-separated
-MKS_SANS=127.0.0.1,localhost,monok8s-master,10.0.0.14
+MKS_SANS=127.0.0.1,localhost,monok8s-master,10.0.0.10
# CRI-O socket
MKS_CONTAINER_RUNTIME_ENDPOINT=unix:///var/run/crio/crio.sock
@@ -55,4 +55,4 @@ MKS_CONTAINER_RUNTIME_ENDPOINT=unix:///var/run/crio/crio.sock
MKS_ALLOW_SCHEDULING_ON_CONTROL_PLANE=true
# Emergency override only
-MKS_SKIP_IMAGE_CHECK=no
\ No newline at end of file
+MKS_SKIP_IMAGE_CHECK=no