πŸ“šBook Signing at KubeCon EU 2026Meet us at Booking.com HQ (Mon 18:30-21:00) & vCluster booth #521 (Tue 24 Mar, 12:30-1:30pm) β€” free book giveaway!RSVP Booking.com Event
Deployments beginner ⏱ 15 minutes K8s 1.28+

Install Kubernetes on openSUSE

Install Kubernetes on openSUSE with kubeadm. Covers containerd setup, kubeadm init, Calico CNI, and worker node joining for openSUSE Leap 15 / Tumbleweed.

By Luca Berton β€’ β€’ πŸ“– 5 min read

πŸ’‘ Quick Answer: Install Kubernetes on openSUSE with kubeadm. Covers containerd setup, kubeadm init, Calico CNI, and worker node joining for openSUSE Leap 15 / Tumbleweed.

The Problem

You need to install a production-ready Kubernetes cluster on openSUSE (openSUSE Leap 15 / Tumbleweed). This guide covers the complete process from prerequisites to a running cluster.

The Solution

Prerequisites

  • 2+ CPUs per node
  • 2GB+ RAM per node
  • Unique hostname, MAC address, and product UUID on each node
  • Full network connectivity between nodes
  • Swap disabled

Install Kubernetes on openSUSE

# Disable swap
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab

# Load kernel modules
cat << EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

# Sysctl params
cat << EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system

# Install containerd
sudo zypper install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd

# Add Kubernetes repo
sudo zypper addrepo --gpgcheck-strict --refresh https://pkgs.k8s.io/core:/stable:/v1.31/rpm/ kubernetes

# Install kubeadm, kubelet, kubectl
sudo zypper install -y kubelet kubeadm kubectl
sudo systemctl enable kubelet

# Initialize cluster
sudo kubeadm init --pod-network-cidr=10.244.0.0/16

# Configure kubectl
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Install Calico CNI
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml

# Verify
kubectl get nodes
kubectl get pods -A

Join Worker Nodes

On the control plane, generate the join command:

kubeadm token create --print-join-command

On each worker node, run the prerequisites above (containerd + kubeadm/kubelet), then:

# Paste the join command from above
sudo kubeadm join <control-plane-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Verify the Cluster

kubectl get nodes -o wide
# NAME          STATUS   ROLES           AGE   VERSION
# control-01    Ready    control-plane   5m    v1.31.0
# worker-01     Ready    <none>          2m    v1.31.0
# worker-02     Ready    <none>          2m    v1.31.0

kubectl get pods -A
graph TD
    A[Prepare nodes] --> B[Install containerd]
    B --> C[Install kubeadm/kubelet/kubectl]
    C --> D[kubeadm init on control plane]
    D --> E[Install CNI - Calico]
    E --> F[kubeadm join on workers]
    F --> G[Cluster ready]

Common Issues

  • Swap not disabled β€” kubeadm refuses to init with swap on
  • Containerd not using systemd cgroup β€” causes kubelet crashes
  • Firewall blocking ports β€” control plane needs 6443, 2379-2380, 10250-10252
  • Wrong CNI CIDR β€” must match --pod-network-cidr in kubeadm init

Best Practices

  • Pin package versions β€” prevent accidental upgrades breaking your cluster
  • Use systemd cgroup driver β€” matches kubelet’s default on modern systems
  • Configure HA control plane β€” 3+ control plane nodes for production
  • Back up etcd β€” before any upgrade or change

Key Takeaways

  • kubeadm is the standard tool for bootstrapping Kubernetes clusters
  • containerd with systemd cgroup is the recommended runtime
  • Always install a CNI plugin after kubeadm init
  • Pin kubelet, kubeadm, kubectl versions to prevent drift
#kubernetes #installation #opensuse #kubeadm #containerd
Luca Berton
Written by Luca Berton

Principal Solutions Architect specializing in Kubernetes, AI/GPU infrastructure, and cloud-native platforms. Author of Kubernetes Recipes and creator of CopyPasteLearn courses.

Kubernetes Recipes book cover

Want More Kubernetes Recipes?

This recipe is from Kubernetes Recipes, our 750-page practical guide with hundreds of production-ready patterns.

Luca Berton Ansible Pilot Ansible by Example Open Empower K8s Recipes Terraform Pilot CopyPasteLearn ProteinLens