340 lines
6.5 KiB
Markdown
340 lines
6.5 KiB
Markdown
# Cariflex EMS - Kubernetes Manifests
|
|
|
|
## Namespace
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: Namespace
|
|
metadata:
|
|
name: cariflex
|
|
labels:
|
|
app: cariflex-ems
|
|
environment: production
|
|
```
|
|
|
|
## ConfigMap
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: cariflex-config
|
|
namespace: cariflex
|
|
data:
|
|
# FlexMeasures
|
|
FM_ENV: "production"
|
|
FM_LOG_LEVEL: "WARNING"
|
|
FM_DB_HOST: "postgres-service"
|
|
FM_REDIS_HOST: "redis-service"
|
|
|
|
# OpenADR
|
|
VTN_ID: "Cariflex-VTN"
|
|
VEN_ID: "Cariflex-VEN"
|
|
VTN_PORT: "8080"
|
|
|
|
# CitrineOS
|
|
CITRINEOS_ENV: "production"
|
|
AMQP_HOST: "rabbitmq-service"
|
|
AMQP_PORT: "5672"
|
|
DB_HOST: "citrineos-postgres-service"
|
|
```
|
|
|
|
## Secrets
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: cariflex-secrets
|
|
namespace: cariflex
|
|
type: Opaque
|
|
stringData:
|
|
FM_SECRET_KEY: "${FM_SECRET_KEY}"
|
|
FM_DB_PASSWORD: "${FM_DB_PASSWORD}"
|
|
REDIS_PASSWORD: "${REDIS_PASSWORD}"
|
|
CITRINEOS_DB_PASSWORD: "${CITRINEOS_DB_PASSWORD}"
|
|
RABBITMQ_PASSWORD: "${RABBITMQ_PASSWORD}"
|
|
```
|
|
|
|
## FlexMeasures Deployment
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: flexmeasures-server
|
|
namespace: cariflex
|
|
spec:
|
|
replicas: 2
|
|
selector:
|
|
matchLabels:
|
|
app: flexmeasures-server
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: flexmeasures-server
|
|
spec:
|
|
containers:
|
|
- name: flexmeasures
|
|
image: lfenergy/flexmeasures:latest
|
|
ports:
|
|
- containerPort: 5000
|
|
envFrom:
|
|
- configMapRef:
|
|
name: cariflex-config
|
|
- secretRef:
|
|
name: cariflex-secrets
|
|
resources:
|
|
requests:
|
|
memory: "1Gi"
|
|
cpu: "500m"
|
|
limits:
|
|
memory: "2Gi"
|
|
cpu: "2"
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /api/v3_0/sensors
|
|
port: 5000
|
|
initialDelaySeconds: 30
|
|
periodSeconds: 30
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /api/v3_0/sensors
|
|
port: 5000
|
|
initialDelaySeconds: 10
|
|
periodSeconds: 10
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: flexmeasures-service
|
|
namespace: cariflex
|
|
spec:
|
|
selector:
|
|
app: flexmeasures-server
|
|
ports:
|
|
- port: 5000
|
|
targetPort: 5000
|
|
type: ClusterIP
|
|
```
|
|
|
|
## OpenADR VTN Deployment
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: openadr-vtn
|
|
namespace: cariflex
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: openadr-vtn
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: openadr-vtn
|
|
spec:
|
|
containers:
|
|
- name: vtn
|
|
image: flexmeasures-openadr-vtn:latest
|
|
ports:
|
|
- containerPort: 8080
|
|
envFrom:
|
|
- configMapRef:
|
|
name: cariflex-config
|
|
resources:
|
|
requests:
|
|
memory: "256Mi"
|
|
cpu: "100m"
|
|
limits:
|
|
memory: "512Mi"
|
|
cpu: "500m"
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: openadr-vtn-service
|
|
namespace: cariflex
|
|
spec:
|
|
selector:
|
|
app: openadr-vtn
|
|
ports:
|
|
- port: 8080
|
|
targetPort: 8080
|
|
type: ClusterIP
|
|
```
|
|
|
|
## OpenADR VEN Deployment
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: openadr-ven
|
|
namespace: cariflex
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: openadr-ven
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: openadr-ven
|
|
spec:
|
|
containers:
|
|
- name: ven
|
|
image: flexmeasures-openadr-ven:latest
|
|
env:
|
|
- name: VTN_URL
|
|
value: "http://openadr-vtn-service:8080/OpenADR2/Simple/2.0b"
|
|
- name: FM_HOST
|
|
value: "https://cariflex.digitribe.fr"
|
|
envFrom:
|
|
- configMapRef:
|
|
name: cariflex-config
|
|
- secretRef:
|
|
name: cariflex-secrets
|
|
resources:
|
|
requests:
|
|
memory: "256Mi"
|
|
cpu: "100m"
|
|
limits:
|
|
memory: "512Mi"
|
|
cpu: "500m"
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: openadr-ven-service
|
|
namespace: cariflex
|
|
spec:
|
|
selector:
|
|
app: openadr-ven
|
|
ports:
|
|
- port: 8080
|
|
type: ClusterIP
|
|
```
|
|
|
|
## CitrineOS Deployment
|
|
```yaml
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: citrineos-server
|
|
namespace: cariflex
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: citrineos-server
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: citrineos-server
|
|
spec:
|
|
containers:
|
|
- name: citrineos
|
|
image: ghcr.io/citrineos/citrineos-server:latest
|
|
ports:
|
|
- containerPort: 8080
|
|
envFrom:
|
|
- configMapRef:
|
|
name: cariflex-config
|
|
- secretRef:
|
|
name: cariflex-secrets
|
|
resources:
|
|
requests:
|
|
memory: "512Mi"
|
|
cpu: "250m"
|
|
limits:
|
|
memory: "1Gi"
|
|
cpu: "1"
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: citrineos-service
|
|
namespace: cariflex
|
|
spec:
|
|
selector:
|
|
app: citrineos-server
|
|
ports:
|
|
- port: 8080
|
|
targetPort: 8080
|
|
type: ClusterIP
|
|
```
|
|
|
|
## Ingress
|
|
```yaml
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: cariflex-ingress
|
|
namespace: cariflex
|
|
annotations:
|
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
|
spec:
|
|
tls:
|
|
- hosts:
|
|
- cariflex.digitribe.fr
|
|
- grafana.digitribe.fr
|
|
- citrineos.digitribe.fr
|
|
secretName: cariflex-tls
|
|
rules:
|
|
- host: cariflex.digitribe.fr
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: flexmeasures-service
|
|
port:
|
|
number: 5000
|
|
- host: grafana.digitribe.fr
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: grafana-service
|
|
port:
|
|
number: 3000
|
|
- host: citrineos.digitribe.fr
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: citrineos-service
|
|
port:
|
|
number: 8080
|
|
```
|
|
|
|
## Deployment Commands
|
|
```bash
|
|
# Create namespace
|
|
kubectl apply -f k8s/namespace.yaml
|
|
|
|
# Apply config and secrets
|
|
kubectl apply -f k8s/configmap.yaml
|
|
kubectl apply -f k8s/secrets.yaml
|
|
|
|
# Deploy applications
|
|
kubectl apply -f k8s/deployments/flexmeasures.yaml
|
|
kubectl apply -f k8s/deployments/openadr-vtn.yaml
|
|
kubectl apply -f k8s/deployments/openadr-ven.yaml
|
|
kubectl apply -f k8s/deployments/citrineos.yaml
|
|
|
|
# Apply services
|
|
kubectl apply -f k8s/services/
|
|
|
|
# Apply ingress
|
|
kubectl apply -f k8s/ingress.yaml
|
|
|
|
# Verify
|
|
kubectl get pods -n cariflex
|
|
kubectl get svc -n cariflex
|
|
kubectl get ingress -n cariflex
|
|
```
|