Join our Discord Server
Ajeet Raina Ajeet Singh Raina is a former Docker Captain, Community Leader and Distinguished Arm Ambassador. He is a founder of Collabnix blogging site and has authored more than 700+ blogs on Docker, Kubernetes and Cloud-Native Technology. He runs a community Slack of 9800+ members and discord server close to 2600+ members. You can follow him on Twitter(@ajeetsraina).

Getting Started with Multi-Node Kubernetes Cluster using LinuxKit

2 min read

Here’s a BIG news for the entire Container Community – “Kubernetes Support is coming to Docker Platform“. What does this mean? This means that developers and operators can now build apps with Docker and seamlessly test and deploy them using both Docker Swarm and Kubernetes. This announcement was made on the first day of Dockercon EU 2017 Copenhagen where Solomon Hykes, Founder of Docker invited Kubernetes Co-Founder  Tim Hockin on the stage for the first time. Tim welcomed the Docker family to the vibrant Kubernetes world. 

In case you missed out the news, here are the important takeaways from Docker-Kubernetes announcement –

  • Kubernetes support will be added to Docker Enterprise Edition for the first time.
  • Kubernetes support will be added optionally to Docker Community Edition for Mac and Windows.
  • Kubernetes and Docker Swarm both orchestrators will be available under Docker Platform.
  • Kubernetes integration will be made available under Moby projects too.

Docker Inc firmly believes that bringing Kubernetes to Docker will simplify and advance the management of Kubernetes for developers, enterprise IT and hackers to deliver the advanced capabilities of Docker to a broader set of applications.

 

 

In case you want to be first to test drive, click here to sign up and be notified when the beta is ready.

Please be aware that the beta program is expected to be ready at the end of 2017.

Can’t wait for beta program? Here’s a quick guide on how to get Multi-Node Kubernetes cluster up and running using LinuxKit.

Under this blog post, we will see how to build 5-Node Kubernetes Cluster using LinuxKit. Here’s the bonus – We will try to deploy WordPress application on top of Kubernetes Cluster. I will be building it on my macOS Sierra 10.12.6 system running the latest Docker for Mac 17.09.0 Community Edition up and running.

Pre-requisite:

  1. Ensure that the latest Docker release is up and running.

       2. Clone the LinuxKit repository:

 [simterm]

$sudo git clone https://github.com/ajeetraina/linuxkit

$cd projects/kubernetes/

[/simterm]

3. Execute the below script to build Kubernetes OS images using LinuxKit & Moby:

[simterm]

$sudo chmod +x script4k8s.sh

[/simterm]

All I have done is put all the manual steps under a script as shown below:

 

https://gist.github.com/ajeetraina/9e083e26273acea39ec170c439b0946e

 

This should build up Kubernetes OS image.

Run the below command to know the IP address of the kubelet container:

[simterm]

$ip adds show dev eth0

[/simterm]

 

You can check the list of tasks running as shown below:

Once this kubelet is ready, it’s time to login into it directly from a new terminal:

[simterm]

$sudo ./ssh_into_kubelet.sh 192.168.65.3

[/simterm]

So you have already SSH into the kubelet container rightly named “LinuxKit Kubernetes Project”.

We are going to mark it as “Master Node”.

Initializing the Kubernetes Master Node

Now it’s time to manually initialize master node with Kubeadm command as shown below:

[simterm]

$sudo kubeadm-init.sh

[/simterm]

Wait for few minutes till kubeadm command completes. Once done, you can use kubeadm join argument as shown below:

 

Your Kubernetes master node gets initialized successfully as shown below:

 

 

It’s time to run the below list of commands command to join the list of worker nodes:

[simterm]

$pwd

/Users/ajeetraina/linuxkit/projects/kubernetes

$sudo ./boot.sh 1 –token 4cec03.1a7ccb44115f427a 192.168.65.3:6443

$sudo ./boot.sh 2 –token 4cec03.1a7ccb44115f427a 192.168.65.3:6443

$sudo ./boot.sh 3 –token 4cec03.1a7ccb44115f427a 192.168.65.3:6443

$sudo ./boot.sh 4 –token 4cec03.1a7ccb44115f427a 192.168.65.3:6443

[/simterm]

 

It brings up 5-Node Kubernetes cluster as shown below:

 

Deploying WordPress Application on Kubernetes Cluster:

Let us try to deploy a WordPress application on top of this Kubernetes Cluster.

Head over to the below directory:

[simterm]

$cd linuxkit/projects/kubernetes/wordpress

[/simterm]

 

Creating a Persistent Volume

[simterm]

$kubectl create -f local-volumes.yaml

[/simterm]

The content of local-volumes.yml look like:


This creates 2 persistent volumes:

Verifying the volumes:

 

Creating a Secret for MySQL Password

[simterm]

kubectl create secret generic mysql-pass --from-literal=password=mysql123

[/simterm]

[simterm]

 

Verifying the secrets using the below command:

$kubectl get secrets

[/simterm]

 

Deploying MySQL:

[simterm]

$kubectl create -f mysql-deployment.yaml

[/simterm]

 

Verify that the Pod is running by running the following command:

[simterm]

$kubectl get pods

[/simterm]
 

Deploying WordPress:

[simterm]

$kubectl create -f wordpress-deployment.yaml

[/simterm]

By now, you should be able to access WordPress UI using the web browser.

Did you find this blog helpful?  Feel free to share your experience. Get in touch @ajeetsraina

If you are looking out for contribution/discussion, join me at Docker Community Slack Channel.

 

Have Queries? Join https://launchpass.com/collabnix

Ajeet Raina Ajeet Singh Raina is a former Docker Captain, Community Leader and Distinguished Arm Ambassador. He is a founder of Collabnix blogging site and has authored more than 700+ blogs on Docker, Kubernetes and Cloud-Native Technology. He runs a community Slack of 9800+ members and discord server close to 2600+ members. You can follow him on Twitter(@ajeetsraina).
Join our Discord Server
Index