Kubernetes
Save money as it makes apps more resilient and performant with less human resources.
- Docker equates to shipping containers
- AWS, Azure, Google Cloud are similar are akin to shipping providers
- Kubernetes orchestrates containers into shipping providers
Benefits
Adoption of Kubernetes is accelerating, See CNCF Anual Survey for 2021
Multi-cloud capability
- Prevent lockin
- Productivity
- Open-source
- Battle-tested
- Self-documenting
Development Flow
Wiring up services and pods
Initial setup is a pain; but once you into the flow; it's easy
Load Balancer Service
Use to centralise communication to underlying microservices.
Install helm and then install ingress nginx
Ingress Nginx Documentation and install guide
Config Hosts
If you are unable to access the application you may have something already running on port 80, which is the default port for the ingress. You need to identify what is using this port and shut it down.
Add ingress domain name to the etc/hosts file.
To get around Not Secure click on browser and type thisisunsafe then hit enter
Leveraging Skaffold
Using skaffold to streamline kubernetes deployment
Create a yaml file in the root of the project repository configure to watch the infrastructure folder where all the kubernetes config files a located. Skaffold will watch for changes and automatically deploy the changes.
Sometimes changes to files don't get picked up correctly
HTTPS Load Balancer with TLS
Commands
Check what is running. Make sure Docker Desktop has the correct context.
kubectl get pods
Secrets
kubectl create secret generic jwt-secret --from-literal=JWT_KEY=areallybigsecret
kubectl get secrets
To debug when a pod does not start, for example if an unknown secret name is used.
kubectl get pods
kubectl describe pod <pod name>
Get ingress-nginx namespace and service for Next getInitialProps server requests
kubectl get namespace
kubectl get services -n ingress-nginx
Inspect a pod, by get pods then add name of pod to expect. sh is interactive shell
kubectl get pods
kubectl exec -it auth-depl-5bf5c586d5-kjjsm sh
// forwardsing
kubectl port-forward nats-depl-7b459c9dd-vlxzs 4222:4222
Access a Mongo DB
kubectl get pods
kubectl exec -it auth-depl-5bf5c586d5-kjjsm mongo
Using Secrets
kubectl create secret generic jwt-secret --from-literal=JWT_KEY=areallybigsecret
kubectl get secrets