Dave Johnson on open web technologies, social software and Java
Just a quick note to say that I ditched Docker Swarm and now this rarely updated blog is powered by Kubernetes. Total overkill, I know. Like Roller itself, I did it as a learning exercise. I hope to blog more about what I learned by doing this. For now, here's a quick summary of what I've done so far.
Created a cluster
I created a 2-node Kubernetes cluster on Digital Ocean using some hand-crafted Ansible scripts that call
apt-get to install and
kubeadm to start Kubernetes. I considered using Typhoon to create the cluster, but I really wanted to learn how to install Kubernetes "from scratch".
Ran two Ingress Controllers
To avoid using Digital Ocean's $20/month load balancer I'm running an Nginx Ingress controller on each node, and pinning containers to nodes using labels and nodeSelectors. I had to borrow Nginx Controller setup files from the Typhoon project because I'm still kind of bewildered by Ingresses.
Deployed my containers
Next, I wrote Kubernetes YAML files for deploying my containers: a private Docker Registry, PostgreSQL and my custom Roller image. Getting the private registry working properly was the biggest challenge. I need private because I don't want to make my custom Roller image public. Next, I'll install Jenkins next for CI/CD of my custom Roller build via the Jenkins Kubernetes plugin.
Let me know if there are any aspects of this that you'd like to see covered in a blog entry, or suggestions for running the cluster without two Ingress Controllers. I've already got a post cooking about installing a TLS secured Docker Registry on Kubernetes.
version: '3.2' services: postgresql: image: "postgres:10.0" ports: - "5432:5432" deploy: resources: limits: memory: 50M volumes: - type: bind source: /var/lib/postgresql/data target: /var/lib/postgresql/data environment: - POSTGRES_USER=roller - POSTGRES_DB=rollerdb - POSTGRES_PASSWORD_FILE=/run/secrets/pg_passwd secrets: - source: db_passwd target: pg_passwd roller: image: "rwo:latest" ports: - "80:8080" depends_on: - postgresql deploy: resources: limits: memory: 800M volumes: - type: bind source: /var/lib/roller target: /var/lib/roller environment: - DB_HOST=postgresql - STORAGE_ROOT=/var/lib/roller - JAVA_OPTS="-Xmx700m" secrets: db_passwd: file: ./db_passwd.txtIt was a pain, but sometimes pain = gain and I learned a lot. I'm hoping the site will be a bit more stable now.