Рекомендуется использовать общедоступную поддерживаемую диаграмму Helm для установки Baserow на K8S.
Приведенный ниже пример конфигурационного файла K8S может служить отправной точкой для развертывания производственной версии Baserow.
Предполагается, что вы хотите наиболее производительную версию Baserow, поэтому развертываются отдельные службы wsgi и asgi, отдельные асинхронные задачи и т.д.
Также необходимо предоставить экземпляры Redis и PostgreSQL, настроенные с использованием приведенных ниже переменных окружения. Подробнее о настройке этих переменных см. в разделе Настройка Baserow.
Вы также должны настроить Baserow для использования совместимой с S3 службы хранения для загрузки и обслуживания файлов, загруженных пользователем.
# Секрет, содержащий все необходимые настройки Baserow.
apiVersion: v1
kind: Secret
metadata:
name: YOUR_ENV_SECRET_REF
type: Opaque
stringData:
SECRET_KEY: "TODO"
PRIVATE_BACKEND_URL: "http://backend-wsgi"
PUBLIC_BACKEND_URL: "TODO"
PUBLIC_WEB_FRONTEND_URL: "TODO"
DATABASE_HOST: "TODO"
DATABASE_USER: "TODO"
DATABASE_PASSWORD: "TODO"
DATABASE_PORT: "TODO"
DATABASE_NAME: "TODO"
REDIS_HOST: "TODO"
REDIS_PORT: "TODO"
REDIS_USER: "TODO"
REDIS_PASSWORD: "TODO"
REDIS_PROTOCOL: "TODO rediss или redis"
BASEROW_AMOUNT_OF_GUNICORN_WORKERS: "5"
# Рекомендуется использовать совместимое с S3 хранилище с K8S для корректной работы экспорта и хранения файлов
# Подробнее см. в документации https://baserow.io/docs/installation%2Fconfiguration#user-file-upload-configuration
AWS_ACCESS_KEY_ID: "TODO"
AWS_SECRET_ACCESS_KEY: "TODO"
AWS_STORAGE_BUCKET_NAME: "TODO"
# Пример контроллера входящего трафика, маршрутизирующего запросы на правильные службы
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: balancer
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
nginx.ingress.kubernetes.io/proxy-body-size: 20m
kubernetes.io/ingress.class: nginx
# удалены настройки SSL, добавьте свои желаемые настройки
spec:
# TODO блок TLS
rules:
- host: REPLACE_WITH_YOUR_BACKEND_HOST
http:
paths:
- pathType: Prefix
path: "/ws/"
backend:
service:
name: backend-asgi
port:
number: 80
- pathType: Prefix
path: "/"
backend:
service:
name: backend-wsgi
port:
number: 80
- host: REPLACE_WITH_YOUR_WEB_FRONTEND_HOST
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: web-frontend
port:
number: 80
---
apiVersion: v1
kind: Service
metadata:
name: backend-asgi
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8000
selector:
app: backend-asgi
---
apiVersion: v1
kind: Service
metadata:
name: backend-wsgi
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8000
selector:
app: backend-wsgi
---
apiVersion: v1
kind: Service
metadata:
name: web-frontend
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 3000
selector:
app: web-frontend
# Задний ASGI-работник, обрабатывающий веб-сокеты
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-asgi
labels:
app: backend-asgi
spec:
replicas: 2
selector:
matchLabels:
app: backend-asgi
template:
metadata:
labels:
app: backend-asgi
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- backend-asgi
topologyKey: "kubernetes.io/hostname"
containers:
- name: backend-asgi
image: baserow/backend:1.33.4
workingDir: /baserow
args:
- "gunicorn"
ports:
- containerPort: 8000
name: backend-asgi
imagePullPolicy: Always
readinessProbe:
exec:
command:
- curl
- --fail
- --silent
- http://localhost:8000/api/_health/
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
successThreshold: 1
envFrom:
- secretRef:
name: YOUR_ENV_SECRET_REF
imagePullSecrets:
- name: YOUR_PULL_SECRETS
# Задний WSGI-работник, обрабатывающий обычные HTTP-запросы API
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-wsgi
labels:
app: backend-wsgi
spec:
replicas: 2
selector:
matchLabels:
app: backend-wsgi
template:
metadata:
labels:
app: backend-wsgi
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- backend-wsgi
topologyKey: "kubernetes.io/hostname"
containers:
- name: backend-wsgi
image: baserow/backend:1.33.4
workingDir: /baserow
args:
- "gunicorn-wsgi"
- "--timeout"
- "60"
ports:
- containerPort: 8000
name: backend-wsgi
imagePullPolicy: Always
readinessProbe:
exec:
command:
- curl
- --fail
- --silent
- http://localhost:8000/api/_health/
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 5
successThreshold: 1
envFrom:
- secretRef:
name: YOUR_ENV_SECRET_REF
imagePullSecrets:
- name: YOUR_PULL_SECRETS
# Набор рабочих процессов Celery, обрабатывающих реальные события, очистку, асинхронные задачи и т.д.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend-worker
labels:
app: backend-worker
spec:
replicas: 2
selector:
matchLabels:
app: backend-worker
template:
metadata:
labels:
app: backend-worker
spec:
# Установите аффинности, чтобы различные реплики оказались на разных узлах.
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- backend-worker
topologyKey: "kubernetes.io/hostname"
containers:
- name: backend-worker
image: baserow/backend:1.33.4
args:
- "celery-worker"
imagePullPolicy: Always
readinessProbe:
exec:
command:
- /bin/bash
- -c
- /baserow/backend/docker/docker-entrypoint.sh celery-worker-healthcheck
initialDelaySeconds: 10
timeoutSeconds: 10
periodSeconds: 10
envFrom:
- secretRef:
name: YOUR_ENV_SECRET_REF
- name: backend-export-worker
image: baserow/backend:1.33.4
args:
- "celery-exportworker"
imagePullPolicy: Always
readinessProbe:
exec:
command:
- /bin/bash
- -c
- /baserow/backend/docker/docker-entrypoint.sh celery-exportworker-healthcheck
initialDelaySeconds: 10
timeoutSeconds: 10
periodSeconds: 10
envFrom:
- secretRef:
name: YOUR_ENV_SECRET_REF
- name: backend-beat-worker
image: baserow/backend:1.33.4
args:
- "celery-beat"
imagePullPolicy: Always
envFrom:
- secretRef:
name: YOUR_ENV_SECRET_REF
imagePullSecrets:
- name: YOUR_PULL_SECRETS
# Веб-фронтенд SSR-сервер, который рендерит начальную HTML/JS при посещении клиента.
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-frontend
labels:
app: web-frontend
spec:
replicas: 3
selector:
matchLabels:
app: web-frontend
template:
metadata:
labels:
app: web-frontend
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- web-frontend
topologyKey: "kubernetes.io/hostname"
containers:
- name: web-frontend
image: baserow/web-frontend:1.33.4
args:
- nuxt
ports:
- containerPort: 3000
name: web-frontend
imagePullPolicy: Always
readinessProbe:
httpGet:
path: /_health
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
envFrom:
- secretRef:
name: YOUR_ENV_SECRET_REF
imagePullSecrets:
- name: YOUR_PULL_SECRETS
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )