<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sidero Metal – Overview</title><link>/v0.6/overview/</link><description>Recent content in Overview on Sidero Metal</description><generator>Hugo -- gohugo.io</generator><atom:link href="/v0.6/overview/index.xml" rel="self" type="application/rss+xml"/><item><title>V0.6: Introduction</title><link>/v0.6/overview/introduction/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/introduction/</guid><description>
&lt;p>Sidero (&amp;ldquo;Iron&amp;rdquo; in Greek) is a project created by the &lt;a href="https://www.SideroLabs.com/">Sidero Labs&lt;/a> team.
Sidero Metal provides lightweight, composable tools that can be used to create bare-metal &lt;a href="https://www.talos.dev">Talos Linux&lt;/a> + Kubernetes clusters.
These tools are built around the Cluster API project.&lt;/p>
&lt;p>Because of the design of Cluster API, there is inherently a &amp;ldquo;chicken and egg&amp;rdquo; problem: you need an existing Kubernetes cluster in order to provision the management plane, that can then provision more clusters.
The initial management plane cluster that runs the Sidero Metal provider does not need to be based on Talos Linux - although it is recommended for security and stability reasons.
The &lt;a href="../../getting-started/">Getting Started&lt;/a> guide will walk you through installing Sidero Metal either on an existing cluster, or by quickly creating a docker based cluster used to bootstrap the process.&lt;/p>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>Sidero Metal is currently made up of two components:&lt;/p>
&lt;ul>
&lt;li>Metal Controller Manager: Provides custom resources and controllers for managing the lifecycle of metal machines, iPXE server, metadata service, and gRPC API service&lt;/li>
&lt;li>Cluster API Provider Sidero (CAPS): A Cluster API infrastructure provider that makes use of the pieces above to spin up Kubernetes clusters&lt;/li>
&lt;/ul>
&lt;p>Sidero Metal also needs these co-requisites in order to be useful:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/kubernetes-sigs/cluster-api">Cluster API&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/talos-systems/cluster-api-control-plane-provider-talos">Cluster API Control Plane Provider Talos&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/talos-systems/cluster-api-bootstrap-provider-talos">Cluster API Bootstrap Provider Talos&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>All components mentioned above can be installed using Cluster API&amp;rsquo;s &lt;code>clusterctl&lt;/code> tool.
See the &lt;a href="../../getting-started/">Getting Started&lt;/a> for more details.&lt;/p></description></item><item><title>V0.6: What's New</title><link>/v0.6/overview/whatsnew/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/whatsnew/</guid><description>
&lt;h2 id="new-api-version-for-metalsiderodev-resources">New API Version for &lt;code>metal.sidero.dev&lt;/code> Resources&lt;/h2>
&lt;p>Resources under &lt;code>metal.sidero.dev&lt;/code> (&lt;code>Server&lt;/code>, &lt;code>ServerClass&lt;/code>, &lt;code>Environment&lt;/code>) now have a new version &lt;code>v1alpha2&lt;/code>.
Old version &lt;code>v1alpha1&lt;/code> is still supported, but it is recommended to update templates to use the new resource version.&lt;/p>
&lt;h3 id="server-changes">&lt;code>Server&lt;/code> Changes&lt;/h3>
&lt;p>Hardware information was restructured and extended when compared with &lt;code>v1alpha1&lt;/code>:&lt;/p>
&lt;ul>
&lt;li>&lt;code>.spec.systemInformation&lt;/code> -&amp;gt; &lt;code>.spec.hardware.system&lt;/code>&lt;/li>
&lt;li>&lt;code>.spec.cpu&lt;/code> -&amp;gt; &lt;code>.spec.hardware.compute.processors[]&lt;/code>&lt;/li>
&lt;/ul>
&lt;h3 id="serverclass-changes">&lt;code>ServerClass&lt;/code> Changes&lt;/h3>
&lt;ul>
&lt;li>&lt;code>.spec.qualifiers.systemInformation&lt;/code> -&amp;gt; &lt;code>.spec.qualifiers.system&lt;/code>&lt;/li>
&lt;li>&lt;code>.spec.qualifiers.cpu&lt;/code> -&amp;gt; &lt;code>.spec.qualifiers.hardware.compute.processors[]&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="metadata-server">Metadata Server&lt;/h2>
&lt;p>Sidero Metadata Server no longer depends on the version of Talos machinery library it is built with.
Sidero should be able to process machine config for future versions of Talos.&lt;/p>
&lt;h2 id="sidero-agent">Sidero Agent&lt;/h2>
&lt;p>Sidero Agent now runs DHCP client in the userland, on the link which was used to PXE boot the machine.
This allows to run Sidero Agent on the machine with several autoconfigured network interfaces, when one of them is used for the management network.&lt;/p>
&lt;h2 id="dhcp-proxy">DHCP Proxy&lt;/h2>
&lt;p>Sidero Controller Manager now includes DHCP proxy which augments DHCP response with additional PXE boot options.
When enabled, DHCP server in the environment only handles IP allocation and network configuration, while DHCP proxy
provides PXE boot information automatically based on the architecture and boot method.&lt;/p></description></item><item><title>V0.6: Installation</title><link>/v0.6/overview/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/installation/</guid><description>
&lt;p>To install Sidero and the other Talos providers, simply issue:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>clusterctl init -b talos -c talos -i sidero
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Sidero supports several variables to configure the installation, these variables can be set either as environment
variables or as variables in the &lt;code>clusterctl&lt;/code> configuration:&lt;/p>
&lt;ul>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_HOST_NETWORK&lt;/code> (&lt;code>false&lt;/code>): run &lt;code>sidero-controller-manager&lt;/code> on host network&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_DEPLOYMENT_STRATEGY&lt;/code> (&lt;code>RollingUpdate&lt;/code>): strategy to use when updating &lt;code>sidero-controller-manager&lt;/code>, use &lt;code>Recreate&lt;/code> when using a single node and &lt;code>SIDERO_CONTROLLER_MANAGER_HOST_NETWORK&lt;/code> is &lt;code>true&lt;/code>&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_API_ENDPOINT&lt;/code> (empty): specifies the IP address controller manager API service can be reached on, defaults to the node IP (TCP)&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_API_PORT&lt;/code> (8081): specifies the port controller manager can be reached on&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_CONTAINER_API_PORT&lt;/code> (8081): specifies the controller manager internal container port&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_SIDEROLINK_ENDPOINT&lt;/code> (empty): specifies the IP address SideroLink Wireguard service can be reached on, defaults to the node IP (UDP)&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_SIDEROLINK_PORT&lt;/code> (51821): specifies the port SideroLink Wireguard service can be reached on&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_EXTRA_AGENT_KERNEL_ARGS&lt;/code> (empty): specifies additional Linux kernel arguments for the Sidero agent (for example, different console settings)&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_AUTO_ACCEPT_SERVERS&lt;/code> (&lt;code>false&lt;/code>): automatically accept discovered servers, by default &lt;code>.spec.accepted&lt;/code> should be changed to &lt;code>true&lt;/code> to accept the server&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_AUTO_BMC_SETUP&lt;/code> (&lt;code>true&lt;/code>): automatically attempt to configure the BMC with a &lt;code>sidero&lt;/code> user that will be used for all IPMI tasks.&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_INSECURE_WIPE&lt;/code> (&lt;code>true&lt;/code>): wipe only the first megabyte of each disk on the server, otherwise wipe the full disk&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_SERVER_REBOOT_TIMEOUT&lt;/code> (&lt;code>20m&lt;/code>): timeout for the server reboot (how long it might take for the server to be rebooted before Sidero retries an IPMI reboot operation)&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_IPMI_PXE_METHOD&lt;/code> (&lt;code>uefi&lt;/code>): IPMI boot from PXE method: &lt;code>uefi&lt;/code> for UEFI boot or &lt;code>bios&lt;/code> for BIOS boot&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_BOOT_FROM_DISK_METHOD&lt;/code> (&lt;code>ipxe-exit&lt;/code>): configures the way Sidero forces server to boot from disk when server hits iPXE server after initial install: &lt;code>ipxe-exit&lt;/code> returns iPXE script with &lt;code>exit&lt;/code> command, &lt;code>http-404&lt;/code> returns HTTP 404 Not Found error, &lt;code>ipxe-sanboot&lt;/code> uses iPXE &lt;code>sanboot&lt;/code> command to boot from the first hard disk (can be also configured on &lt;code>ServerClass&lt;/code>/&lt;code>Server&lt;/code> method)&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_DISABLE_DHCP_PROXY&lt;/code> (&lt;code>false&lt;/code>): disable DHCP Proxy service (enabled by default)&lt;/li>
&lt;li>&lt;code>SIDERO_CONTROLLER_MANAGER_EVENTS_NEGATIVE_ADDRESS_FILTER&lt;/code> (empty): negative filter for reported machine addresses (e.g. &lt;code>10.0.0.0/8&lt;/code> won&amp;rsquo;t publish any &lt;code>10.x&lt;/code> addresses to the &lt;code>MetalMachine&lt;/code> status)&lt;/li>
&lt;/ul>
&lt;p>Sidero provides four endpoints which should be made available to the infrastructure:&lt;/p>
&lt;ul>
&lt;li>UDP port 67 for the proxy DHCP service (providing PXE boot information to the nodes, but no IPAM)&lt;/li>
&lt;li>TCP port 8081 which provides combined iPXE, metadata and gRPC service (external endpoint should be specified as &lt;code>SIDERO_CONTROLLER_MANAGER_API_ENDPOINT&lt;/code> and &lt;code>SIDERO_CONTROLLER_MANAGER_API_PORT&lt;/code>)&lt;/li>
&lt;li>UDP port 69 for the TFTP service (DHCP server should point the nodes to PXE boot from that IP)&lt;/li>
&lt;li>UDP port 51821 for the SideroLink Wireguard service (external endpoint should be specified as &lt;code>SIDERO_CONTROLLER_MANAGER_SIDEROLINK_ENDPOINT&lt;/code> and &lt;code>SIDERO_CONTROLLER_MANAGER_SIDEROLINK_PORT&lt;/code>)&lt;/li>
&lt;/ul>
&lt;p>These endpoints could be exposed to the infrastructure using different strategies:&lt;/p>
&lt;ul>
&lt;li>running &lt;code>sidero-controller-manager&lt;/code> on the host network.&lt;/li>
&lt;li>using Kubernetes load balancers (e.g. MetalLB), ingress controllers, etc.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Note: If you want to run &lt;code>sidero-controller-manager&lt;/code> on the host network using port different from &lt;code>8081&lt;/code> you should set both &lt;code>SIDERO_CONTROLLER_MANAGER_API_PORT&lt;/code> and &lt;code>SIDERO_CONTROLLER_MANAGER_CONTAINER_API_PORT&lt;/code> to the same value.&lt;/p>
&lt;/blockquote></description></item><item><title>V0.6: Architecture</title><link>/v0.6/overview/architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/architecture/</guid><description>
&lt;p>The overarching architecture of Sidero centers around a &amp;ldquo;management plane&amp;rdquo;.
This plane is expected to serve as a single interface upon which administrators can create, scale, upgrade, and delete Kubernetes clusters.
At a high level view, the management plane + created clusters should look something like:&lt;/p>
&lt;p>&lt;img src="/images/dc-view.png" alt="Alternative text">&lt;/p></description></item><item><title>V0.6: SideroLink</title><link>/v0.6/overview/siderolink/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/siderolink/</guid><description>
&lt;p>SideroLink provides an overlay Wireguard point-to-point connection from every Talos machine to the Sidero.
Sidero provisions each machine with a unique IPv6 address and Wireguard key for the SideroLink connection.&lt;/p>
&lt;blockquote>
&lt;p>Note: SideroLink is only supported with Talos &amp;gt;= 0.14.&lt;/p>
&lt;p>SideroLink doesn&amp;rsquo;t provide a way for workload machines to communicate with each other, a connection is only
point-to-point.&lt;/p>
&lt;/blockquote>
&lt;p>SideroLink connection is both encrypted and authenticated, so Sidero uses that to map data streams coming from the machines
to a specific &lt;code>ServerBinding&lt;/code>, &lt;code>MetalMachine&lt;/code>, &lt;code>Machine&lt;/code> and &lt;code>Cluster&lt;/code>.&lt;/p>
&lt;p>Talos node sends two streams over the SideroLink connection: kernel logs (dmesg) and Talos event stream.
SideroLink is enabled automatically by Sidero when booting Talos.&lt;/p>
&lt;h2 id="kernel-logs">Kernel Logs&lt;/h2>
&lt;p>Kernel logs (&lt;code>dmesg&lt;/code>) are streamed in real time from the Talos nodes to the &lt;code>sidero-controller-manager&lt;/code> over SideroLink connection.
Log streaming starts when the kernel passes control to the &lt;code>init&lt;/code> process, so kernel boot time logs will only be available when control
is passed to the userland.&lt;/p>
&lt;p>Logs can be accessed by accessing the logs of the &lt;code>serverlogs&lt;/code> container of the &lt;code>sidero-controller-manager&lt;/code> pod:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl -n sidero-system logs deployment/sidero-controller-manager -c serverlogs -f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">{&lt;/span>&lt;span style="color:#2aa198">&amp;#34;clock&amp;#34;&lt;/span>:8576583,&lt;span style="color:#2aa198">&amp;#34;cluster&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;management-cluster&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;facility&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;user&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;machine&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;management-cluster-cp-ddgsw&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;metal_machine&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;management-cluster-cp-vrff4&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;msg&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;[talos] phase mountState (6/13): 1 tasks(s)\n&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;namespace&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;default&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;priority&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;warning&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;seq&amp;#34;&lt;/span>:665,&lt;span style="color:#2aa198">&amp;#34;server_uuid&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;6b121f82-24a8-4611-9d23-fa1a5ba564f0&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;talos-level&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;warn&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;talos-time&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;2022-02-11T12:42:02.74807823Z&amp;#34;&lt;/span>&lt;span style="color:#719e07">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The format of the message is the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;clock&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">8576583&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;cluster&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;management-cluster&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;facility&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;user&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;machine&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;management-cluster-cp-ddgsw&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;metal_machine&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;management-cluster-cp-vrff4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;msg&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;[talos] phase mountState (6/13): 1 tasks(s)\n&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;namespace&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;default&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;priority&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;warning&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;seq&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">665&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;server_uuid&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;6b121f82-24a8-4611-9d23-fa1a5ba564f0&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;talos-level&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;warn&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">&amp;#34;talos-time&amp;#34;&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;2022-02-11T12:42:02.74807823Z&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Kernel fields (see &lt;a href="https://www.kernel.org/doc/Documentation/ABI/testing/dev-kmsg">Linux documentation&lt;/a> for details):&lt;/p>
&lt;ul>
&lt;li>&lt;code>clock&lt;/code> is the kernel timestamp relative to the boot time&lt;/li>
&lt;li>&lt;code>facility&lt;/code> of the message&lt;/li>
&lt;li>&lt;code>msg&lt;/code> is the actual log message&lt;/li>
&lt;li>&lt;code>seq&lt;/code> is the kernel log sequence&lt;/li>
&lt;li>&lt;code>priority&lt;/code> is the message priority&lt;/li>
&lt;/ul>
&lt;p>Talos-added fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>talos-level&lt;/code> is the translated &lt;code>priority&lt;/code> into standard logging levels&lt;/li>
&lt;li>&lt;code>talos-time&lt;/code> is the timestamp of the log message (accuracy of the timestamp depends on time sync)&lt;/li>
&lt;/ul>
&lt;p>Sidero-added fields:&lt;/p>
&lt;ul>
&lt;li>&lt;code>server_uuid&lt;/code> is the &lt;code>name&lt;/code> of the matching &lt;code>Server&lt;/code> and &lt;code>ServerBinding&lt;/code> resources&lt;/li>
&lt;li>&lt;code>namespace&lt;/code> is the namespace of the &lt;code>Cluster&lt;/code>, &lt;code>MetalMachine&lt;/code> and &lt;code>Machine&lt;/code>&lt;/li>
&lt;li>&lt;code>cluster&lt;/code>, &lt;code>metal_machine&lt;/code> and &lt;code>machine&lt;/code> are the names of the matching &lt;code>Cluster&lt;/code>, &lt;code>MetalMachine&lt;/code> and &lt;code>Machine&lt;/code> resources&lt;/li>
&lt;/ul>
&lt;p>It might be a good idea to send container logs to some log aggregation system and filter the logs for a cluster or a machine.&lt;/p>
&lt;p>Quick filtering for a specific server:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl -n sidero-system logs deployment/sidero-controller-manager -c serverlogs | jq -R &lt;span style="color:#2aa198">&amp;#39;fromjson? | select(.server_uuid == &amp;#34;b4e677d9-b59b-4c1c-925a-f9d9ce049d79&amp;#34;)&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="talos-events">Talos Events&lt;/h2>
&lt;p>Talos delivers system events over the SideroLink connection to the &lt;code>sidero-link-manager&lt;/code> pod.
These events can be accessed with &lt;code>talosctl events&lt;/code> command.
Events are mostly used to update &lt;code>ServerBinding&lt;/code>/&lt;code>MetalMachine&lt;/code> statuses, but they can be also seen in the logs of the &lt;code>serverevents&lt;/code> container:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl -n sidero-system logs deployment/sidero-controller-manager -c serverevents -f
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#719e07">{&lt;/span>&lt;span style="color:#2aa198">&amp;#34;level&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;info&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;ts&amp;#34;&lt;/span>:1644853714.2700942,&lt;span style="color:#2aa198">&amp;#34;caller&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;events-manager/adapter.go:153&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;msg&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;incoming event&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;component&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;sink&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;node&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;[fdae:2859:5bb1:7a03:3ae3:be30:7ec4:4c09]:44530&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;id&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;c857jkm1jjcc7393cbs0&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;type&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;type.googleapis.com/machine.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#2aa198">AddressEvent&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;server_uuid&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;b4e677d9-b59b-4c1c-925a-f9d9ce049d79&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;cluster&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;management-cluster&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;namespace&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;default&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;metal_machine&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;management-cluster-cp-47lll&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;machine&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;management-cluster-cp-7mpsh&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;hostname&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;pxe-2&amp;#34;&lt;/span>,&lt;span style="color:#2aa198">&amp;#34;addresses&amp;#34;&lt;/span>:&lt;span style="color:#2aa198">&amp;#34;172.25.0.5&amp;#34;&lt;/span>&lt;span style="color:#719e07">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="metalmachine-conditions">MetalMachine Conditions&lt;/h2>
&lt;p>Sidero updates the statuses of &lt;code>ServerBinding&lt;/code>/&lt;code>MetalMachine&lt;/code> resources based on the events received from Talos node:&lt;/p>
&lt;ul>
&lt;li>current addresses of the node&lt;/li>
&lt;li>statuses of machine configuration loading and validation, installation status&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="../resources/">Resources&lt;/a> for details.&lt;/p>
&lt;h2 id="siderolink-state">SideroLink State&lt;/h2>
&lt;p>State of the SideroLink connection is kept in the &lt;code>ServerBinding&lt;/code> resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">spec&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">siderolink&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">address&lt;/span>: fdae:2859:5bb1:7a03:3ae3:be30:7ec4:4c09/64
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">publicKey&lt;/span>: XIBT49g9xCoBvyb/x36J+ASlQ4qaxXMG20ZgKbBbfE8=
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Installation-wide SideroLink state is kept in the &lt;code>siderolink&lt;/code> &lt;code>Secret&lt;/code> resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ kubectl get secrets siderolink -o yaml
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>apiVersion: v1
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>data:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> installation-id: &lt;span style="color:#268bd2">QUtmZGFmVGJtUGVFcWp0RGMzT1BHSzlGcmlHTzdDQ0JCSU9aRzRSamdtWT0&lt;/span>&lt;span style="color:#719e07">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> private-key: &lt;span style="color:#268bd2">ME05bHhBd3JwV0hDczhNbm1aR3RDL1ZjK0ZSUFM5UzQwd25IU00wQ3dHOD0&lt;/span>&lt;span style="color:#719e07">=&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>...
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Key &lt;code>installation-id&lt;/code> is used to generate unique SideroLink IPv6 addresses, and &lt;code>private-key&lt;/code> is the Wireguard key of Sidero.&lt;/p></description></item><item><title>V0.6: Resources</title><link>/v0.6/overview/resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/resources/</guid><description>
&lt;p>Sidero, the Talos bootstrap/controlplane providers, and Cluster API each provide several custom resources (CRDs) to Kubernetes.
These CRDs are crucial to understanding the connections between each provider and in troubleshooting problems.
It may also help to look at the &lt;a href="https://github.com/talos-systems/sidero/blob/master/templates/cluster-template.yaml">cluster template&lt;/a> to get an idea of the relationships between these.&lt;/p>
&lt;hr>
&lt;h2 id="cluster-api-capi">Cluster API (CAPI)&lt;/h2>
&lt;p>It&amp;rsquo;s worth defining the most basic resources that CAPI provides first, as they are related to several subsequent resources below.&lt;/p>
&lt;h3 id="cluster">&lt;code>Cluster&lt;/code>&lt;/h3>
&lt;p>&lt;code>Cluster&lt;/code> is the highest level CAPI resource.
It allows users to specify things like network layout of the cluster, as well as contains references to the infrastructure and control plane resources that will be used to create the cluster.&lt;/p>
&lt;h3 id="machines">&lt;code>Machines&lt;/code>&lt;/h3>
&lt;p>&lt;code>Machine&lt;/code> represents an infrastructure component hosting a Kubernetes node.
Allows for specification of things like Kubernetes version, as well as contains reference to the infrastructure resource that relates to this machine.&lt;/p>
&lt;h3 id="machinedeployments">&lt;code>MachineDeployments&lt;/code>&lt;/h3>
&lt;p>&lt;code>MachineDeployments&lt;/code> are similar to a &lt;code>Deployment&lt;/code> and their relationship to &lt;code>Pods&lt;/code> in Kubernetes primitives.
A &lt;code>MachineDeployment&lt;/code> allows for specification of a number of Machine replicas with a given specification.&lt;/p>
&lt;hr>
&lt;h2 id="cluster-api-bootstrap-provider-talos-cabpt">Cluster API Bootstrap Provider Talos (CABPT)&lt;/h2>
&lt;h3 id="talosconfigs">&lt;code>TalosConfigs&lt;/code>&lt;/h3>
&lt;p>The &lt;code>TalosConfig&lt;/code> resource allows a user to specify the type (init, controlplane, join) for a given machine.
The bootstrap provider will then generate a Talos machine configuration for that machine.
This resource also provides the ability to pass a full, pre-generated machine configuration.
Finally, users have the ability to pass &lt;code>configPatches&lt;/code>, which are applied to edit a generate machine configuration with user-defined settings.
The &lt;code>TalosConfig&lt;/code> corresponds to the &lt;code>bootstrap&lt;/code> sections of Machines, &lt;code>MachineDeployments&lt;/code>, and the &lt;code>controlPlaneConfig&lt;/code> section of &lt;code>TalosControlPlanes&lt;/code>.&lt;/p>
&lt;h3 id="talosconfigtemplates">&lt;code>TalosConfigTemplates&lt;/code>&lt;/h3>
&lt;p>&lt;code>TalosConfigTemplates&lt;/code> are similar to the &lt;code>TalosConfig&lt;/code> above, but used when specifying a bootstrap reference in a &lt;code>MachineDeployment&lt;/code>.&lt;/p>
&lt;hr>
&lt;h2 id="cluster-api-control-plane-provider-talos-cacppt">Cluster API Control Plane Provider Talos (CACPPT)&lt;/h2>
&lt;h3 id="taloscontrolplanes">&lt;code>TalosControlPlanes&lt;/code>&lt;/h3>
&lt;p>The control plane provider presents a single CRD, the &lt;code>TalosControlPlane&lt;/code>.
This resource is similar to &lt;code>MachineDeployments&lt;/code>, but is targeted exclusively for the Kubernetes control plane nodes.
The &lt;code>TalosControlPlane&lt;/code> allows for specification of the number of replicas, version of Kubernetes for the control plane nodes, references to the infrastructure resource to use (&lt;code>infrastructureTemplate&lt;/code> section), as well as the configuration of the bootstrap data via the &lt;code>controlPlaneConfig&lt;/code> section.
This resource is referred to by the CAPI Cluster resource via the &lt;code>controlPlaneRef&lt;/code> section.&lt;/p>
&lt;hr>
&lt;h2 id="sidero">Sidero&lt;/h2>
&lt;h3 id="cluster-api-provider-sidero-caps">Cluster API Provider Sidero (CAPS)&lt;/h3>
&lt;h4 id="metalclusters">&lt;code>MetalClusters&lt;/code>&lt;/h4>
&lt;p>A &lt;code>MetalCluster&lt;/code> is Sidero&amp;rsquo;s view of the cluster resource.
This resource allows users to define the control plane endpoint that corresponds to the Kubernetes API server.
This resource corresponds to the &lt;code>infrastructureRef&lt;/code> section of Cluster API&amp;rsquo;s &lt;code>Cluster&lt;/code> resource.&lt;/p>
&lt;h4 id="metalmachines">&lt;code>MetalMachines&lt;/code>&lt;/h4>
&lt;p>A &lt;code>MetalMachine&lt;/code> is Sidero&amp;rsquo;s view of a machine.
Allows for reference of a single server or a server class from which a physical server will be picked to bootstrap.&lt;/p>
&lt;p>&lt;code>MetalMachine&lt;/code> provides a set of statuses describing the state (available with SideroLink, requires Talos &amp;gt;= 0.14):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#268bd2">status&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">addresses&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">address&lt;/span>: &lt;span style="color:#2aa198">172.25.0.5&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: InternalIP
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">address&lt;/span>: pxe-2
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: Hostname
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">conditions&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">lastTransitionTime&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;2022-02-11T14:20:42Z&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">message&lt;/span>: &lt;span style="color:#2aa198">&amp;#39;Get ... connection refused&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">reason&lt;/span>: ProviderUpdateFailed
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">severity&lt;/span>: Warning
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">status&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;False&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: ProviderSet
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">lastTransitionTime&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;2022-02-11T12:48:35Z&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">status&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;True&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: TalosConfigLoaded
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">lastTransitionTime&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;2022-02-11T12:48:35Z&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">status&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;True&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: TalosConfigValidated
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#268bd2">lastTransitionTime&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;2022-02-11T12:48:35Z&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">status&lt;/span>: &lt;span style="color:#2aa198">&amp;#34;True&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#268bd2">type&lt;/span>: TalosInstalled
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Statuses:&lt;/p>
&lt;ul>
&lt;li>&lt;code>addresses&lt;/code> lists the current IP addresses and hostname of the node, &lt;code>addresses&lt;/code> are updated when the node addresses are changed&lt;/li>
&lt;li>&lt;code>conditions&lt;/code>:
&lt;ul>
&lt;li>&lt;code>ProviderSet&lt;/code>: captures the moment infrastrucutre provider ID is set in the &lt;code>Node&lt;/code> specification; depends on workload cluster control plane availability&lt;/li>
&lt;li>&lt;code>TalosConfigLoaded&lt;/code>: Talos successfully loaded machine configuration from Sidero; if this condition indicates a failure, check &lt;code>sidero-controller-manager&lt;/code> logs&lt;/li>
&lt;li>&lt;code>TalosConfigValidated&lt;/code>: Talos successfully validated machine configuration; a failure in this condition indicates that the machine config is malformed&lt;/li>
&lt;li>&lt;code>TalosInstalled&lt;/code>: Talos was successfully installed to disk&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h4 id="metalmachinetemplates">&lt;code>MetalMachineTemplates&lt;/code>&lt;/h4>
&lt;p>A &lt;code>MetalMachineTemplate&lt;/code> is similar to a &lt;code>MetalMachine&lt;/code> above, but serves as a template that is reused for resources like &lt;code>MachineDeployments&lt;/code> or &lt;code>TalosControlPlanes&lt;/code> that allocate multiple &lt;code>Machines&lt;/code> at once.&lt;/p>
&lt;h4 id="serverbindings">&lt;code>ServerBindings&lt;/code>&lt;/h4>
&lt;p>&lt;code>ServerBindings&lt;/code> represent a one-to-one mapping between a Server resource and a &lt;code>MetalMachine&lt;/code> resource.
A &lt;code>ServerBinding&lt;/code> is used internally to keep track of servers that are allocated to a Kubernetes cluster and used to make decisions on cleaning and returning servers to a &lt;code>ServerClass&lt;/code> upon deallocation.&lt;/p>
&lt;h3 id="metal-controller-manager">Metal Controller Manager&lt;/h3>
&lt;h4 id="environments">&lt;code>Environments&lt;/code>&lt;/h4>
&lt;p>These define a desired deployment environment for Talos, including things like which kernel to use, kernel args to pass, and the initrd to use.
Sidero allows you to define a default environment, as well as other environments that may be specific to a subset of nodes.
Users can override the environment at the &lt;code>ServerClass&lt;/code> or &lt;code>Server&lt;/code> level, if you have requirements for different kernels or kernel parameters.&lt;/p>
&lt;p>See the &lt;a href="../../resource-configuration/environments/">Environments&lt;/a> section of our Configuration docs for examples and more detail.&lt;/p>
&lt;h4 id="servers">&lt;code>Servers&lt;/code>&lt;/h4>
&lt;p>These represent physical machines as resources in the management plane.
These &lt;code>Servers&lt;/code> are created when the physical machine PXE boots and completes a &amp;ldquo;discovery&amp;rdquo; process in which it registers with the management plane and provides SMBIOS information such as the CPU manufacturer and version, and memory information.&lt;/p>
&lt;p>See the &lt;a href="../../resource-configuration/servers/">Servers&lt;/a> section of our Configuration docs for examples and more detail.&lt;/p>
&lt;h4 id="serverclasses">&lt;code>ServerClasses&lt;/code>&lt;/h4>
&lt;p>&lt;code>ServerClasses&lt;/code> are a grouping of the &lt;code>Servers&lt;/code> mentioned above, grouped to create classes of servers based on Memory, CPU or other attributes.
These can be used to compose a bank of &lt;code>Servers&lt;/code> that are eligible for provisioning.&lt;/p>
&lt;p>See the &lt;a href="../../resource-configuration/serverclasses/">ServerClasses&lt;/a> section of our Configuration docs for examples and more detail.&lt;/p>
&lt;h3 id="sidero-controller-manager">Sidero Controller Manager&lt;/h3>
&lt;p>While the controller does not present unique CRDs within Kubernetes, it&amp;rsquo;s important to understand the metadata resources that are returned to physical servers during the boot process.&lt;/p>
&lt;h4 id="metadata">Metadata&lt;/h4>
&lt;p>The Sidero controller manager server may be familiar to you if you have used cloud environments previously.
Using Talos machine configurations created by the Talos Cluster API bootstrap provider, along with patches specified by editing &lt;code>Server&lt;/code>/&lt;code>ServerClass&lt;/code> resources or &lt;code>TalosConfig&lt;/code>/&lt;code>TalosControlPlane&lt;/code> resources, metadata is returned to servers who query the controller manager at boot time.&lt;/p>
&lt;p>See the &lt;a href="../../resource-configuration/metadata/">Metadata&lt;/a> section of our Configuration docs for examples and more detail.&lt;/p></description></item><item><title>V0.6: System Requirements</title><link>/v0.6/overview/minimum-requirements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/v0.6/overview/minimum-requirements/</guid><description>
&lt;h2 id="system-requirements">System Requirements&lt;/h2>
&lt;p>Most of the time, Sidero does very little, so it needs very few resources.
However, since it is in charge of any number of workload clusters, it &lt;strong>should&lt;/strong>
be built with redundancy.
It is also common, if the cluster is single-purpose,
to combine the controlplane and worker node roles.
Virtual machines are also
perfectly well-suited for this role.&lt;/p>
&lt;p>Minimum suggested dimensions:&lt;/p>
&lt;ul>
&lt;li>Node count: 3&lt;/li>
&lt;li>Node RAM: 4GB&lt;/li>
&lt;li>Node CPU: ARM64 or x86-64 class&lt;/li>
&lt;li>Node storage: 32GB storage on system disk&lt;/li>
&lt;/ul></description></item></channel></rss>