Kubernetes
Source: techrepublic.com, linuxtechi.com
Requirements
3 Ubuntu VMs having:
Same version Having same resources LAN Connectivity
Installing dependencies
The first thing you must do is install the necessary dependencies. This will be done on all machines that will join the Kubernetes cluster. The first piece to be install is apt-transport-https (a package that allows using https as well as http in apt repository sources). This can be installed with the following command:
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~
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
Verify
kubectl get pods kubectl get pods -o wide
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
- References
{{#widget:DISQUS
|id=networkm
|uniqid=Kubernetes
|url=https://aman.awiki.org/wiki/Kubernetes
}}