Marcel Cremer | Tech, Digitalisation and Entrepreneurship
November 20, 2020

Lesson learned: Kubernetes basics

Posted on November 20, 2020
3 minutes  • 520 words

This week was pretty stuffed with daily business, so there was not too much new insight until friday: At the end of the week, I had a chat with my colleague about kubernetes, because I’m a noob here and didn’t get some of the basics.

Services are identified by it’s name (and namespace)

So this was a stupid one, which I couldn’t get my head around:

I pretty much knew, how to get stuff into kubernetes with Helm and so on, but then I didn’t get how the different pods speak with each other. The answer is, that every pod (or group of pods) is wrapped into a “service” by kubernetes automatically. In my imagination, these are like internal reverse proxies which group pods together. Those services can be addressed inside of kubernetes simply by calling the service name. So if you have e.g. a postgres database deployed under the name “pg”, you can tell your application to simply call

postgresql://pg:5432/<database>

There’s one exception: If you need to access services between different namespaces, you need to used <namespace>/<service> to make sure, that kubernetes knows what you’re targeting. So if your datbase is in the space “ops”, you can address it by

postgresql://ops/pg:5432/<database>

Ingress - the gate to the outside world

So the Ingress in Kubernetes is really a reverse proxy which bridges between the outside world and our kubernetes cluster. I knew, that we need to “configure” it, but not how exactly I can tell, which requests need to be routed where. First of all, I had a fundamental wrong understanding, because I thought there’s “the” Ingress that routes stuff. However, in kubernetes every application can have it’s own Ingress. So if you deploy 3 applications, it could be that every app has an own Ingress implementation with it’s own external IP. As we have some loadbalancers in front of our cluster, I just needed to deploy a new ingress which listens for the intended URL et voilá, it already worked.

Deploying Helm charts

Helm charts are pretty cool, because there are so many pre-defined templates which just need to be altered a bit to deploy stuff. What the documentation doesn’t tell you (or at least I wasn’t able to pick it up): How to deploy pre-existing charts? My attempts of my own always were like checking out the chart via github, alter it and try to deploy it somehow to kubernetes. However, this is not how it’s intended! 😁

So my new workflow is simple: I create a new folder with a yaml file (values.yml) that overwrites values defined by the chart. Which values can be overwritten is dependent on the chart and can be looked up in the documentation (e.g. the github repository).

Then I create 2 shell files that will allow me to deploy and to update the chart.

deploy.sh:

$ helm install --values values.yaml <target chart> --namespace <namespace> --name <service-name>

upgrade.sh

helm upgrade --install --values values.yaml <service-name> <target chart>

…and that’s it!

So basically one can deploy and maintain the helm application by creating three simple files. This is pretty awesome!

Have a nice weekend everyone!

Follow me

Ich arbeite an der Saas-Plattform MOBIKO, baue Teams auf und gebe manchmal Talks.