Skip to content

Kubernetes cluster pre-installation configuration

Kubernetes cluster pre-installation configuration involves preparing the host operating system and network environment to ensure nodes can successfully form a cluster^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

Hostname Configuration

Each node within the cluster must possess a unique hostname^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]. This can be set using the hostnamectl command^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]. Additionally, it is common practice to map hostnames to IP addresses in /etc/hosts to facilitate resolution between nodes^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

SELinux Configuration

For Kubernetes to function correctly, SELinux should be set to permissive mode or disabled^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]. This allows the container runtime to interact with the system without strict policy enforcement blocking operations^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

Swap Management

The kubelet service requires swap memory to be disabled^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

To disable swap temporarily, the command swapoff -a is used^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]. To ensure this change persists across reboots, the swap entry in the /etc/fstab file must be commented out^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

Network Bridge Settings

Kubernetes requires specific kernel parameters to allow iptables to correctly handle bridged traffic^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

Configuration files must be created or modified to load the br_netfilter module and set net.bridge.bridge-nf-call-ip6tables and net.bridge.bridge-nf-call-iptables to 1^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]. After creating the configuration in /etc/sysctl.d/k8s.conf, the settings are applied using sudo sysctl --system^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

Container Runtime Configuration

The container runtime (e.g., Docker) must share a consistent cgroup driver with the kubelet^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]. A common issue occurs when Docker uses cgroupfs while Kubernetes expects systemd, causing the kubelet to fail health checks^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

To resolve this, the Docker daemon configuration (/etc/docker/daemon.json) should explicitly set the exec-opts to native.cgroupdriver=systemd^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md].

Sources

^[400-devops-06-kubernetes-k8s-learning-00install-01-kubernetes.md]