diff --git a/README.md b/README.md index aecc4f8b1..7801f22b5 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ docker-ubuntu-vnc-desktop is a Docker image to provide web VNC interface to acce - [Deploy to a subdirectory (relative url root)](#deploy-to-a-subdirectory-relative-url-root) - [Sound (Preview version and Linux only)](#sound-preview-version-and-linux-only) - [Generate Dockerfile from jinja template](#generate-dockerfile-from-jinja-template) +- [Kubernetes deployment](#kubernetes-deployment-for-ubuntu-desktop-lxde-vnc) - [Troubleshooting and FAQ](#troubleshooting-and-faq) - [License](#license) @@ -150,6 +151,60 @@ Dockerfile and configuration can be generated by template. Dockerfile and configuration are re-generate if they do not exist. Or you may force to re-generate by removing them with the command `make clean`. + +
+ +## Kubernetes deployment for ubuntu-desktop-lxde-vnc + +### Info +This is usefull when you need a "virtual machine" into your cluster, to work or play with another pods. +The deploy some env vars to customize your data (user and passwords) and has a configmpa where you can configure you supervisord conf. + + +### How to deploy + kubectl apply -f k8s-deployment.yaml + +### Output + namespace/docker-ubuntu-vnc-desktop created + service/external-service-docker-ubuntu-vnc-desktop created + service/internal-service-docker-ubuntu-vnc-desktop created + configmap/supervisord-config-file created + secret/secrets-docker-ubuntu-vnc-desktop created + deployment.apps/docker-ubuntu-vnc-desktop created + + + + +### Show deployment + kubectl -n docker-desktop-app get pod,svc,cm + + NAME READY STATUS RESTARTS AGE + pod/docker-desktop-app-575fcb7994-ccmtt 1/1 Running 0 95m + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service/external-service-docker-desktop-app LoadBalancer 10.10.10.10 xxxxx.elb.aws-region.amazonaws.com 6080:31627/TCP 95m + service/internal-service-docker-desktop-app ClusterIP 11.11.11.11 6080/TCP 95m + + NAME DATA AGE + configmap/supervisord-config-file 1 95m + + NAME TYPE DATA AGE + secret/secrets-docker-ubuntu-vnc-desktop Opaque 2 95m + + +
+
+ +
+ + + + +
+
+ + + ## Troubleshooting and FAQ 1. boot2docker connection issue, https://github.com/fcwu/docker-ubuntu-vnc-desktop/issues/2 diff --git a/kubernetes/README.md b/kubernetes/README.md new file mode 100644 index 000000000..8a61c84b1 --- /dev/null +++ b/kubernetes/README.md @@ -0,0 +1,46 @@ +# Kubernetes deployment for ubuntu-desktop-lxde-vnc + +### Info +This is usefull when you need a "virtual machine" into your cluster, to work or play with another pods. +The deploy some env vars to customize your data (user and passwords) and has a configmpa where you can configure you supervisord conf. + + +### How to deploy + kubectl apply -f k8s-deployment.yaml + +### Output + namespace/docker-ubuntu-vnc-desktop created + service/external-service-docker-ubuntu-vnc-desktop created + service/internal-service-docker-ubuntu-vnc-desktop created + configmap/supervisord-config-file created + secret/secrets-docker-ubuntu-vnc-desktop created + deployment.apps/docker-ubuntu-vnc-desktop created + + + + +### Show deployment + kubectl -n docker-desktop-app get pod,svc,cm + + NAME READY STATUS RESTARTS AGE + pod/docker-desktop-app-575fcb7994-ccmtt 1/1 Running 0 95m + + NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE + service/external-service-docker-desktop-app LoadBalancer 10.10.10.10 xxxxx.elb.aws-region.amazonaws.com 6080:31627/TCP 95m + service/internal-service-docker-desktop-app ClusterIP 11.11.11.11 6080/TCP 95m + + NAME DATA AGE + configmap/supervisord-config-file 1 95m + + NAME TYPE DATA AGE + secret/secrets-docker-ubuntu-vnc-desktop Opaque 2 95m + + +
+
+ +
+ + +### ToDo + Helm chart (pending...) diff --git a/kubernetes/example-aws.png b/kubernetes/example-aws.png new file mode 100644 index 000000000..be36fcf8e Binary files /dev/null and b/kubernetes/example-aws.png differ diff --git a/kubernetes/k8s-deployment.yaml b/kubernetes/k8s-deployment.yaml new file mode 100644 index 000000000..aaeffe862 --- /dev/null +++ b/kubernetes/k8s-deployment.yaml @@ -0,0 +1,193 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: docker-ubuntu-vnc-desktop + +--- +apiVersion: v1 +kind: Service +metadata: + namespace: docker-ubuntu-vnc-desktop + name: external-service-docker-ubuntu-vnc-desktop + annotations: + prometheus.io/scrape: 'true' + service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags: "environment=dev,owner=SRE,job=docker-ubuntu-vnc-desktop" + service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: "true" + service.beta.kubernetes.io/aws-load-balancer-type: nlb + service.beta.kubernetes.io/aws-load-balancer-healthcheck-healthy-threshold: "3" + service.beta.kubernetes.io/aws-load-balancer-healthcheck-unhealthy-threshold: "3" + service.beta.kubernetes.io/aws-load-balancer-healthcheck-interval: "10" + service.beta.kubernetes.io/aws-load-balancer-healthcheck-timeout: "10" + service.beta.kubernetes.io/aws-load-balancer-healthcheck-protocol: "TCP" + labels: + app: docker-ubuntu-vnc-desktop +spec: + type: LoadBalancer + ports: + - name: http + port: 6080 + targetPort: 80 + selector: + app: docker-ubuntu-vnc-desktop + +--- +apiVersion: v1 +kind: Service +metadata: + namespace: docker-ubuntu-vnc-desktop + name: internal-service-docker-ubuntu-vnc-desktop +spec: + selector: + app: docker-ubuntu-vnc-desktop + ports: + - protocol: TCP + port: 6080 + targetPort: 80 + + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + namespace: docker-ubuntu-vnc-desktop + name: supervisord-config-file +data: + supervisord.conf: |- + [supervisord] + redirect_stderr=true + stopsignal=QUIT + autorestart=true + directory=/root + # + [program:nginx] + priority=10 + command=nginx -c /etc/nginx/nginx.conf -g 'daemon off;' + # + [program:web] + priority=10 + directory=/usr/local/lib/web/backend + command=/usr/local/lib/web/backend/run.py + stdout_logfile=/dev/fd/1 + stdout_logfile_maxbytes=0 + stderr_logfile=/dev/fd/1 + stderr_logfile_maxbytes=0 + # + # + [group:x] + programs=xvfb,wm,lxpanel,pcmanfm,x11vnc,novnc + # + [program:wm] + priority=15 + command=/usr/bin/openbox + environment=DISPLAY=":1",HOME="/root",USER="root" + # + [program:lxpanel] + priority=15 + directory=/home/admin + command=/usr/bin/lxpanel --profile LXDE + user=admin + environment=DISPLAY=":1",HOME="/home/admin",USER="admin" + # + [program:pcmanfm] + priority=15 + directory=/home/admin + command=/usr/bin/pcmanfm --desktop --profile LXDE + user=admin + environment=DISPLAY=":1",HOME="/home/admin",USER="admin" + # + [program:xvfb] + priority=10 + command=/usr/local/bin/xvfb.sh + stopsignal=KILL + # + [program:x11vnc] + priority=20 + command=x11vnc -display :1 -xkb -forever -shared -repeat -capslock -rfbauth /.password2 + # + [program:novnc] + priority=25 + directory=/usr/local/lib/web/frontend/static/novnc + command=bash /usr/local/lib/web/frontend/static/novnc/utils/launch.sh --listen 6081 + stopasgroup=true + # + + + +--- +apiVersion: v1 +kind: Secret +metadata: + name: secrets-docker-ubuntu-vnc-desktop + namespace: docker-ubuntu-vnc-desktop +data: + username: YWRtaW4K # echo "admin"|base64 + password: c3VwZXJwYXNzd29yZAo= # echo "superpassword"|base64 + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: docker-ubuntu-vnc-desktop + namespace: docker-ubuntu-vnc-desktop + labels: + app: docker-ubuntu-vnc-desktop + annotations: + imageregistry: "public" + version: "v1" +spec: + replicas: 1 + selector: + matchLabels: + app: docker-ubuntu-vnc-desktop + template: + metadata: + labels: + app: docker-ubuntu-vnc-desktop + annotations: + imageregistry: "public" + version: "v1" + spec: + containers: + - name: docker-ubuntu-vnc-desktop-pod + image: dorowu/ubuntu-desktop-lxde-vnc + imagePullPolicy: IfNotPresent + env: + - name: RESOLUTION + value: "800x600" + - name: USER + valueFrom: + secretKeyRef: + name: secrets-docker-ubuntu-vnc-desktop + key: username + - name: VNC_PASSWORD + valueFrom: + secretKeyRef: + name: secrets-docker-ubuntu-vnc-desktop + key: password + - name: HTTP_PASSWORD + valueFrom: + secretKeyRef: + name: secrets-docker-ubuntu-vnc-desktop + key: password + - name: PASSWORD + valueFrom: + secretKeyRef: + name: secrets-docker-ubuntu-vnc-desktop + key: password + ports: + - containerPort: 80 + resources: + limits: + cpu: 512m + memory: 512Mi + requests: + cpu: 256m + memory: 256Mi + volumeMounts: + - name: config-file + mountPath: /etc/supervisor/conf.d/ + volumes: + - name: config-file + configMap: + name: supervisord-config-file