How to set up a Digital Ocean Kubernetes cluster (Q1 2019).
Introduction
Overview of how a request gets from a browser to a Docker container managed by Kubernetes:
Internet[Browser => DigitalOcean LoadBalancer] => Kubernetes[Ingress => Service => Deployment => Pod] => Docker[Container]
Prerequisites
$ brew install kubectl
- Create cluster in DigitalOcean dashboard
Download the cluster configuration (YAML file) and put it in the ~/.kube folder.
- Set KUBECONFIG environment variable
$ export KUBECONFIG=/Users/christian/.kube/staging-kubeconfig.yaml
$ kubectl config current-context
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
xxx-staging-qv72 Ready <none> 70m v1.14.1
xxx-staging-qv7p Ready <none> 71m v1.14.1
xxx-staging-qv7s Ready <none> 71m v1.14.1
- Install ingress controller
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml
Get the EXTERNAL-IP of the load balancer:
$ kubectl get services --namespace=ingress-nginx
- Create ingress resource
ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: app-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: app-service
servicePort: 80
$ kubectl apply -f ingress.yml
- Create deployment
deployment.yaml:
apiVersion: v1
kind: Service
metadata:
name: app-service
spec:
ports:
- port: 80
targetPort: 5678
selector:
app: app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
selector:
matchLabels:
app: app
replicas: 1
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: hashicorp/http-echo
args:
- "-text=Hello. This is your Digital Ocean k8s cluster."
ports:
- containerPort: 5678
$ kubectl apply -f deployment.yml
- Curl your app
curl https://<EXTERNAL-IP> --insecure
References