full stateless deployment
Aqui temos um serviço stateless com:
- namespace
- configmap
- secrets
- deployment
- service
- ingress
Tudo no mesmo manifesto yaml.
kind: Namespace
apiVersion: v1
metadata:
name: ${K8S_NAMESPACE}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: backend-config
namespace: ${K8S_NAMESPACE}
data:
adm_email: ${BOLHA_ADM_EMAIL}
app_api_url: ${BOLHA_APP_API_URL}
app_web_url: ${BOLHA_APP_WEB_URL}
storage_driver: ${BOLHA_STORAGE_DRIVER}
environment: ${BOLHA_ENVIRONMENT}
---
apiVersion: v1
kind: Secret
metadata:
name: backend-secrets
namespace: ${K8S_NAMESPACE}
type: Opaque
stringData:
jwt_secret: ${BOLHA_JWT_SECRET}
adm_password: ${BOLHA_ADM_PASSWORD}
database_url: ${BOLHA_DATABASE_URL}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: BOLHA-backend
namespace: ${K8S_NAMESPACE}
spec:
replicas: 1
revisionHistoryLimit: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
selector:
matchLabels:
app: ${K8S_APP_NAME}
template:
metadata:
labels:
app: ${K8S_APP_NAME}
spec:
containers:
- image: ${IMAGE_URL}:latest
imagePullPolicy: Always
name: ${K8S_APP_NAME}
ports:
- name: http
containerPort: 3333
protocol: TCP
resources:
requests:
memory: 500Mi
cpu: 10m
limits:
memory: 600Mi
cpu: 1000m
env:
- name: TZ
value: America/Sao_Paulo
- name: ADM_EMAIL
valueFrom:
configMapKeyRef:
name: backend-config
key: adm_email
- name: APP_API_URL
valueFrom:
configMapKeyRef:
name: backend-config
key: app_api_url
- name: APP_WEB_URL
valueFrom:
configMapKeyRef:
name: backend-config
key: app_web_url
- name: STORAGE_DRIVER
valueFrom:
configMapKeyRef:
name: backend-config
key: storage_driver
- name: ADM_PASSWORD
valueFrom:
secretKeyRef:
name: backend-secrets
key: adm_password
- name: JWT_SECRET
valueFrom:
secretKeyRef:
name: backend-secrets
key: jwt_secret
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: backend-secrets
key: database_url
imagePullSecrets:
- name: ${K8S_IMAGEPULLSECRET}
---
apiVersion: v1
kind: Service
metadata:
name: service-BOLHA-backend
namespace: ${K8S_NAMESPACE}
spec:
selector:
app: ${K8S_APP_NAME}
ports:
- name: http
protocol: TCP
port: 80
targetPort: 3333
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-BOLHA-backend
namespace: ${K8S_NAMESPACE}
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-cloudflare-prod"
kubernetes.io/ingress.class: "nginx"
spec:
ingressClassName: nginx
rules:
- host: ${BOLHA_INGRESS_HOST}
http:
paths:
- path: /
backend:
service:
name: service-BOLHA-backend
port:
number: 80
pathType: Prefix
tls:
- hosts:
- ${BOLHA_INGRESS_HOST}
secretName: backend-BOLHA-lets-prod