Repositorio de manifiestos¶
El repositorio de manifiesto es donde se encuentra toda la configuración de despliegue de nuestra aplicación.
Value.yaml¶
el archivo value.yaml
es el que debemos modificar en primera instancia. Tiene la siguiente pinta
#############################################################################
####################### Parametros para despliegue ########################
#############################################################################
## NOMBRE DE APLICACION: [nombre-de-app]
#############################################################################
##
## Variables y Secrets ######################################################
env:
# Definición de Variabless
normal:
# [key]:"[value]"
entorno: "qa"
redisHost: "10.20.0.10"
redisPort: "6379"
mysqlHost: "10.20.0.10"
mysqlPort: "3306"
apiURL: "{0}/api/Contratos/InformacionContratoPorNumeroDeEnvio/{1}?format=json"
# Definición de Secrets
secret:
mysqlUsername: "user1"
mysqlPassword: "password1"
redisUsername: "user2"
redisPassword: "password2"
apiToken: "akgladkfi14$235kas#dlvxzxs"
#############################################################################
##
## Grupo de aplicacion donde va a estar contenido ##########################
applicationGroup:
# Si esta o no contenido: true o false
group: true
# Nombre
partOf: "Bridge-MQ"
#############################################################################
##
## Revisiones y escalamiento horizontal #####################################
replicacontroller:
# Cantidad de revisiones: de 1 a 3
revisionHistoryLimit: 1
# Cantidad de instancias (Pods): de 1 a 10
replicas: 3
#############################################################################
##
## Red ######################################################################
service:
# Puerto del servicio: [port]
Port: 8080
# Puerto del contenedor: [port]
targetPort: 8080
##
# Formato estandar de ruta:
# [nombre-de-app]-[nombre-de-proyecto]-[ambiente].clusterFQDN
# Exponer en una ruta privada: true o false
route: true
#############################################################################
##
## Pruebas de lectura y vida ###############################################
healthcheck:
# Ejecutar prueba de lectura: true o false
readiness: false
# Path: "[path]"
readinesspath: "/index.html"
# Port: "[Port]"
readinessport: "8080"
# Type: HTTP
readinessscheme: HTTP
# Ejecutar prueba de vida: true o false
liveness: false
# Path: "[path]"
livenesspath: "/index.html"
# Port: "[Port]"
livenessport: "8080"
# Type: HTTP
livenessscheme: HTTP
#############################################################################
##
## Cronjobs ################################################################
cronjob:
enable: false
crons:
"0":
name: diario
schedule: "10 10 * * *"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
"1":
name: semanal
schedule: "10 10 * * 5"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
"2":
name: mensual
schedule: "10 10 5 * *"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
"3":
name: anual
schedule: "10 10 * 12 5"
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 1
#############################################################################
##
## Configmap ###############################################################
configMap:
enable: false
path: /home/redis-master
file: redis.conf
key: redis-config
map:
linea1: "uno \n dos"
#############################################################################
##
## Redireccion de Logs #####################################################
clusterlogging: true
#############################################################################
#############################################################################
Environment¶
env:
# Definición de Variabless
normal:
# [key]:"[value]"
entorno: "qa"
La configuración de variables de entorno de tipo normal se deben especificar el el espacio mencionado arriba, la estructura de las environment es KEY: VALUE. Este ejemplo se refleja en OCP de la siguiente manera:
Para los proyectos de .NET, ya que trabajamos con archivos de configuración json o yaml debemos convertir a environment de entorno que sean compatibles con Bash. Pueden profundizar en "Variables de entorno".
Ejemplo:
example:
key: value
array:
- keyArray: value
- value
Mapping:
example__key = value
example__array__0__keyArray = value
example__array__1 = value
ATENCIÓN: debemos cargar todas las variables de entorno que sean para configuración de nuestra app y que puedan modificar el comportamiento de la app. No debemos tener archivos de configuración para PROD o QA dentro de los repositorios de código, esto es por temas de seguridad y para evitar generar una nueva versión en caso de modificar la config
Importante: Utilizar entrecomillado con comillas dobles ("Valor") para todos los valores. No utilizar variables de entorno sin un valor establecido, o con un valor vacío ("").
Secrets¶
Desde el manifiesto podemos generar secrets de ocp
env:
secret:
DataAccessRegistry__ProviderName: System.Data.SqlClient
Esto se refleja en OCP de la siguiente manera...
Es recomendable que los datos sensibles (tokens, api keys, conexiones, etc) estén configurados de a través de Secrets. Si no se utilizan secrets, es importante dejar igualmente la sección, aunque no contenga ninguno.
Application Group¶
El Application Group es un agrupador de aplicaciones que ofrece OCP, no tiene un valor relevante para el despliegue pero si para mejorar la visibilidad de las aplicaciones en el namespace de OCP.
applicationGroup:
# Si esta o no contenido: true o false
group: true
# Nombre
partOf: "Bridge-MQ"
partOf
representa al nombre de application group.
En caso de tener muchas apps y aplication group nuestro namespace podría tener la siguiente pinta...
Actualmente esta función no está disponible en CICD, pero es una funcionalidad que se estará agregando pronto.
Replication Controller¶
El replication controller es el encargado de manejar la cantidad de réplicas levantadas que tenemos de nuestra app.
replicacontroller:
# Cantidad de revisiones: de 1 a 3
revisionHistoryLimit: 1
# Cantidad de instancias (Pods): de 1 a 10
replicas: 3
réplicas
es el valor que debemos modificar para incrementar o decrementar la cantidad de Pod.
En caso de que replicas:0
se realizara el despliegue pero no va a tener ninguna instancia levantada, use esta información para dar de baja o apagar el servicio. Si por alguna razón fuera necesario reiniciar un servicio, sólo es necesario poner las réplicas a 0 y luego volverlas a establecer en el número en que estaban.
ATENCIÓN: no debemos superar el límite de 10 instancias por aplicación, en caso de necesitar más instancias comunicarse con infraestructura.
Podemos ver la cantidad de instancias en:
Routes¶
Si necesitamos exponer una ruta interna debemos setear el flag de ...
route: true
Esto generará una Route
de OCP con la siguiente nomenclatura:
[nombre-de-app]-[nombre-de-proyecto]-[ambiente].clusterFQDN
Ej: https://api-b2c-architecture-it-qa.apps.ocpprod.andreani.com.ar
Health Checks¶
healthcheck:
# Ejecutar prueba de lectura: true o false
readiness: false
# Path: "[path]"
readinesspath: "/index.html"
# Port: "[Port]"
readinessport: "8080"
# Type: HTTP
readinessscheme: HTTP
# Ejecutar prueba de vida: true o false
liveness: false
# Path: "[path]"
livenesspath: "/index.html"
# Port: "[Port]"
livenessport: "8080"
# Type: HTTP
livenessscheme: HTTP
Readiness¶
Un readiness determina si un contenedor está listo para aceptar solicitudes de servicio. Si el readiness falla para un contenedor, el kubelet elimina el pod de los enpoints disponibles del services.
Después de una falla, la sonda continúa examinando el módulo. Si el pod está disponible, el kubelet agrega el pod a la lista de los enpoints disponibles del services.
Esta acción lo podemos configurar desde...
# Ejecutar prueba de lectura: true o false
readiness: false
# Path: "[path]"
readinesspath: "/index.html"
# Port: "[Port]"
readinessport: "8080"
# Type: HTTP
readinessscheme: HTTP
Liveness¶
un Liveness determina si un contenedor aún se está ejecutando. Si la Liveness falla debido a una condición como un interbloqueo, el kubelet elimina el contenedor. Luego, el pod responde según su política de reinicio.
Por ejemplo, un Liveness en un pod con restartPolicy
de Always
o OnFailure
elimina y reinicia el contenedor.
Para ejecutar la acción debemos configurar...
# Ejecutar prueba de vida: true o false
liveness: false
# Path: "[path]"
livenesspath: "/index.html"
# Port: "[Port]"
livenessport: "8080"
# Type: HTTP
livenessscheme: HTTP
Ambos mecanismos realizan una petición HTTP a la ruta y puerto especificado.
En caso de no obtener un response con status code 200, se interpretará como que fallo la prueba, en caso de fallar 3 veces consecutivas el mecanismo procederá a ejecutar la acción pertinente, deshabilitar o reiniciar el pod respectivamente.
Estas pruebas se repiten con un periodo de 30 segundos y todos los despliegues tienen la política de reinicio seteada como restartPolicy: Always
Un ejemplo de configuración:
Si utilizamos Platform NET tenemos la configuración de HealthCheck por lo que debemos apuntar al path /health
healthcheck:
# Ejecutar prueba de lectura: true o false
readiness: true
# Path: "[path]"
readinesspath: "/health"
# Port: "[Port]"
readinessport: "8080"
# Type: HTTP
readinessscheme: HTTP
# Ejecutar prueba de vida: true o false
liveness: true
# Path: "[path]"
livenesspath: "/health"
# Port: "[Port]"
livenessport: "8080"
# Type: HTTP
livenessscheme: HTTP
Cron Job¶
Config Map¶
Recolección de Logs de Pod¶
el flag
clusterlogging: true
Habilita la redirección de logs de consola a elasticsearch.
¡ATENCIÓN! en caso de ser un project (namespace) de OCP nuevo, se debe solicitar a infraestructura por única vez que se redireccionen los logs.