Skip to content

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