Install Kubernetes k8s | Ubuntu 22.04
Minimum requirements:
- Master/s Linux Ubuntu 22.04 2 CPU 2 G RAM
- Worker/s Linux Ubuntu 22.04 2 CPU 2 G RAM
Setup hostname on master node
Setup hostname on worker nodesBash
nano /etc/hosts file on each node (worker and master node)
sudo hostnamectl set-hostname k8sworker1.kafana.dev
sudo hostnamectl set-hostname k8sworker2.kafana.dev
Text Only
ip_addr_here k8smaster.kafana.dev k8smaster
ip_addr_here k8sworker1.kafana.dev k8sworker1
ip_addr_here k8sworker2.kafana.dev k8sworker2
Install Script
Bash
Chech with
#!/bin/bash
# Disable swap
echo "removing swap"
echo "remove swap file manualy"
sleep 1
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# Load kernel modules on all nodes
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# Kubernetes kernel paramiters
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# Install containerd run time
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
# Docker Repo
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y containerd.io
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
# Kuberenetes Repo
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
# Install Kubernetes components Kubectl, kubeadm & kubelet
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sleep 1
sudo apt-mark hold kubelet kubeadm kubectl
echo "done"
echo ""
echo "run to enable control plane"
echo ""
echo "sudo kubeadm init --control-plane-endpoint=k8smaster.example.net"
- Place manifests all in one place (Optional)
Create workspace / folder for kubernetes (good idea is to put it on a git)
- Install Calico Pod Network Add-on
- Install MetalLB - Loadbalancer for self hosted kubernetes cluster
Bash
curl https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml -O
- Metallb config
Create metallb-config.yaml
YAML
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
# your VM IP range or whatever if your willing to use ssh tunneling from you proxy server (sshuttle does the trick)
addresses:
- 192.168.1.100-192.168.1.250
- MetalLB (Load Balancer fot self hosted k8s )
- You can test your kubernetes cluster with this simple nginx manifest
Create nginx.yaml
YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
svc: nginx
spec:
type: LoadBalancer
loadBalancerIP: 192.168.1.150
# type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
Enjoy!