Kubernetes (commonly abbreviated as K8s) is an open-source platform for container orchestration that we use extensively at Shipyard. It automates many of the tasks involved in maintaining a container-based app, such as deploying, scaling, load-balancing, and auto-scaling.
Kubernetes Done Wrong
Kubernetes is a major asset for modern container management and has streamlined deployment for thousands of companies. However, it is infamous for its steep learning curve. Simply put, Kubernetes is difficult to get right.
That being said, if you’re a developer trying to learn and navigate the Kubernetes iceberg, you’re in luck; there are an abundance of open-source resources to help start your K8s journey on the right foot.
Kubernetes Done Right
Although it may be tempting to take shortcuts when working with K8s, keep in mind that proper K8s will:
- reduce your cloud costs by scaling your clusters efficiently
- simplify the different engineering processes for your team (eg. development, testing, and releasing)
- minimize security issues, such as cross-container communication
- shape how traffic moves through infrastructure
- prevent resource-hungry services from disrupting each other
Your Kubernetes Journey
While it is true that learning Kubernetes is a long, involved process, it’s also true that everyone has to start somewhere. In just 2-3 days, you can deploy and manage containers with Kubernetes, either locally or in the cloud. This will be a high-level guide, but we’ll provide plenty of links that delve deeper into these topics.
Before we begin..
You’ll want to download and install kubectl, the main command used to interact with your cluster.
Day 0: Local cluster
Setting up a local K8s cluster is a good way to get comfortable with basic operations and concepts.
If you want to start from ground zero, minikube is a great option. With minikube, you can quickly and easily set up a local K8s cluster through the command line. Here’s an interactive tutorial on creating your first cluster with minikube from the K8s documentation.
k3d is rapidly gaining momentum as a way of locally running k3s (a lightweight version of K8s). One of k3d’s most enticing features is that it allows you to create and manage your clusters in Docker (as opposed to through minikube, which runs in a virtual machine). Check out this starter repo for a sample k3d app.
Day 1: Deploying
The basic building blocks of Kubernetes are YAML files called manifests. These files tell Kubernetes what you want to create, and how you want to go about it.
Here’s a sample manifest for an nginx deployment:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
Once you want to deploy multiple copies of an application, maintaining several slightly different copies of a manifest can be difficult.
This is where templating comes in. Using a templating tool, you can easily create and manage variations of an application, keeping certain values universal and changing others as needed. Helm is a comprehensive tool for cluster creation and release management.
Helm has also become the defacto K8s system for packaging whole applications. These bundles are called charts.
For example, you can use charts to install monitoring
services (metric collectors, a time series database, and dashboards)
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack
Day 2: Managing
Now you have a cluster deployed, but you want to know what’s going on.
The classic command-line tool kubectl is useful for overseeing your K8s clusters. You can get the state of any objects K8s is aware of, view live logs, and get a shell in your pods. A few useful, lesser known goodies are:
kubectl watch- see live events for your K8s objects
kubectl port-forward- ad-hoc port tunneling from localhost to a service in the cluster
kubectl proxy- create local proxy to kubernetes API
If you want to quickly log sets of pods at a time,
kubectl won’t really help there. For that, we have
Using stern, you can view logs across any specified (via regex) set of pods. It even shows logs for services that start and stop during execution.
For example, running
stern -n kube-system dns will show all the logs for any pods in the
kube-system namespace that contain the string “dns”.
k9s and Lens
As far as overview tools go, k9s and Lens are two sides of the same coin. Whichever one you choose really boils down to personal preference — both are full-featured and well-maintained.
If you like a terminal-based console, k9s is the essential dashboard for monitoring your existing K8s clusters. k9s hosts a selection of useful features, such as benchmarking and resource-allotment info.
If you prefer usability and clarity provided by a GUI, check out Lens. It provides an assortment of tools for general cluster overview, as well as others that allow you to dive into detailed configurations with a few clicks.
With the help of the tools listed, you’ll be well on your way to Kubernetes enlightenment.
If you’re looking to learn more, keep in mind that Kubernetes has a dedicated community of devs and users who are putting out new and informative docs, services, and tutorials every single day!
Thanks for reading, and good luck on your journey.