Kubernetes:

    With years of experience in managing highly scalable products, google has released kubernetes an open source project which manages containerized applications across multiple hosts. Kubernetes is actively developed with more than 700 active developers. Kubernetes can be setup over any cloud platform any os. Its is based on etc which is a key value store that provides shared configuration and service discovery for clusters.

Kubernetes Services:

   Kubernetes consists of four core services:

  • etcd 
  • apiserver
  • controll manager
  • scheduler

   So all we have to do is run these services providing the servers ip addresses and the application we want to deploy.

Terminology:

Cluster : A cluster is a set of physical or virtual machines and other infrastructure resources used by Kubernetes to run your applications. Kubernetes can run anywhere.

Node : A node is a physical or virtual machine running Kubernetes, onto which pods can be scheduled.

Pod : Pods are a colocated group of application containers with shared volumes. They're the smallest deployable units that can be created, scheduled, and managed with Kubernetes. Pods can be created individually, but it's recommended to use a replication controller even if creating a single pod.

Replication controller :Replication controllers manage the lifecycle of pods. They ensure that a specified number of pods are running at any given time, by creating or killing pods as required.

Service : Services provide a single, stable name and address for a set of pods. They act as basic load balancers.

Label : Labels are used to organize and select groups of objects based on the key:value pairs.

Configuring Kubernetes on Fedora:

Prerequisites:
    At least we need to have two hosts, and each host should have docker configured. Here we assume fed-master as host1 which acts as master and fed-node being the slave on host2.

Install kubernetes on both fed-master and fed-node:

    yum -y install --enablerepo=updates-testing kubernetes

Install etcd on fed-master:

yum -y install etcd iptables

Edit /etc/hosts

echo "<host1_ip_addr_here>    fed-master
<host2_ip_addr_here>    fed-node" >> /etc/hosts

Configure etcd, edit /etc/kubernetes/config

KUBE_MASTER="--master=http://fed-master:8080"

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

Disable iptable service:

   To avoid firewall issues with docker we are disabling iptables service.

systemctl disable iptables-services firewalld
systemctl stop iptables-services firewalld

Configure kubernetes on  fed-master:

Edit etc/kubernetes/apiserver

KUBE_API_ADDRESS="--address=0.0.0.0"

KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:4001"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_API_ARGS=""

Edit /etc/etcd/etcd.conf

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:4001"

Create /var/run/kubernetes on master:

mkdir /var/run/kubernetes
chown kube:kube /var/run/kubernetes
chmod 750 /var/run/kubernetes

Now lets start the services:

systemctl restart etcd
systemctl restart kube-apiserver
systemctl restart kube-controller-manager
systemctl restart kube-scheduler

Create following node.json file on Kubernetes master:

{
    "apiVersion": "v1",
    "kind": "Node",
    "metadata": {
        "name": "fed-node",
        "labels":{ "name": "fed-node-label"}
    },
    "spec": {
        "externalID": "fed-node"
    }
# create the fed-node over cluster
kubectl create -f ./node.json

the above node.json file illustrates the fed-node structure, it does not run the node so you will get unknown status as shown below:

$ kubectl get nodes
NAME                LABELS              STATUS
fed-node           name=fed-node-label     Unknown

Now configure the kubelet on the fed-node:

Edit /etc/kubernetes/kubelet

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_HOSTNAME="--hostname-override=fed-node"

KUBELET_API_SERVER="--api-servers=http://fed-master:8080"

#KUBELET_ARGS=""

Start the services on host2(fed-node):

systemctl restart kube-proxy
systemctl restart kubelet
systemctl restart docker

That's it to check whether the node is up and ready execute:

$ kubectl get nodes
NAME                LABELS              STATUS
fed-node          name=fed-node-label     Ready

Subscribe To our news letter

Subscribe to our news letter to receive latest blog posts into your inbox. Please fill your email address in the below form.
*We don't provide your email contact details to any third parties
Latest Comments
Related Articles
How to create Custom User Model in Django? Chaitanya Kattineni

Django provides built in authentication which is good for most of the cases, but you may have needs that are being served with the existing ...

Continue Reading...
Vim for Python Web Development Ashwin Kumar

Having a good environment setup is important for effective, fast and easy coding. We have different IDE's like eclipse, pycharm, sublime etc.. which are powerful ...

Continue Reading...
Dynamic Models in Django-Part1 (adding new fields to models from admin) Siva Chittamuru

Some times in the production level there may be a chance of adding new fields to our model.With the normal django models when we add ...

Continue Reading...