Understanding Kubernetes


Continue with my previous post ‘Docker Infrastructure V1.1‘, I want to share some my understanding of how Kubernetes works.

Logically, there are 3 basic components in Kubernetes. Pod, Relication-controller and Service:

  • Pod: it is the smallest unit in Kubernetes. It contains one or more containers.
  • Replication-controller: It controls and also guarantees the instance numbers of a pod.
  • Service: it is interface that user or other applications can interact with.

If you ever used AWS ECS, it may be easy to understand the concept. Here is how I compare them.

AWS ECS Kubernetes
Task Pod
Auto-scale policy Replication-controller
Service Service

For example, I want to build up a HTTP service on Kubernetes. There are two steps:

1) Create a replication controller and set replicas size – how many pods you want to run. Here is my sample json file. It will create 2 pods within the replication-controller my-httpd-01.

{
   "kind":"ReplicationController",
   "apiVersion":"v1beta3",
   "metadata":{
      "name":"my-httpd-01",
      "labels":{
         "name":"my-httpd-01"
      }   
   },  
   "spec":{
      "replicas":2,
      "selector":{
         "name":"my-httpd-01",
         "version":"v1"
      },  
      "template":{
         "metadata":{
            "labels":{
               "name":"my-httpd-01",
               "version":"v1"
            }   
         },  
         "spec":{
            "volumes":[
          {"name": "web", "hostPath": {"path": "/web"}}
      ],    
            "containers":[
               {   
                  "name":"my-httpd-01",
                  "image":"dockerdev02:5000/my-httpd",
          "volumeMounts":[
            {"name": "web", "mountPath": "/var/www/html"}
          ],
                  "ports":[
                     {   
                        "containerPort":80,
                        "protocol":"TCP"
                     }   
                  ]   
               }   
            ]   
         }   
      }   
   }   
}

2) Create service to use the backend replication controller that is created above, and expose the port to external world. Here is the sample json file. It creates a service named my-httpd-01 to use the replication-controller my-httpd-01 that is created above, and expose the service to port 8000. External users can access it via the defined public IP addresses.

{
   "kind":"Service",
   "apiVersion":"v1beta3",
   "metadata":{
      "name":"my-httpd-01",
      "labels":{
         "name":"my-httpd-01"
      }
   },
   "spec":{
      "ports": [
        {
          "port":8000,
          "targetPort":80,
          "protocol":"TCP"
        }
      ],
      "publicIPs":["10.1.1.11","10.1.1.12"],
      "selector":{
         "name":"my-httpd-01"
      }
   }
}

When user access the HTTP service, the traffic are load balanced by the service between the pods.

Selection_058

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s