How to Install Kubernetes on CoreOS in Vagrant

install kubernetes coreos
Earlier we had an article about installing Kubernetes on CentOS and Ubuntu, and this time we go for CoreOS. CoreOS container Linux is an OS that uses containers for all applications you install to it, and does not have package manager like RPM or APT. Together with Ubuntu and CentOS it is one of popular platforms for deploying Kubernetes. We are going to set up Kubernetes on CoreOS with Vagrant.

Installing Dependencies

We need Virtual Box, Vagrant and Git as dependencies. So lets install them. I have fedora on my workstation so the command would be as follows:

 sudo dnf install VirtualBox vagrant git

For VirtualBox you would need to have the RMPfusion enabled. If you are using Ubuntu, you would type the following command

sudo apt install virtualbox vagrant git

Rest of this guide is distribution independent.

How to Install kubectl

On our local machine, we need to also install kubectl, to manage our cluster that will be created as set of VMs in Virtual Box. Use this command to get kubectl 1.5.2 which is newest version at the time of writing of this article.

curl -O https://storage.googleapis.com/kubernetes-release/release/v1.5.2/bin/linux/amd64/kubectl

Next we need to add executable bit for the kubectl binary we just downloaded

chmod +x kubectl

And then move it into some directory which is in the path

sudo mv kubectl /usr/local/bin/kubectl

Bringing up the cluster

Next lets clone the repository which has a Vagrantfile we need to start our cluster

git clone https://github.com/coreos/coreos-kubernetes.git

Next move to sub directory that contains Vagrantfile

cd coreos-kubernetes/multi-node/vagrant/

There we will need to use template (which is config.rb.sample) to create config.rb file that is read by vagrant when we bring up the cluster.

cp config.rb.sample config.rb

Now when we did that, lets edit it.

nano config.rb

In the file, we need to uncomment some lines

$update_channel="alpha"

$controller_count=1
#$controller_vm_memory=512

$worker_count=3
#$worker_vm_memory=1024

$etcd_count=1
#$etcd_vm_memory=512

If you need more resources for your application, feel free to uncomment all the lines and increase the sizes of RAM assigned. Be sure that your workstation has enough RAM, though.

After that, we are ready to bring up the cluster.

vagrant up --provider=virtualbox

This can take some time depending on the speed of your interment connection and I/O.  When it is done, we will need to set the context of kubectl to manage our cluster in the VMs

export KUBECONFIG="${KUBECONFIG}:$(pwd)/kubeconfig"

kubectl config use-context vagrant-multi

After this is done, you can look for nodes with following command

kubectl get nodes

kubectl get nodes

Note that on first attempt this command might not work. Instead, you might get an error saying that connection is refused and asking if you specified correct port number. That is because it takes time for Vagrant to boot and connect the cluster. Just wait several minutes and try again.

Deploying the application

Deploying applications to this newly created cluster is straightforward. We will use same sock shop application like we did for CentOS and Ubuntu.

kubectl create namespace sock-shop

Command above created a sock-shop namespace, and following command will get application installed:

kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"

Now we check pods

[miki@latitude-e5470 vagrant]$ kubectl get pods
No resources found.

What is this? No pods? Well off course there is no pods when we put them all into namespace called sock-shop. So this command will get you pods

kubectl get pods -n sock-shop

There is a lot of them and you might need to wait some time for them all to deploy.

Accessing the application in your browser

Application can be accessed from your workstation using any browser. For that, we need to know IP address of our master node and port that application uses. First we get with already known command

[miki@latitude-e5470 vagrant]$ kubectl get nodes
NAME STATUS AGE
172.17.4.101 Ready,SchedulingDisabled 3h
172.17.4.201 Ready 3h
172.17.4.202 Ready 3h
172.17.4.203 Ready 3h

First one is master, so address I am looking for is 172.17.4.101. To this address we also need to add port of front-end container.

[miki@latitude-e5470 vagrant]$ kubectl describe svc front-end -n sock-shop
Name: front-end
Namespace: sock-shop
Labels: name=front-end
Selector: name=front-end
Type: NodePort
IP: 10.3.0.163
Port: <unset> 80/TCP
NodePort: <unset> 30001/TCP
Endpoints: 10.2.38.8:8079
Session Affinity: None
No events.

It is port 30001 in my case. So the address we are looking for is http://172.17.4.101:30001

sock shop front page

How to Remove App from cluster

If you want to remove the application from the cluster, for example to make space for new application, that is also done pretty easily. You simply delete the namespace where we put the app. Like this

kubectl delete namespace sock-shop

If you want to remove entire cluster and free up your workstation's RAM for some new work, you do with following command

[miki@latitude-e5470 vagrant]$ vagrant destroy -f

Conclusion

We have successfully installed the Kubernetes on CoreOS with Vagrant, tried on the test app and cleaned up the environment. With did this now for top 3 operating systems used for Kubernetes deployments. Ubuntu, CentOS and in this article, CoreOS. Thank you for reading and have a nice day.

About Mihajlo Milenovic

Miki is a long time GNU/Linux user, Free Software advocate and a freelance system administrator from Serbia. Got introduced to GNU/Linux in year 2003 on old AMD Duron computer, and since than always eager to learn new stuff about this system. From 2016 writes for Linoxide to share his experiences with wider audience

Author Archive Page

Have anything to say?

Your email address will not be published. Required fields are marked *

All comments are subject to moderation.