Kubernetes
Requirements
3 Ubuntu VMs having:
Same version Having same resources LAN Connectivity
Installing dependencies
Source: techrepublic.com, linuxtechi.com
This will be done on all machines that will join the Kubernetes cluster.
sudo apt-get update && apt-get install -y apt-transport-https
Our next dependency is Docker. Our Kubernetes installation will depend upon this, so install it with:
sudo apt install docker.io
Once that completes, start and enable the Docker service with the commands
sudo systemctl start docker sudo systemctl enable docker
Disable Swap in all the 3 VMs:
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
Or:
sudo sed -i '/ swap / s/^/#/' /etc/fstab
Installing Kubernetes
sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
Next add a repository by creating the file /etc/apt/sources.list.d/kubernetes.list and enter the following content:
deb http://apt.kubernetes.io/ kubernetes-xenial main
Save and close that file. Install Kubernetes with the following commands:
apt-get update apt-get install -y kubelet kubeadm kubectl kubernetes-cni
Initialize your master
Go to the machine that will serve as the Kubernetes master and issue the command:
sudo su sudo kubeadm init
Before you join a node, you need to issue the following commands (as a regular user):
exit mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Deploying a pod network
You must deploy a pod network before anything will actually function properly:
kubectl apply -f [podnetwork].yaml'
You can use one of the below Pod Networks:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Verify Pods, all should be running & only DNS pod should be Pending initially:
aman@ubuntu:~$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system etcd-ubuntu 1/1 Running 0 3m kube-system kube-apiserver-ubuntu 1/1 Running 0 3m kube-system kube-controller-manager-ubuntu 1/1 Running 0 3m kube-system kube-dns-86f4d74b45-wq49s 0/3 Pending 0 4m <== kube-system kube-proxy-g96ml 1/1 Running 0 4m kube-system kube-scheduler-ubuntu 1/1 Running 0 3m
Flannel
Multiple bugs were encountered when implementing Flannel |
Here we will be installing the Flannel pod network:
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml
Issue the command:
kubectl get pods —all-namespaces
Weave Net
Install the WeaveNet Pod:
export kubever=$(kubectl version | base64 | tr -d '\n') kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
Verification
Verify Installation after a few minutes:
aman@ubuntu:~$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system etcd-ubuntu 1/1 Running 0 11m kube-system kube-apiserver-ubuntu 1/1 Running 0 11m kube-system kube-controller-manager-ubuntu 1/1 Running 0 11m kube-system kube-dns-86f4d74b45-wq49s 3/3 Running 0 12m <== kube-system kube-proxy-g96ml 1/1 Running 0 12m kube-system kube-scheduler-ubuntu 1/1 Running 0 11m kube-system weave-net-pg57l 2/2 Running 0 6m <==
Joining a node
With everything in place, you are ready to join the node to the master. To do this, go to the node's terminal and issue the command:
sudo su kubeadm join --token <TOKEN> <MASTER_IP:6443>
OR what ever is shown in the outputof master after kubeadm init:
kubeadm join 10.1.11.184:6443 --token 0lxezc.game230zg6jpa60g --discovery-token-ca-cert-hash sha256:74b34793d0ty56037c71e4a54e7475901bf627~
Recreate a token if required:
sudo kubeadm token create
Verify from Master node:
kubectl get nodes
Deploying a service
Source: medium.com
At this point, you are ready to deploy a service on your Kubernetes cluster. To deploy an NGINX service (and expose the service on port 80), run the following commands (from the master):
sudo kubectl run nginx-app --image=nginx --port=80 --env="DOMAIN=cluster" --replicas=2 sudo kubectl expose deployment nginx-app --port=80 --name=nginx-http --type=NodePort
Managing Kubernetes
Scaling Deployment:
sudo kubectl get deployment nginx-app sudo kubectl scale deployment nginx-app --replicas=3
Verify
Verify Pods:
kubectl get pods kubectl get pods -o wide
Go to each worker nodes:
sudo docker ps -a
Delete a Pods
This will delete an existing POD 7 create a new one:
kubectl delete pod nginx-app-56f6bb6776-wrbvl
Delete a Deployment
Verify existing Pods & Service:
kubectl get deployments kubectl get service
Delete a Pods & Service:
kubectl delete deployment nginx-app kubectl delete service nginx-http
Delete all Pods & Services:
kubectl delete pods --all kubectl delete service --all
Troubleshooting
If the Pod creations fails check logs:
kubectl describe pod nginx-app-56f6bb6776-b7cb5
Reset Everything
sudo kubeadm reset sudo rm -rf .kube
More Information
- References
{{#widget:DISQUS
|id=networkm
|uniqid=Kubernetes
|url=https://aman.awiki.org/wiki/Kubernetes
}}