WILT: Kubernetes

Looking into Kubernetes, some initial command preservation

Kubernetes, being able to orchestrate full deployments w' scaling etc. using YAML files - I remain a proponent of infrastructure-as-code in a human readable and version controllable fashion.

You need a kubectl command line tool to interact with kubernetes, and minikube is what I'm using to run local kubernetes. Grab them from Kubernetes Documentation / Tasks / Install tools.

My Wordpress Kube thing that runs on M1 (see below) is zipped and downloadable. It's based on the stateful example at Kubernetes.io Wordpress deploy example

Online references

Name URL Good for
Kubernetes Documentation https://kubernetes.io Really good at getting started. Nice collection of usable commands
bitnami/charts bitnami/charts/wordpress Kubernetes document recommends using this via helm to run a production ready Wordpress. To review
Package manager for Helm Helm Docs ...managing your deployed packages

Commands

Command Used for Example
minikube start Starting your local cluster
kubectl version Checking version of client and server - good to verify the server's running
kubectl get Get information on things kubectl get nodes - Show all nodes in the cluster
kubectl create deployment Create a deployment kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 - Deploy the Google sample application
kubectl describe Get details on primitives kubectl describe pods - Get pod information
kubectl logs Get logs for a pod kubectl logs $POD_NAME - Get the logs for pod $POD_NAME
kubectl expose Open ports that will direct traffic to services kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 - Expose a port 8080 for the kube, but we need to tie in the external port you can get it from!
kubectrl exec Running stuff in the container from outside kubectl exec --stdin --tty <container> -- /bin/bash - Get an interactive shell on the container
helm Automates a bunch of Kubernetes things, using Chart and Value files, among others See the Bitnami online reference above for a functioning use

Gotchas

M1

Mac's M1 ARM64 architecture gives Docker conniptions. Since my training repos are from Docker images, naturally things went to hell - out of the box tutorials using MySQL failed. Some searching found someone hosting arm64 compiled MySQL architectures so I could use those. Thanks, Jamiel Sharief.

Ports

You need to use expose to get an internal port assigned a kube port; then you can use that kube port to connect:

1kubectl expose deployment/[thing] --type="NodePort" --port 8080
2export NODE_PORT=$(kubectl get services/[service-name] -o go-template='{{(index .spec.ports 0).nodePort}}')
3curl $(minikube ip):$NODE_PORT