mirror of
https://github.com/ChristianLight/tutor.git
synced 2024-05-30 12:50:48 +00:00
728ef966dc
- 💥[Improvement] Upgrade Open edX to Koa - 💥 Setting changes: - The ``ACTIVATE_HTTPS`` setting was renamed to ``ENABLE_HTTPS``. - Other ``ACTIVATE_*`` variables were all renamed to ``RUN_*``. - The ``WEB_PROXY`` setting was removed and ``RUN_CADDY`` was added. - The ``NGINX_HTTPS_PORT`` setting is deprecated. - Architectural changes: - Use Caddy as a web proxy for automated SSL/TLS certificate generation: - Nginx no longer listens to port 443 for https traffic - The Caddy configuration file comes with a new ``caddyfile`` patch for much simpler SSL/TLS management. - Configuration files for web proxies are no longer provided. - Kubernetes deployment no longer requires setting up a custom Ingress resource or custom manager. - Gunicorn and Whitenoise are replaced by uwsgi: this increases boostrap performance and makes it no longer necessary to mount media folders in the Nginx container. - Replace memcached and rabbitmq by redis. - Additional features: - Make it possible to disable all plugins at once with ``plugins disable all``. - Add ``tutor k8s wait`` command to wait for a pod to become ready - Faster, more reliable static assets with local memory caching - Deprecation: proxy files for Apache and Nginx are no longer provided out of the box. - Removed plugin `{{ patch (...) }}` statements: - "https-create", "k8s-ingress-rules", "k8s-ingress-tls-hosts": these are no longer necessary. Instead, declare your app in the "caddyfile" patch. - "local-docker-compose-nginx-volumes": this patch was primarily used to serve media assets. The recommended is now to serve assets with uwsgi.
444 lines
11 KiB
YAML
444 lines
11 KiB
YAML
{% if RUN_CADDY %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: caddy
|
|
labels:
|
|
app.kubernetes.io/name: caddy
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: caddy
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: caddy
|
|
spec:
|
|
containers:
|
|
- name: caddy
|
|
image: {{ DOCKER_IMAGE_CADDY }}
|
|
volumeMounts:
|
|
- mountPath: /etc/caddy/
|
|
name: config
|
|
- mountPath: /data/
|
|
name: data
|
|
ports:
|
|
- containerPort: 80
|
|
- containerPort: 443
|
|
volumes:
|
|
- name: config
|
|
configMap:
|
|
name: caddy-config
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: caddy
|
|
{% endif %}
|
|
{% if RUN_CMS %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: cms
|
|
labels:
|
|
app.kubernetes.io/name: cms
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: cms
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: cms
|
|
spec:
|
|
containers:
|
|
- name: cms
|
|
image: {{ DOCKER_IMAGE_OPENEDX }}
|
|
env:
|
|
- name: SERVICE_VARIANT
|
|
value: cms
|
|
ports:
|
|
- containerPort: 8000
|
|
volumeMounts:
|
|
- mountPath: /openedx/edx-platform/lms/envs/tutor/
|
|
name: settings-lms
|
|
- mountPath: /openedx/edx-platform/cms/envs/tutor/
|
|
name: settings-cms
|
|
- mountPath: /openedx/config
|
|
name: config
|
|
resources:
|
|
requests:
|
|
memory: 2Gi
|
|
volumes:
|
|
- name: settings-lms
|
|
configMap:
|
|
name: openedx-settings-lms
|
|
- name: settings-cms
|
|
configMap:
|
|
name: openedx-settings-cms
|
|
- name: config
|
|
configMap:
|
|
name: openedx-config
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: cms-worker
|
|
labels:
|
|
app.kubernetes.io/name: cms-worker
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: cms-worker
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: cms-worker
|
|
spec:
|
|
containers:
|
|
- name: cms-worker
|
|
image: {{ DOCKER_IMAGE_OPENEDX }}
|
|
args: ["celery", "worker", "--app=cms.celery", "--loglevel=info", "--hostname=edx.cms.core.default.%%h", "--maxtasksperchild", "100", "--exclude-queues=edx.lms.core.default"]
|
|
env:
|
|
- name: SERVICE_VARIANT
|
|
value: cms
|
|
- name: C_FORCE_ROOT
|
|
value: "1"
|
|
volumeMounts:
|
|
- mountPath: /openedx/edx-platform/lms/envs/tutor/
|
|
name: settings-lms
|
|
- mountPath: /openedx/edx-platform/cms/envs/tutor/
|
|
name: settings-cms
|
|
- mountPath: /openedx/config
|
|
name: config
|
|
volumes:
|
|
- name: settings-lms
|
|
configMap:
|
|
name: openedx-settings-lms
|
|
- name: settings-cms
|
|
configMap:
|
|
name: openedx-settings-cms
|
|
- name: config
|
|
configMap:
|
|
name: openedx-config
|
|
{% endif %}
|
|
{% if RUN_FORUM %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: forum
|
|
labels:
|
|
app.kubernetes.io/name: forum
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: forum
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: forum
|
|
spec:
|
|
containers:
|
|
- name: forum
|
|
image: {{ DOCKER_IMAGE_FORUM }}
|
|
ports:
|
|
- containerPort: 4567
|
|
env:
|
|
- name: SEARCH_SERVER
|
|
value: "{{ ELASTICSEARCH_SCHEME }}://{{ ELASTICSEARCH_HOST }}:{{ ELASTICSEARCH_PORT }}"
|
|
- name: MONGODB_AUTH
|
|
value: "{% if MONGODB_USERNAME and MONGODB_PASSWORD %}{{ MONGODB_USERNAME}}:{{ MONGODB_PASSWORD }}@{% endif %}"
|
|
- name: MONGODB_HOST
|
|
value: "{{ MONGODB_HOST }}"
|
|
- name: MONGODB_PORT
|
|
value: "{{ MONGODB_PORT }}"
|
|
{% endif %}
|
|
{% if RUN_LMS %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: lms
|
|
labels:
|
|
app.kubernetes.io/name: lms
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: lms
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: lms
|
|
spec:
|
|
containers:
|
|
- name: lms
|
|
image: {{ DOCKER_IMAGE_OPENEDX }}
|
|
ports:
|
|
- containerPort: 8000
|
|
volumeMounts:
|
|
- mountPath: /openedx/edx-platform/lms/envs/tutor/
|
|
name: settings-lms
|
|
- mountPath: /openedx/edx-platform/cms/envs/tutor/
|
|
name: settings-cms
|
|
- mountPath: /openedx/config
|
|
name: config
|
|
resources:
|
|
requests:
|
|
memory: 2Gi
|
|
volumes:
|
|
- name: settings-lms
|
|
configMap:
|
|
name: openedx-settings-lms
|
|
- name: settings-cms
|
|
configMap:
|
|
name: openedx-settings-cms
|
|
- name: config
|
|
configMap:
|
|
name: openedx-config
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: lms-worker
|
|
labels:
|
|
app.kubernetes.io/name: lms-worker
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: lms-worker
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: lms-worker
|
|
spec:
|
|
containers:
|
|
- name: lms-worker
|
|
image: {{ DOCKER_IMAGE_OPENEDX }}
|
|
args: ["celery", "worker", "--app=cms.celery", "--loglevel=info", "--hostname=edx.lms.core.default.%%h", "--maxtasksperchild", "100", "--exclude-queues=edx.cms.core.default"]
|
|
env:
|
|
- name: SERVICE_VARIANT
|
|
value: lms
|
|
- name: C_FORCE_ROOT
|
|
value: "1"
|
|
volumeMounts:
|
|
- mountPath: /openedx/edx-platform/lms/envs/tutor/
|
|
name: settings-lms
|
|
- mountPath: /openedx/edx-platform/cms/envs/tutor/
|
|
name: settings-cms
|
|
- mountPath: /openedx/config
|
|
name: config
|
|
volumes:
|
|
- name: settings-lms
|
|
configMap:
|
|
name: openedx-settings-lms
|
|
- name: settings-cms
|
|
configMap:
|
|
name: openedx-settings-cms
|
|
- name: config
|
|
configMap:
|
|
name: openedx-config
|
|
{% endif %}
|
|
{% if RUN_ELASTICSEARCH %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: elasticsearch
|
|
labels:
|
|
app.kubernetes.io/name: elasticsearch
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: elasticsearch
|
|
strategy:
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: elasticsearch
|
|
spec:
|
|
containers:
|
|
- name: elasticsearch
|
|
image: {{ DOCKER_IMAGE_ELASTICSEARCH }}
|
|
env:
|
|
- name: ES_JAVA_OPTS
|
|
value: "-Xms1g -Xmx1g"
|
|
- name: "cluster.name"
|
|
value: openedx
|
|
- name: "bootstrap.memory_lock"
|
|
value: "true"
|
|
ports:
|
|
- containerPort: 9200
|
|
volumeMounts:
|
|
- mountPath: /usr/share/elasticsearch/data
|
|
name: data
|
|
volumes:
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: elasticsearch
|
|
{% endif %}
|
|
{% if RUN_MONGODB %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: mongodb
|
|
labels:
|
|
app.kubernetes.io/name: mongodb
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: mongodb
|
|
strategy:
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: mongodb
|
|
spec:
|
|
containers:
|
|
- name: mongodb
|
|
image: {{ DOCKER_IMAGE_MONGODB }}
|
|
args: ["mongod", "--smallfiles", "--nojournal", "--storageEngine", "wiredTiger"]
|
|
ports:
|
|
- containerPort: 27017
|
|
volumeMounts:
|
|
- mountPath: /data/db
|
|
name: data
|
|
|
|
volumes:
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: mongodb
|
|
{% endif %}
|
|
{% if RUN_MYSQL %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: mysql
|
|
labels:
|
|
app.kubernetes.io/name: mysql
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: mysql
|
|
strategy:
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: mysql
|
|
spec:
|
|
containers:
|
|
- name: mysql
|
|
image: {{ DOCKER_IMAGE_MYSQL }}
|
|
# Note the ignore-db-dir: this is because ext4 volumes are created with a lost+found directory in them, which causes mysql
|
|
# initialization to fail
|
|
args: ["mysqld", "--character-set-server=utf8", "--collation-server=utf8_general_ci", "--ignore-db-dir=lost+found"]
|
|
env:
|
|
- name: MYSQL_ROOT_PASSWORD
|
|
value: "{{ MYSQL_ROOT_PASSWORD }}"
|
|
ports:
|
|
- containerPort: 3306
|
|
volumeMounts:
|
|
- mountPath: /var/lib/mysql
|
|
name: data
|
|
volumes:
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: mysql
|
|
{% endif %}
|
|
{% if RUN_SMTP %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: smtp
|
|
labels:
|
|
app.kubernetes.io/name: smtp
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: smtp
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: smtp
|
|
spec:
|
|
containers:
|
|
- name: smtp
|
|
image: {{ DOCKER_IMAGE_SMTP }}
|
|
ports:
|
|
- containerPort: 25
|
|
{% endif %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: nginx
|
|
labels:
|
|
app.kubernetes.io/name: nginx
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: nginx
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: nginx
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: {{ DOCKER_IMAGE_NGINX }}
|
|
volumeMounts:
|
|
- mountPath: /etc/nginx/conf.d/
|
|
name: config
|
|
{{ patch("k8s-deployments-nginx-volume-mounts")|indent(12) }}
|
|
ports:
|
|
- containerPort: 80
|
|
volumes:
|
|
- name: config
|
|
configMap:
|
|
name: nginx-config
|
|
{{ patch("k8s-deployments-nginx-volumes")|indent(8) }}
|
|
{% if RUN_REDIS %}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: redis
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
selector:
|
|
matchLabels:
|
|
app.kubernetes.io/name: redis
|
|
strategy:
|
|
type: Recreate
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app.kubernetes.io/name: redis
|
|
spec:
|
|
containers:
|
|
- name: redis
|
|
image: {{ DOCKER_IMAGE_REDIS }}
|
|
ports:
|
|
- containerPort: {{ REDIS_PORT }}
|
|
volumeMounts:
|
|
- mountPath: /openedx/redis/config/
|
|
name: config
|
|
- mountPath: /openedx/redis/data
|
|
name: data
|
|
volumes:
|
|
- name: config
|
|
configMap:
|
|
name: redis-config
|
|
- name: data
|
|
persistentVolumeClaim:
|
|
claimName: redis
|
|
{% endif %}
|
|
{{ patch("k8s-deployments") }}
|