Learn to deploy a Kubernetes cluster in 30 minutes using KubeAdm
**Pre-Requisites: **
Create 3 VMs with 2 core 8 GB and 10-100 GB HDD
1. Docker set up in master and nodes**
1a.** Login into master and update your existing list of packages
.fusion-syntax-highlighter-82 > .CodeMirror, .fusion-syntax-highlighter-82 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-82 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-82 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt update 1b. Install the prerequisite packages which let apt to use packages over HTTPS
.fusion-syntax-highlighter-83 > .CodeMirror, .fusion-syntax-highlighter-83 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-83 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-83 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt install apt-transport-https ca-certificates curl software-properties-common -y### 1c. Add the GPG key for the official Docker repository to your system
.fusion-syntax-highlighter-84 > .CodeMirror, .fusion-syntax-highlighter-84 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-84 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-84 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -### 1d. Add the Docker repository to APT sources
.fusion-syntax-highlighter-85 > .CodeMirror, .fusion-syntax-highlighter-85 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-85 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-85 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"### 1e. Update the packages with the Docker packages from the newly added repo
.fusion-syntax-highlighter-86 > .CodeMirror, .fusion-syntax-highlighter-86 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-86 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-86 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt update### 1f. Make sure you are about to install from the Docker repo
.fusion-syntax-highlighter-87 > .CodeMirror, .fusion-syntax-highlighter-87 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-87 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-87 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-cache policy docker-ce### 1g. Run the following command to install Docker
.fusion-syntax-highlighter-88 > .CodeMirror, .fusion-syntax-highlighter-88 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-88 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-88 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get install docker-ce=18.06.3ce3-0~ubuntu -y containerd.io=1.2.2-1 ### 1h. Run the following command to check if the docker is running
.fusion-syntax-highlighter-89 > .CodeMirror, .fusion-syntax-highlighter-89 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-89 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-89 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo systemctl status docker### 1i. To avoid sudo requirement in executing the docker command, add your user to docker group
.fusion-syntax-highlighter-90 > .CodeMirror, .fusion-syntax-highlighter-90 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-90 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-90 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo usermod -aG docker ${USER}### 1j. To apply the new group membership, run the following command
.fusion-syntax-highlighter-91 > .CodeMirror, .fusion-syntax-highlighter-91 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-91 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-91 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo su - ${USER}You will be prompted to enter your user password to continue
1k. Confirm that your user is now added to the docker group by typing
.fusion-syntax-highlighter-92 > .CodeMirror, .fusion-syntax-highlighter-92 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-92 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-92 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ id -nGRepeat the above steps for both the nodes.
2. Kubernetes master set up**
2a.** Login to the master and install kubelet, kubeadm and kubectl** **
.fusion-syntax-highlighter-93 > .CodeMirror, .fusion-syntax-highlighter-93 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-93 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-93 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl.fusion-syntax-highlighter-94 > .CodeMirror, .fusion-syntax-highlighter-94 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-94 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-94 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -.fusion-syntax-highlighter-95 > .CodeMirror, .fusion-syntax-highlighter-95 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-95 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-95 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ cat .fusion-syntax-highlighter-96 > .CodeMirror, .fusion-syntax-highlighter-96 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-96 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-96 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get update.fusion-syntax-highlighter-97 > .CodeMirror, .fusion-syntax-highlighter-97 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-97 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-97 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get install -y --allow-change-held-packages kubelet=1.18.15-00 kubeadm=1.18.15-00 kubectl=1.18.15-00.fusion-syntax-highlighter-98 > .CodeMirror, .fusion-syntax-highlighter-98 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-98 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-98 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-mark hold kubelet kubeadm kubectl### 2b. Initialise kubeadm .fusion-syntax-highlighter-99 > .CodeMirror, .fusion-syntax-highlighter-99 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-99 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-99 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16Your Kubernetes master has initialized successfully!
2c. To start using your cluster, you need to run the following command as a regular user:
.fusion-syntax-highlighter-100 > .CodeMirror, .fusion-syntax-highlighter-100 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-100 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-100 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ mkdir -p $HOME/.kube.fusion-syntax-highlighter-101 > .CodeMirror, .fusion-syntax-highlighter-101 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-101 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-101 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config.fusion-syntax-highlighter-102 > .CodeMirror, .fusion-syntax-highlighter-102 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-102 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-102 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo chown $(id -u):$(id -g) $HOME/.kube/configCopy the join command and make a note of it.
For example:
.fusion-syntax-highlighter-103 > .CodeMirror, .fusion-syntax-highlighter-103 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-103 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-103 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ kubeadm join XX.X.X.XXX:6443 --token d3i30u.7p5xuyzkc5t2fm0x --discovery-token-ca-cert-hash sha256:4d3e70e50a8b3ecfacc64585942b93564c9af555ab90c576c59e63def90245ac
2d. Set up Flannel
.fusion-syntax-highlighter-104 > .CodeMirror, .fusion-syntax-highlighter-104 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-104 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-104 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo sysctl net.bridge.bridge-nf-call-iptables=1 .fusion-syntax-highlighter-105 > .CodeMirror, .fusion-syntax-highlighter-105 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-105 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-105 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/ 2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
2e. Verify the creation of the master in the cluster.
$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-XX-X-X-XXX Ready master 3m53s v1.18.15
$ kubectl get pods --all-namespaces* NAMESPACE NAME READY STATUS RESTART AGE kube-system coredns-54ff9cd656-ww6sw 1/1 Running 0 4m2s kube-system coredns-54ff9cd656-xlrdr 1/1 Running 0 4m2s kube-system etcd-ip-XX-X-X-XXX 1/1 Running 0 2m59s kube-system kube-apiserver-ip-XX-X-X-XXX 1/1 Running 0 3m11s kube-system kube-controller-manager-ip-XX-X-X-XXX 1/1 Running 0 3m15s kube-system kube-flannel-ds-amd64-4rl8d 1/1 Running 0 45s kube-system kube-proxy-jpp7w 1/1 Running 0 4m2s kube-system kube-scheduler-ip-XX-X-X-XXX 1/1 Running 0 3m23s
3. Kubernetes node set up****
3a. Login into node 1 and install kubelet, kubeadm and kubectl*** *
.fusion-syntax-highlighter-106 > .CodeMirror, .fusion-syntax-highlighter-106 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-106 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-106 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get update && sudo apt-get install -y apt-transport-https curl.fusion-syntax-highlighter-107 > .CodeMirror, .fusion-syntax-highlighter-107 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-107 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-107 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -.fusion-syntax-highlighter-108 > .CodeMirror, .fusion-syntax-highlighter-108 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-108 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-108 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ cat .fusion-syntax-highlighter-109 > .CodeMirror, .fusion-syntax-highlighter-109 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-109 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-109 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get update.fusion-syntax-highlighter-110 > .CodeMirror, .fusion-syntax-highlighter-110 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-110 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-110 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-get install -y --allow-change-held-packages kubelet=1.18.15-00 kubeadm=1.18.15-00 kubectl=1.18.15-00.fusion-syntax-highlighter-111 > .CodeMirror, .fusion-syntax-highlighter-111 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-111 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-111 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo apt-mark hold kubelet kubeadm kubectl
3b**. Join cluster from the command copied above in the master.*** ***
.fusion-syntax-highlighter-112 > .CodeMirror, .fusion-syntax-highlighter-112 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-112 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-112 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ sudo kubeadm join XX.X.X.XXX:6443 --token d3i30u.7p5xuyzkc5t2fm0x --discovery-token-ca-cert-hash sha256:4d3e70e50a8b3ecfacc64585942b93564c9af555ab90c576c59e63def90245ac This node has joined the cluster:
Repeat the steps for node 2.
4. Verify creation of nodes in cluster.**
Login into master and verify the cluster
$ kubectl get nodes* * NAME STATUS ROLES AGE VERSION ip-XX-X-X-XXX Ready 105m v1.18.15 ip-XXX-X-X-XX Ready master 123m v1.18.15 ip-XX-X-X-XX Ready 111m v1.18.15
4. Deploying the nginx with nodeport service**
Use the following yaml for deploying nginx with nodeport service to test the cluster
.fusion-syntax-highlighter-113 > .CodeMirror, .fusion-syntax-highlighter-113 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-113 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-113 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax HighlighterapiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: run: nginx replicas: 2 template: metadata: labels: run: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80
apiVersion: v1 kind: Service metadata: name: nginx labels: run: nginx spec: type: NodePort ports:
- port: 80 protocol: TCP selector: run: nginx### **4.*Test the deployment .fusion-syntax-highlighter-114 > .CodeMirror, .fusion-syntax-highlighter-114 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-114 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-114 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ curl -vk master-node:nodeport.fusion-syntax-highlighter-115 > .CodeMirror, .fusion-syntax-highlighter-115 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-115 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-115 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ curl -vk node01:nodeport.fusion-syntax-highlighter-116 > .CodeMirror, .fusion-syntax-highlighter-116 > .CodeMirror .CodeMirror-gutters {background-color:var(--awb-color1);}.fusion-syntax-highlighter-116 > .CodeMirror .CodeMirror-gutters { background-color: var(--awb-color2); }.fusion-syntax-highlighter-116 > .CodeMirror .CodeMirror-linenumber { color: var(--awb-color8); }Copy to ClipboardSyntax Highlighter$ curl -vk node02:nodeport### About The Author### A. NageshSR Cloud Dev-Ops Engineer | Cloud Control
Senior Cloud DevOps Engineer with more than five years of experience in supporting, automating, and optimizing deployments to hybrid cloud platforms using DevOps processes, CI/CD, containers and Kubernetes in both Production and Development environments
Kubernetes- * On Linked-In
