kubernetes for mac

If you just awoke from a few months worth of slumber (three months to be exact), this might be a bit of a shocker — Kubernetes? On Docker?

So, yes — last October Docker announced at DockerCon Europe that future EE versions are going to support Kubernetes integration.

This has been somewhat of a big topic for debate in the world of containers and orchestration, and for good reason. Since Docker offers an orchestration tool of its own, Docker Swarm, this move has given rise to article titles such as “Docker give into the inevitable” or “Kubernetes has won”.

While one can argue about the unequivocal tone used in these titles, there is little doubt that 2017 was a watershed year for Kubernetes, and in many ways for Docker as well. The announcement signified a major strategic decision by Docker, and it was followed up by the release of Docker for Mac with Kubernetes a few weeks ago.

What does this release mean?

Well, you can now build their containerized applications and deploy them to Kubernetes, locally and on the same Docker instance. As part of the deal, you get a single-node Kubernetes cluster using the latest version of Docker as the container runtime, and the ability to deploy to Kubernetes using Docker Compose or Kubernetes manifest files.

This article reviews this new release and takes you through some steps to get a simple demo application running–and yes, there is some logging  involved as well.

Downloading and installing Docker for Mac

For now, Kubernetes is only available on Docker for Mac 17.12 CE Edge (special Docker version for new and experimental features), so make sure you install the Edge version.

On your Mac, double-click the Docker.dmg file and begin the installation process as instructed.

This process takes a few minutes, at the end of which Docker is installed and launched. You will also see the little Docker whale icon appear at the top of your Mac’s screen.  Open your terminal and enter the docker info command to verify.

Kubernetes is not enabled by default. To enable it, click on the Docker icon, go to Preferences | Kubernetes, select the Enable Kubernetes checkbox and hit Apply.

After a few minutes, Kubernetes will be enabled, as reflected by the green statuses at the bottom of the preferences dialog.

Kubernetes

Exploring our Kubernetes installation

Let’s enter some kubectl commands to find out more about the installation.

We’ll start with:

Next, let’s find out about the single-node cluster:

And:

For management purposes, I’m also going to install the Kubernetes dashboard:

Since the dashboard pod is deployed under the kube-system namespace, I’m going to use the following command to see the pod:

Next, I’m going to configure port forwarding for the pod (be sure to change the name in the command):

We can now access the dashboard at https://localhost:8443 (just skip the warning messages that are displayed).

Deploying a demo application to Kubernetes

It’s time to deploy a demo application. I will use the demo application used for the announcement at DockerCon Europe, which includes three containers — a Postgres database, a Java REST API for reading from the database and a simple Go app that calls the API to build cute sentences.

To deploy, we’re first going to clone the app:

We are then going to use Docker Compose to build the project:

This will take a few minutes, but once done, all we have to do to deploy to our Kubernetes cluster is use the supplied manifest:

Let’s review the deployed services:

We can now browse to http://localhost:8081 to see the beautiful app in action in our browser:

blocks

The Kubernetes management dashboard will now show the relevant information about the deployment:

workload

Adding logging into the mix

You didn’t think I would end this article without mentioning logging, did you? Let’s take a look at a simple way to hook up our newly installed Kubernetes with Logz.io for a simple logging workflow (feel free to skip to the summary if logging is of no interest).

To do this, we will use the Docker log collector created by Logz.io. This lightweight Docker container will ship container logs, as well as Docker stats and daemon events. In production, you will need to use it per cluster node, but in our case we only have one node so it’s an easy and quick fix.

Create a manifest file, and use the following example (insert your Logz.io token where relevant):

Create the manifest:

Within a few seconds, the container will be running under the kube-system namespace:

logz.io

Endnotes

More than anything, the main benefit of this release is making Kubernetes more accessible. The installation and setup process is seamless. In just a few minutes, you can have a Kubernetes cluster, albeit consisting of a single node, up and running in your local dev environment. With all due respect to Minikube, Docker for Mac with Kubernetes is probably one of the easiest ways to set up a Kubernetes dev environment.

It will be interesting to see where Docker takes this in 2018. What will happen to Docker Swarm? There are still plenty of Swarm users out there. The ability to deploy Docker stacks to Kubernetes will help those contemplating a migration from Swarm but might also hasten its demise. Will Docker work on a tighter Kubernetes integration in CE/EE?

And one last note — be sure to have the charger for your Mac handy.

Enjoy!

Now that you've successfully installed Docker for Mac with Kubernetes, use Logz.io's Docker Log Collector to ship your container logs.