Kubernetes

Implementación y ejecución de un microservicio de Devprime en Kubernetes

Para publicar una imagen de contenedor en Kubernetes, debe tener una imagen pública en docker Hub o en repositorios como Azure Container Registry (ACR), Amazon Elastic Container Registry, Google Container Registry, Oracle Cloud Infrastructure Container Registry y otros.

Recomendamos una lectura en la documentación de docker que muestra cómo crear una imagen de docker y publicarla en un repositorio.

Creación de un archivo de implementación “deployment.yml”
El procedimiento estándar en Kubernetes es crear un archivo de implementación como “deployment.yml” e incluir el contenido siguiente modificando la configuración de la imagen. Los parámetros “env” que representan las variables de entorno.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
apiVersion : apps/v1
kind: Deployment
metadata:
  name: ms-order
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ms-order
  template:
    metadata:
      labels:
        app: ms-order
    spec:
      containers:
        - name: ms-order
          image: ms-order:latest
          imagePullPolicy: Always
          readinessProbe:  # Disponivel para receber trafego
            httpGet:
              path: /healthcheck #/healthz  # Endpoint que a sonda de prontidão deve verificar
              port: 80  # Porta em que o contêiner está escutando
            initialDelaySeconds: 30  # Tempo de espera inicial antes de iniciar as verificações
            periodSeconds: 10  # Frequência de verificação da prontidão
            timeoutSeconds: 1
            successThreshold: 1
            failureThreshold: 3
          livenessProbe:  # Disponivel para receber trafego
            httpGet:
              path: /healthcheck #/healthz  # Endpoint que a sonda de prontidão deve verificar
              port: 80  # Porta em que o contêiner está escutando
            initialDelaySeconds: 40  # Tempo de espera inicial antes de iniciar as verificações
            periodSeconds: 10 # Frequência de verificação da prontidão
            timeoutSeconds: 1 # How long to wait for a response
            successThreshold: 1 # Criterio para considerar sucesso
            failureThreshold: 3 # Number of failures to tolerate before restarting
            terminationGracePeriodSeconds: 90 # Override pod-level termination
          ports:
          - containerPort: 80
          env:
           - name: Devprime_app
             value: "license=Put your license|||debug=false|||debugstate=false|||debugstream=false|||debugweb=false|||showenviromentvariables=false|||tenancy=[enable=false,type=Shared,cache=State2,gateway=https://localhost:5003]"
           - name: Devprime_observability
             value: "enable=true|||saveinfile=false|||hidedetails=false|||hidedatetime=false|||showhttperrors=400"
           - name: Devprime_web
             value: "url=http://*:80|||enable=true|||enableswagger=true|||postsuccess=201|||postfailure=500|||getsuccess=200|||getfailure=500|||patchsuccess=200|||patchfailure=500|||putsuccess=200|||putfailure=500|||deletesuccess=200|||deletefailure=500"
           - name: Devprime_stream1
             value: "alias=Stream1|||enable=true|||default=true|||streamtype=RabbitMQ|||hostname=rabbitmq.default.svc|||user=guest|||password=guest|||port=5672|||exchange=Devprime|||exchangetype=direct|||retry=3|||fallback=State1"
           - name: Devprime_state1
             value: "alias=State1|||dbtype=mongodb|||connection=mongodb://mongoadmin:LltF8Nx*yo@mongodb.default.svc:27017|||timeout=5|||retry=2|||dbname=ms-order|||isssl=true|||numberofattempts=4|||durationofbreak=45"
           - name: Devprime_Custom
             value: "stream.orderevents=OrderEvents"
           - name: Devprime_Security
             value: ""
           - name: Devprime_Services
             value: "enable=true|||retry=3|||circuitbreak=45|||timeout=10|||connections=[clientid=your client id,clientsecret=your client secret,granttype=client_credentials,name=Services1,tokenuri=your token uri]"        

          resources:
            requests:
             memory: "75Mi"
             cpu: "1m"
            limits:
             memory: "130Mi"
             cpu: "150m"

Después de crear el archivo, simplemente ejecute apply.
kubectl apply -f .\deployment.yml

A continuación, sólo tienes que enumerar las vainas
kubectl get pods

NAME                        READY   STATUS    RESTARTS   AGE
ms-order-848cc9c6bf-sxkhr   1/1     Running   0          10m

Creación de un archivo de servicio “service.yml”
También crearemos un servicio para obtener una dirección IP pública para ese pod. Cree el archivo
—service.yml.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
apiVersion: v1
kind: Service
metadata:  
  name: ms-order
spec:
  selector:    
    app: ms-order
  type: LoadBalancer
  ports:  
  - name: http
    port: 80
    targetPort: 80

Ejecute apply para crear el servicio en Kubernetes
kubectl apply -f .\service.yml

Entonces todo lo que tienes que hacer es consultar y obtener la dirección IP.

NAME         TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
ms-order     LoadBalancer   10.0.146.208   20.85.248.63   80:30549/TCP   35m

Ahora todo lo que tienes que hacer es abrir tu aplicación en la dirección IP de la IP EXTERNA.

Exportación de las configuraciones a Kubernetes
Devprime ofrece un comando para exportar la configuración inicial desde el archivo de implementación y servicios. Cuando se ejecuta en la carpeta del proyecto, realiza todos los pasos iniciales.
dp export kubernetes

Devprime Kubernetes Microservices

Consideraciones
Hemos demostrado lo sencillo que es publicar un microservicio de Devprime en Kubernetes.

  • Utilizar un proceso y servicios de DevOps como AKS, GKE, EKS, OKE
  • Utilice los servicios de almacén para las credenciales.
Última modificación April 11, 2024 (cc33f7e6)