KubeCon EU 2016: Scaling Open edX with Kubernetes

23
Scaling Open edX with Kubernetes KubeCon London 2016.03.10 Morgan Robertson

Transcript of KubeCon EU 2016: Scaling Open edX with Kubernetes

Page 1: KubeCon EU 2016: Scaling Open edX with Kubernetes

Scaling Open edX with KubernetesKubeCon London2016.03.10Morgan Robertson

Page 2: KubeCon EU 2016: Scaling Open edX with Kubernetes

Hi, I’m Morgan

Page 3: KubeCon EU 2016: Scaling Open edX with Kubernetes

What we’ll cover

● Introducing Open edX

● The problem: Walled gardens

● The solution: Open edX SaaS

● Open edX on Kubernetes

● Lessons learned

Page 4: KubeCon EU 2016: Scaling Open edX with Kubernetes

Introducing Open edX

Page 5: KubeCon EU 2016: Scaling Open edX with Kubernetes

Technical components

LMS/CMS (Django/Python)

Forum (Sinatra/Ruby)

User DB (MySQL)

Course DB (Mongo)

Tasks (Celery/RabbitMQ)

Caching (Memcache)

Proxy (Nginx)

Search (ElasticSearch)

Mapreduce (Hadoop)

Page 6: KubeCon EU 2016: Scaling Open edX with Kubernetes
Page 7: KubeCon EU 2016: Scaling Open edX with Kubernetes

The walled garden

Page 8: KubeCon EU 2016: Scaling Open edX with Kubernetes

Open edX Testdrive

Page 9: KubeCon EU 2016: Scaling Open edX with Kubernetes

Individual deployments don’t scale!

● Inefficient use of resources

● Can’t demo advanced features

● Painful upgrade process

Page 10: KubeCon EU 2016: Scaling Open edX with Kubernetes

Open edX SaaS

AMC

Page 11: KubeCon EU 2016: Scaling Open edX with Kubernetes

Kubernetes vs. Docker Swarm & friends

Kubernetes Swarm Compose

Scheduling ✔ ✔

Service discovery ✔ ✅ ✅

Container scaling ✔ ✔

Health checking ✔

Secret management ✔

Rolling updates ✔

Page 12: KubeCon EU 2016: Scaling Open edX with Kubernetes

Kubernetes vs. Docker Swarm & friends

Kubernetes Swarm Compose Consul

Scheduling ✔ ✔

Service discovery ✔ ✅ ✅ ✔

Container scaling ✔ ✔

Health checking ✔ ✔

Secret management ✔

Rolling updates ✔

Page 13: KubeCon EU 2016: Scaling Open edX with Kubernetes
Page 14: KubeCon EU 2016: Scaling Open edX with Kubernetes

Containerizing Open edX

edxapp

forum

Page 15: KubeCon EU 2016: Scaling Open edX with Kubernetes

Building images

FROM phusion/baseimage:0.9.15

# Clone the configuration repoRUN git clone https://github.com/appsembler/configuration.git \ /tmp/configuration

# Run AnsibleWORKDIR /tmp/configuration/playbooksRUN ansible-playbook -vvv -i 127.0.0.1, -c local forum.yml

CMD ["/sbin/my_init"]

Page 16: KubeCon EU 2016: Scaling Open edX with Kubernetes

Open edX on Kubernetes

Page 17: KubeCon EU 2016: Scaling Open edX with Kubernetes

Persistence: Mongo and MySQL

● Mongo replica set on VMs

● Google Cloud SQL

● Kubernetes services can abstract non-Pod backends

Page 18: KubeCon EU 2016: Scaling Open edX with Kubernetes

Using Endpoints for non-Pod backends# mongodb-endpoint.ymlapiVersion: v1kind: Endpointsmetadata: name: mongodbsubsets: - addresses: - ip: 10.240.0.3 - ip: 10.240.0.4 - ip: 10.240.0.5 ports: - name: mongodb port: 27017

# mongodb-service.ymlapiVersion: v1kind: Servicemetadata: name: mongodb labels: name: mongodbspec: clusterIP: None ports: - name: mongodb port: 27017

Page 19: KubeCon EU 2016: Scaling Open edX with Kubernetes

Initialization tasks using Jobs

# Create users and DBs in MySQLapiVersion: extensions/v1beta1kind: Jobmetadata: name: mysql-initspec: template: metadata: labels: name: mysql-init spec: containers: - name: mysql-init image: gcr.io/appsemblerx/mysql-init restartPolicy: OnFailure

● One-time tasks

● Batch tasks

● Run until success

Page 20: KubeCon EU 2016: Scaling Open edX with Kubernetes

Secrets

$ base64 secret.json

ewogICAgInNlY3JldCI6ICJteSBzZWNyZXQiCn0K

Kubernetes API

Pod 1secret. json

Pod 2secret. json

Page 21: KubeCon EU 2016: Scaling Open edX with Kubernetes

Google Cloud Monitoring

Page 22: KubeCon EU 2016: Scaling Open edX with Kubernetes

Lessons learned

● Containerizing an existing application can be difficult● Once containerized, deploying on Kubernetes is

generally straightforward● Not everything must be containerized to use

Kubernetes

Page 23: KubeCon EU 2016: Scaling Open edX with Kubernetes

Thank you for your time!