From 820fcca9acc10845506f777e8df70391c602dd09 Mon Sep 17 00:00:00 2001 From: Markus Opolka Date: Thu, 21 Jul 2022 15:05:24 +0200 Subject: [PATCH] Add simple Kubernetes example --- examples/README.md | 1 + examples/kubernetes-simple/README.md | 51 +++++++++++++ examples/kubernetes-simple/deployment.yaml | 84 ++++++++++++++++++++++ 3 files changed, 136 insertions(+) create mode 100644 examples/kubernetes-simple/README.md create mode 100644 examples/kubernetes-simple/deployment.yaml diff --git a/examples/README.md b/examples/README.md index d75ad03..a2484f3 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,3 +2,4 @@ - [Nginx simple reverse proxy example](./nginx-simple) - [Nginx reverse proxy example with defined location directive (different context path)](./nginx-contextpath) +- [Kubernetes simple deployment](./kubernetes-simple) diff --git a/examples/kubernetes-simple/README.md b/examples/kubernetes-simple/README.md new file mode 100644 index 0000000..aed252a --- /dev/null +++ b/examples/kubernetes-simple/README.md @@ -0,0 +1,51 @@ +# PlantUML Kubernetes Deployment + +In this example, PlantUML is deployed on an Kubernetes cluster using a `Deployment`, a `Service` and an `Ingress`. + +## Quick start + +Install: + +```bash +# Hint: Adjust the Ingress host to your URL + +kubectl create ns plantuml +kubectl -n plantuml apply -f deployment.yaml +``` + +Uninstall: + +```bash +kubectl -n plantuml delete -f deployment.yaml +kubectl delete ns plantuml +``` + +## TLS configuration + +Create a TLS `Secret` and extend the `Ingress` spec with a TLS configuration: + +```bash +[...] + tls: + - hosts: + - plantuml-example.localhost + secretName: plantuml-tls +``` + +Since the `Ingress Controller` terminates the TLS and routes `http` to the application, we might need to tell the application explicitly that it got a forwarded request. + +This configuration changes depending on the `Ingress Controller`. Here an nginx example: + +``` +annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/configuration-snippet: | + more_set_headers "X-Forwarded-Proto: https"; +``` + +## Useful commands + +```bash +# see whats going on inside your Deployment +kubectl -n plantuml logs -l "app.kubernetes.io/name=plantuml" +``` diff --git a/examples/kubernetes-simple/deployment.yaml b/examples/kubernetes-simple/deployment.yaml new file mode 100644 index 0000000..f0c2d04 --- /dev/null +++ b/examples/kubernetes-simple/deployment.yaml @@ -0,0 +1,84 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: plantuml + labels: + app.kubernetes.io/name: plantuml + app.kubernetes.io/instance: plantuml +spec: + replicas: 3 # Can be adjusted + selector: + matchLabels: + app.kubernetes.io/name: plantuml + app.kubernetes.io/instance: plantuml + template: + metadata: + labels: + app.kubernetes.io/name: plantuml + app.kubernetes.io/instance: plantuml + spec: + containers: + - name: plantuml + securityContext: + allowPrivilegeEscalation: false + image: plantuml/plantuml-server:jetty-v1.2022.6 + imagePullPolicy: Always + # env: # In case of different base URL + # - name: BASE_URL + # value: plantuml + ports: + - name: http + containerPort: 8080 + protocol: TCP + livenessProbe: + tcpSocket: + port: http + readinessProbe: + tcpSocket: + port: http + resources: + limits: + cpu: 500m + memory: 2048Mi + requests: + cpu: 250m + memory: 1024Mi +--- +apiVersion: v1 +kind: Service +metadata: + name: plantuml + labels: + app.kubernetes.io/name: plantuml + app.kubernetes.io/instance: plantuml +spec: + type: ClusterIP + ports: + - port: 80 + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: plantuml + app.kubernetes.io/instance: plantuml +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: plantuml + labels: + app.kubernetes.io/name: plantuml + app.kubernetes.io/instance: plantuml +spec: + rules: + - host: plantuml-example.localhost + http: + paths: + - backend: + service: + name: plantuml + port: + number: 80 + path: / + pathType: Prefix