How to install kubeadm

Reference

  1. K8s official document
  2. devopstales blog
topology

Your topology would like above. You will have multiple machines. They can be bare metal or VM.

One of them is master. The others are worker.

Install on all your nodes. Include master & worker

Docker

    
sudo apt install -y docker docker.io
    
  

K8s

  1. Update the apt package index and install packages needed to use the Kubernetes apt repository
  2.       
    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
          
        
  3. Download the Google Cloud public signing key
  4.       
    sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
          
        
  5. Add the Kubernetes apt repository
  6.       
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
          
        
  7. Update apt package index, install kubelet, kubeadm and kubectl, and pin their version
  8.       
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
          
        

Letting iptables see bridged traffic

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

sudo modprobe overlay
sudo modprobe br_netfilter

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

Docker with systemd

    
echo '{"exec-opts": ["native.cgroupdriver=systemd"]}' | sudo tee /etc/docker/daemon.json

sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
    
  

Turn off swap

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

Initialize

Go to master node

  1. Initialize network
  2.         
    sudo kubeadm init --pod-network-cidr=10.244.0.0/16
            
          
  3. Run as non-root user
  4.       
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
          
        
  5. Join command
  6.       
    kubeadm token create --print-join-command
          
        

Go to worker node

Copy output result from previous step.3 Join command to your worker node. Like this

    
sudo kubeadm join 10.22.23.122:6443 --token XXXXXXX \
    --discovery-token-ca-cert-hash sha256:XXXXXXXX
    
  

Go to master node

Set up network for pod communication

    
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml