Я создаю API-интерфейс Python Flask с Celery, использующий CloudamQP для обработки задач для моих маршрутов API. Все это работает хорошо, но проблема связана с переменными окружения. На моей локальной машине все работает хорошо. Когда я развертываю свое приложение в кластере Kubernetes, контейнеры (один для flask-api, а другой для api-worker) не запускаются из-за того, что оба контейнера не могут читать переменные env. Я использовал подход с файлом секретов из документации kubernetes:
kubernetes обрабатывает секреты
файл env.yaml:
Код: Выделить всё
apiVersion: v1
kind: Secret
metadata:
name: my-secret
namespace: backend
type: Opaque
data:
APP_PORT:
JWT_KEY:
CLOUDAMQP_URL:
Код: Выделить всё
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
namespace: backend
spec:
replicas: 1
selector:
matchLabels:
app: api-server
template:
metadata:
labels:
app: api-server
spec:
containers:
- name: api-server
image: my-api:latest
resources:
requests:
cpu: "200m"
memory: "300Mi"
limits:
cpu: "300m"
memory: "600Mi"
envFrom:
- secretRef:
name: my-secret
ports:
- containerPort: 5000
- name: api-worker
image: api-worker:latest
resources:
requests:
cpu: "200m"
memory: "300Mi"
limits:
cpu: "300m"
memory: "600Mi"
envFrom:
- secretRef:
name: my-secret
---
apiVersion: v1
kind: Service
metadata:
name: api-server
namespace: backend
spec:
selector:
app: api-server
ports:
- protocol: TCP
port: 80
targetPort: 5000
ex:
Код: Выделить всё
from celery import Celery
import os
def create_celery_app():
broker_url = os.environ['CLOUDAMQP_URL']
celery = Celery('tasks', broker=broker_url, backend='rpc://')
celery.conf.broker_connection_retry_on_startup = True
return celery
celery = create_celery_app()
Подробнее здесь: https://stackoverflow.com/questions/765 ... -app-start