<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Kubernetes_Bare_Metal</id>
	<title>Kubernetes Bare Metal - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://tech.uvoo.io/index.php?action=history&amp;feed=atom&amp;title=Kubernetes_Bare_Metal"/>
	<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Kubernetes_Bare_Metal&amp;action=history"/>
	<updated>2026-08-03T13:14:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://tech.uvoo.io/index.php?title=Kubernetes_Bare_Metal&amp;diff=5731&amp;oldid=prev</id>
		<title>Busk: Created page with &quot;https://www.digitalocean.com/community/tutorials/bare-metal-kubernetes  You probably want to use cloud-init like this Ubuntu 24.04  `cloud-init` configuration for provisioning...&quot;</title>
		<link rel="alternate" type="text/html" href="https://tech.uvoo.io/index.php?title=Kubernetes_Bare_Metal&amp;diff=5731&amp;oldid=prev"/>
		<updated>2026-08-01T19:26:06Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;https://www.digitalocean.com/community/tutorials/bare-metal-kubernetes  You probably want to use cloud-init like this Ubuntu 24.04  `cloud-init` configuration for provisioning...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;https://www.digitalocean.com/community/tutorials/bare-metal-kubernetes&lt;br /&gt;
&lt;br /&gt;
You probably want to use cloud-init like this Ubuntu 24.04&lt;br /&gt;
&lt;br /&gt;
`cloud-init` configuration for provisioning Kubernetes nodes on **Ubuntu 24.04 LTS**.&lt;br /&gt;
&lt;br /&gt;
This script handles:&lt;br /&gt;
&lt;br /&gt;
* Disabling swap (required by `kubelet`)&lt;br /&gt;
* Enabling necessary kernel modules (`overlay`, `br_netfilter`)&lt;br /&gt;
* Setting required `sysctl` networking parameters&lt;br /&gt;
* Installing and configuring `containerd` with the `SystemdCgroup` driver enabled&lt;br /&gt;
* Adding the official `pkgs.k8s.io` repository (configured for Kubernetes **v1.30**)&lt;br /&gt;
* Installing and locking (`apt-mark hold`) `kubelet`, `kubeadm`, and `kubectl`&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Cloud-Init YAML (`user-data`)&lt;br /&gt;
&lt;br /&gt;
```yaml&lt;br /&gt;
#cloud-config&lt;br /&gt;
package_update: true&lt;br /&gt;
package_upgrade: false&lt;br /&gt;
&lt;br /&gt;
packages:&lt;br /&gt;
  - apt-transport-https&lt;br /&gt;
  - ca-certificates&lt;br /&gt;
  - curl&lt;br /&gt;
  - gpg&lt;br /&gt;
  - containerd&lt;br /&gt;
&lt;br /&gt;
write_files:&lt;br /&gt;
  # Enable required kernel modules for container networking&lt;br /&gt;
  - path: /etc/modules-load.d/k8s.conf&lt;br /&gt;
    permissions: '0644'&lt;br /&gt;
    content: |&lt;br /&gt;
      overlay&lt;br /&gt;
      br_netfilter&lt;br /&gt;
&lt;br /&gt;
  # Set sysctl rules for iptables bridge &amp;amp; IP forwarding&lt;br /&gt;
  - path: /etc/sysctl.d/k8s.conf&lt;br /&gt;
    permissions: '0644'&lt;br /&gt;
    content: |&lt;br /&gt;
      net.bridge.bridge-nf-call-iptables  = 1&lt;br /&gt;
      net.bridge.bridge-nf-call-ip6tables = 1&lt;br /&gt;
      net.ipv4.ip_forward                 = 1&lt;br /&gt;
&lt;br /&gt;
runcmd:&lt;br /&gt;
  # 1. Disable swap immediately and persistently across reboots&lt;br /&gt;
  - swapoff -a&lt;br /&gt;
  - sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab&lt;br /&gt;
&lt;br /&gt;
  # 2. Load kernel modules and apply sysctl settings&lt;br /&gt;
  - modprobe overlay&lt;br /&gt;
  - modprobe br_netfilter&lt;br /&gt;
  - sysctl --system&lt;br /&gt;
&lt;br /&gt;
  # 3. Configure containerd with SystemdCgroup enabled&lt;br /&gt;
  - mkdir -p /etc/containerd&lt;br /&gt;
  - containerd config default | tee /etc/containerd/config.toml &amp;gt; /dev/null&lt;br /&gt;
  - sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml&lt;br /&gt;
  - systemctl restart containerd&lt;br /&gt;
  - systemctl enable containerd&lt;br /&gt;
&lt;br /&gt;
  # 4. Add official Kubernetes v1.30 apt repository&lt;br /&gt;
  - mkdir -p -m 755 /etc/apt/keyrings&lt;br /&gt;
  - curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg&lt;br /&gt;
  - chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg&lt;br /&gt;
  - echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list&lt;br /&gt;
&lt;br /&gt;
  # 5. Install Kubernetes binaries and prevent auto-upgrades&lt;br /&gt;
  - apt-get update&lt;br /&gt;
  - apt-get install -y kubelet kubeadm kubectl&lt;br /&gt;
  - apt-mark hold kubelet kubeadm kubectl&lt;br /&gt;
  - systemctl enable --now kubelet&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
## Next Steps After Boot&lt;br /&gt;
&lt;br /&gt;
Once your machine finishes running `cloud-init`, choose your role:&lt;br /&gt;
&lt;br /&gt;
### For the Control Plane (Master Node)&lt;br /&gt;
&lt;br /&gt;
Initialize the cluster with your control plane IP and preferred pod CIDR (e.g., Flannel/Calico):&lt;br /&gt;
&lt;br /&gt;
```bash&lt;br /&gt;
sudo kubeadm init --pod-network-cidr=10.244.0.0/16&lt;br /&gt;
&lt;br /&gt;
```&lt;br /&gt;
&lt;br /&gt;
### For Worker Nodes&lt;br /&gt;
&lt;br /&gt;
Run the `kubeadm join` command provided at the end of your control plane's `kubeadm init` output.&lt;/div&gt;</summary>
		<author><name>Busk</name></author>
	</entry>
</feed>