====== Install Kubernetes ====== First, make sure that all of the nodes in the cluster have [[linux:install:docker|docker]] installed. Disable the swap partition as it will cause errors in Kuberenetes: sudo sed -i .bak 's/ swap /# swap/g' /etc/fstab sudo sed -i.bak 's/\/swap\.img/#\/swap\.img/g' /etc/fstab sudo swapoff -a Add Kubernetes' GPG key that they use to sign the packages and repository: wget -qO - https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - For Ubuntu prior to 18.04: cat > /tmp/kubernetes.list << EOF deb http://apt.kubernetes.io/ kubernetes-$(lsb_release -cs) main EOF For 18.04 (currently): cat > /tmp/kubernetes.list << EOF deb http://apt.kubernetes.io/ kubernetes-xenial main EOF Then sudo mv /tmp/kubernetes.list /etc/apt/sources.list.d/ sudo apt update Install Kubernetes sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl On the "master" node, initialize Kubernetes: sudo kubeadm init --pod-network-cidr=172.30.0.0/16 --apiserver-advertise-address=$(ip route get 8.8.8.8 | awk '{print $7; exit}') mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config kubectl taint nodes --all node-role.kubernetes.io/master- cd /tmp wget https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml sed -i 's/192.168.0.0\/16/172.30.0.0\/16/g' calico.yaml kubectl apply -f calico.yaml On each "worker" node, you need to execute the last line of the output from the initialization of the "master" node. It will look similar to this: kubeadm join --token :6443 --discovery-token-ca-cert-hash sha256: Once you have all of your nodes joined, you can validate with on the master node: kubectl get nodes kubectl get all --namespace kube-system Install the Kubernetes Dashboard: kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml I've been struggling with the latest versions of Kubernetes regarding RBAC... I really wish that they would do a "Getting Started using RBAC" tutorial instead of just having technical documentation which includes EVERY option without examples... anyway, until that is done, or I understand RBAC in the context of Kubernetes better, I'll simply allow the dashboard service account have the cluster-admin role: cat << EOF | kubectl create -f - apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: kubernetes-dashboard labels: k8s-app: kubernetes-dashboard roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: kubernetes-dashboard namespace: kube-system EOF You can now access Dashboard at: http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ When prompted, you can skip login. Given that I don't hand out the Kubenetes config file to non-administrators, this is an acceptable risk in my environments...