How to set up a Digital Ocean Kubernetes cluster

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: ```bash Internet[Browser => DigitalOcean LoadBalancer] => Kubernetes[Ingress => Service => Deployment => Pod] => Docker[Container] ``` - https://kubernetes.io/docs/concepts/services-networking/ingress/ - https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/ - https://kubernetes.io/docs/concepts/services-networking/service/ - https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ - https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/ - https://kubernetes.io/docs/concepts/workloads/pods/pod/ ## Prerequisites - Install kubectl ```bash $ brew install kubectl ``` 1. Create cluster in DigitalOcean dashboard Download the cluster configuration (YAML file) and put it in the ~/.kube folder. 3. Set KUBECONFIG environment variable ```bash $ export KUBECONFIG=/Users/christian/.kube/staging-kubeconfig.yaml $ kubectl config current-context $ kubectl get nodes NAME STATUS ROLES AGE VERSION xxx-staging-qv72 Ready 70m v1.14.1 xxx-staging-qv7p Ready 71m v1.14.1 xxx-staging-qv7s Ready 71m v1.14.1 ``` 4. Install ingress controller ```bash $ 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: ```bash $ kubectl get services --namespace=ingress-nginx ``` 5. Create ingress resource ingress.yaml: ```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 ``` ```bash $ kubectl apply -f ingress.yml ``` 6. Create deployment deployment.yaml: ```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 ``` ```bash $ kubectl apply -f deployment.yml ``` 7. Curl your app ```bash curl https:// --insecure ``` ## References - https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nginx-ingress-with-cert-manager-on-digitalocean-kubernetes?comment=76348#step-2-%E2%80%94-setting-up-the-kubernetes-nginx-ingress-controller