by Anish
Posted on Tuesday July 17, 2018
In this section we will learn the core concept of kubernetes like Pod,cluster,Deployment,Replica Set. The idea is to keep it simple and making more intuitive learning
At the beginning we have setup one master node and minion node
kubectl - Main CLI tool for running commands and managing Kubernetes clusters. so what is the cluster
[email protected]:$ kubectl cluster-info
Kubernetes master is running at https://172.16.9.12:6443
KubeDNS is running at https://172.16.9.12:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
cluster consists of at least one cluster master and multiple worker machines called nodes
Verify the nodes which has join the cluster
[email protected]:$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master Ready master 18h v1.11.0
kube-minion Ready <none> 18h v1.11.0
Example : List all resources in the name space
kubectl get all
To List all supported resource types along with their shortnames, API group, whether they are namespaced, and Kind: run the kubectl api-resources
[email protected]:$ kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
pods po true Pod
services svc true Service
deployments deploy apps true Deployment
replicasets rs extensions true ReplicaSet
clusterroles rbac.authorization.k8s.io false ClusterRole
rolebindings rbac.authorization.k8s.io true RoleBinding
.......
.......
Start a single instance of nginx with one replicaset
[email protected]:$ kubectl run nginx --image=nginx --replicas=1
The output will be deployment.apps/nginx created
Ok, so lets see if we actually have a Kubernetes pods up and running:
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-sqmjk 0/1 ContainerCreating 0 12s
The container is creating on nginx pod , again hitting the same command, this time shows pods are up and running
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-sqmjk 1/1 Running 0 46s
We can retrieve a lot more information about each of these pods using kubectl describe pod
. For example:
[email protected]:$ kubectl describe pod nginx-64f497f8fd-sqmjk
There will be big YAML output
......
......
Containers:
nginx:
Container ID: docker://a7bc2921ca62187778c5f65da4e139516f2701caf32e325cbeef2a1ee082da0b
Image: nginx
Image ID: docker-pullable://[email protected]:a65beb8c90a08b22a9ff6a219c2f363e16c477b6d610da28fe9cba37c2c3a2ac
Port: <none>
Host Port: <none>
State: Running
Started: Mon, 16 Jul 2018 18:48:53 +0530
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8wxrj (ro)
Here you can see configuration information about the container(s) and Pod (labels, resource requirements, etc.), as well as status information about the container(s) and Pod (state, readiness, restart count, events, etc.).
The container state is one of Waiting, Running, or Terminated. here you can see that for a container in Running state, the system tells you when the container started.
Ready tells you whether the container passed its last readiness probe.
Look for Events
Look for the event generated to perform this action kubectl run nginx --image=nginx --replicas=1
in the kubernetes master node
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 11m default-scheduler Successfully assigned default/nginx-64f497f8fd-7w5mn to kube-minion
Normal Pulling 10m kubelet, kube-minion pulling image "nginx"
Normal Pulled 10m kubelet, kube-minion Successfully pulled image "nginx"
Normal Created 10m kubelet, kube-minion Created container
Normal Started 10m kubelet, kube-minion Started container
In the Minion node docker images are pulled and container created and started , for docker background user can issue docker related command to see how docker & kubernetes are orchestrating the deployment
[email protected]:$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 8b89e48b5f15 2 hours ago 109 MB
nginx <none> 3c5a05123222 10 days ago 109 MB
To list all events you can use kubectl get events
Get the deployment configuration of nginx by the command
[email protected]:$ kubectl get deployment nginx
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
nginx 1 1 1 1 6m
During the initializing state we have told the kubernetes to maintain one replica only by setting the flag --replicas=1
Delete the nginx pod
to delete the pod specify the pod name
[email protected]:$ kubectl delete pod nginx-64f497f8fd-sqmjk
Query on pod still shows one pod is running with diffrent id, this happen because initially we have tell the kuberntes to keep one running replica always Great Kubernetes !!! you have save my production server from accidently destroyed
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-fg9q7 1/1 Running 0 1m
To scale up the pods tell to kubectl how many current replica is there (current-replicas) and how many needs to be scaled (replicas)
[email protected]:$ kubectl scale --current-replicas=1 --replicas=3 deployment/nginx
In the background two new container will get created and will get deployed
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-brn22 0/1 ContainerCreating 0 17s
nginx-64f497f8fd-fg9q7 1/1 Running 0 2h
nginx-64f497f8fd-z2vbb 0/1 ContainerCreating 0 17s
After creating the containers check the status of these pods
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-brn22 1/1 Running 0 30s
nginx-64f497f8fd-fg9q7 1/1 Running 0 2h
nginx-64f497f8fd-z2vbb 1/1 Running 0 30s
Look at the events
kubectl get events
[email protected]:$ kubectl scale --current-replicas=3 --replicas=1 deployment/nginx
deployment.extensions/nginx scaled
Pods are terminating
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-fg9q7 1/1 Running 0 2h
nginx-64f497f8fd-fpjk9 0/1 Terminating 0 35s
nginx-64f497f8fd-lk2pw 0/1 Terminating 0 35s
After scaling down only one nginx pod is running
[email protected]:$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-64f497f8fd-fg9q7 1/1 Running 0 2h
Look at the events
To add new node to the kubernetes cluster requires token and discovery-token-ca-cert-hash
Forget your token :), first create a token using kubeadm command in the kube-master setup,
[email protected]:$ kubeadm token create
I0717 10:32:47.753179 22047 feature_gate.go:230] feature gates: &{map[]}
yy8zho.n3w5inti3twy7v0y
Forget your discovery-token-ca-cert-hash ,
Get rooCA cert fingerprint
[email protected]:$ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
The outpted discovery-token-ca-cert-hash value30e3baf5cb4474b23d5d2500836f6b4da19fa629b64339b1301d3e04892e08aa
Once the Token is created join the new node name kube-minion2 using the token and tokencacert value
[email protected]:$ kubeadm join 172.16.9.12:6443 --token yy8zho.n3w5inti3twy7v0y --discovery-token-ca-cert-hash sha256:30e3baf5cb4474b23d5d2500836f6b4da19fa629b64339b1301d3e04892e08aa
Checkout for the events kubectl get events
A set of event shows when adding a new node to the cluster
Now in this cluster we have two minion nodes and one master node
[email protected]:$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kube-master Ready master 18h v1.11.0
kube-minion Ready <none> 18h v1.11.0
kube-minion2 Ready <none> 2m v1.11.0
Again Now scale up the nginx
kubectl scale --current-replicas=1 --replicas=5 deployment/nginx
Look for the Events to verify on the new node pods are created and nginx are deployed
kubectl describe pods | grep kube-minion
Well thats its for Today hope you have Enjoyed Learnign Kubernetes
Thanku for reading !!! Give a Share for Support
Asking for donation sound bad to me, so i'm raising fund from by offering all my Nine book for just $9