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