Sunday, May 13, 2018

Kubernetes - Pods

A Pod is a 1 or group of containers having same application running on any worker node. A Pod
is a collection of containers. The Pod name goes with the whale theme of docker containers,
since group of whales are called pod.

A pod can also be taught as  a smallest deployable artifact in a cluster. A Pod represents a
collection of application containers and volumes running in the same execution environment.
This means all containers defined inside the pod definition will land on the same execution

How is Pod created?
Kubectl command will use the yml file and connect to the kube-apiserver running on 6443.
This in turn will connect to the kube-controller-manager which will further connect to the
kube-scheduler. this scheduler program connects to worker nodes using kubelet agent and
then kubelet agent connects to docker daemon on the worker node and launch the container
based on the pod definition in the YML file

The applications running in the POD all use the same network namespace, IP address and Port
Space. They communicate with each other using the localhost.

Each POD will have an IP address and has full communication with other physical computers
across the network.

A simple POD is created using yml file. create a file POD.yml file and add the below contents as,
apiVersion: v1
kind: Pod
 name: kube-pod-testing
  app: pingpong-java
  region: IN
  rack: r1
  version: "1.1"
   - name: web-server-test-container
     - containerPort: 3000

In the above file kind, Name, image and containerPort are very important.
Kind - Type here it is Pod.
Name - name of the container
Image - Image of the container
containerPort - port that is being exposed to the outside from container.

Run the “kubectl create -f pod.yml” which will create a Pod.

Get the Pod details using the ,
[root@manja17-I13330 kubetesting]# kubectl get pods
kube-pod-testing   1/1 Running 0           1d

We can check resources for our running pod by,
[root@manja17-I13330 kubetesting]# kubectl describe  pod kube-pod-testing
Name:          kube-pod-testing
Namespace:    default
Node:          dev.foohost.vm/
Start Time:   Fri, 20 Apr 2018 08:18:42 -0400
Labels:       app=pingpong-java
Annotations:  <none>
Status:       Running
   Container ID:   docker://7934cb451aa73d727b34181b9ae78454c7304ad78d12eb7fac7c667e27
   Image ID:     docker-pullable://
   Port:           3000/TCP
   Host Port:      0/TCP
   State:          Running
     Started:      Fri, 20 Apr 2018 08:19:38 -0400
   Ready:          True
   Restart Count:  0
   Environment:    <none>
     /var/run/secrets/ from default-token-r4w74 (ro)
 Type           Status
 Initialized    True
 Ready          True
 PodScheduled   True
   Type:        Secret (a volume populated by a Secret)
   SecretName:  default-token-r4w74
   Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations: for 300s
       for 300s
Events:          <none>

Connecting to the Pod - Kubernetes allows us to login to the container using exec command similar
to the docker exec. The container names are generally assigned in the manifest file or we can get
the details when we describe the pod. we can connect to the pod using,
[root@manja17-I13330 kubenetes-config]# kubectl exec testing-service -c test-ser -it -- bash
root@testing-service:/usr/src/app# ls
Dockerfile  requirements.txt
root@testing-service:/usr/src/app# exit

the syntax will be "kubectl exec <pod Name> -c <Container Name> -it -- bash". We can also run the commands with out logging into the container using,
[root@manja17-I13330 kubenetes-config]# kubectl exec testing-service -c test-ser free
             total used       free shared buffers     cached
Mem:       4046940 3758468     288472 61204 6368    2668700
-/+ buffers/cache:    1083400 2963540

Swap:            0 0     0

More to Come , Happy learning :-)

No comments :

Post a Comment