Install Kubernetes on ubuntu

Ports needed for kubernetes: Master node:

  • TCP 6443* Kubernetes api server
  • TCP 2379-2380 etcd server client API
  • TCP 10250 Kubelet API
  • TCP 10251 kube-sheduler
  • TCP 10252 kube-controller-manager
  • TCP 10255 read only kubelet api

Worker nodes:

  • TCP 10250 kubelet API
  • TCP 10255 read only kubelet API
  • TCP 30000-32767 nodeport services

Install docker (M+S)

apt-get update && apt-get install -y docker.io

configure docker daemon (M+S)

cat << EOF > /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

download key (M+S)

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

add kubernetes apt key (M+S)

cat << EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF

run apt-get update (M+S)

apt-get update

install kubernetes on master (M+S) (kubectl not needed on slaves nodes)

apt-get install -y kubelet kubeadm kubectl

Setup master kubernetes server (flannel needed)

kubeadm init --pod-network-cidr=10.244.0.0/16

Exit root, login as normal user and execute commands:

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

Run get pods command

kubectl get pods --all-namespaces

apply kube flannel

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

Run get pods command again (M)

kubectl get pods --all-namespaces
A kube-flannel-ds-* should appear

Run join command from Master into Slave nodes (provided by master after kubeadm init

kubeadm join <IP>:<PORT> --token <TOKEN> --discovery-token-ca-cert-hash sha256:<SHA_CODE>