Nuevo tema, solo habia leido de este
En el Deployment frontend, define probes de liveness y readiness que chequen HTTP en /healthz puerto 80 (suponiendo que la app responde).
Un liveness y readiness son capacidades de kubernetes, para validar endpoints de sitios web y generar acciones segun condiciones.
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes
Algo que me resulta interesante es que hay varios tipos de livenessProbe, uno para exec, por ejemplo leer datos de un archivo en el contenedor, y uno de httpGet para validar una ruta web.
Esta es una expansion del dia20:
# En el namespace exam-ns,
# crea un Deployment llamado frontend con 3 réplicas
# usando la imagen nginx:stable,
# y expónlo con un Service de tipo ClusterIP al puerto 80. / NodePort
---
apiVersion: v1
kind: Namespace
metadata:
name: exam-ns
labels:
app: frontend
---
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
labels:
app: frontend
namespace: exam-ns
data:
LOG_LEVEL: "debug"
---
apiVersion: v1
kind: Secret
metadata:
name: db-secret2
namespace: exam-ns
stringData:
db-secret: s3cr3t
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: exam-ns
spec:
replicas: 3
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: LOG_LEVEL
- name: DB_SECRET
valueFrom:
secretKeyRef:
name: db-secret2
key: db-secret
image: nginx:1.21-alpine
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 3.
---
apiVersion: v1
kind: Service
metadata:
name: frontendsvc
namespace: exam-ns
spec:
type: NodePort
selector:
app: frontend # ¿Asi busco los pods?
ports:
- port: 80 # Este es el puerto del cluster
targetPort: 80 # este es el puerto del contenedor
nodePort: 30080 # Este es el puerto externo - Dice que es opcional
# Para hacer funcionar esto hay que hacer un tunel de mi host a minikube, es algo propio de minikube
# minikube service frontendsvc -n exam-ns
Para validar el livenessProbe se puede hacer en kubectl
En fin estas son las modificaciones.
En ConfigMap una nueva propiedad, ligeramente mas compleja, que crea una ruta en el nginx, normalmente esto no es muy kubernetes, sino mas aplicacion, pero rezare porque en el examen no me pidan algo tan especifico de otros productos.
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
labels:
app: frontend
namespace: exam-ns
data:
LOG_LEVEL: "debug"
default.conf: |
server {
listen 80;
server_name localhost;
location / {
try_files $uri $uri/ =404;
}
location /healthz {
access_log off;
return 200 'ok';
add_header Content-Type text/plain;
}
}
Porque configurar nginx es algo que siempre olvido y tengo que buscar.
Y el deployment se le agregan dos nuevas propiedades. Y aparte de agregue un volumen y volumenMounts para que pueda recbir la configuracion del nginx
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: exam-ns
spec:
replicas: 3
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: LOG_LEVEL
- name: DB_SECRET
valueFrom:
secretKeyRef:
name: db-secret2
key: db-secret
image: nginx:1.21-alpine
ports:
- containerPort: 80
volumeMounts:
- name: nginx-config-volume
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
livenessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 5
periodSeconds: 10
readinessProbe:
httpGet:
path: /healthz
port: 80
initialDelaySeconds: 3
periodSeconds: 5
volumes:
- name: nginx-config-volume
configMap:
name: app-config
Y una vez esta todo aplicado simplemente es cuestion de monitorear el describe de algun pod, y su estado a nivel general.
Tuve varios problemas durante mi practica, mas que nada sintaxis del mismo nginx. lo cual rompia el Healthz y me mandaba a la deriva pregutando por los errores.
Entonces mis practicas deben incluir ‘Volumes’ , y varios tipos de ‘livenessProbes’ luego debo intentar con la de archivos.
Felizmente esa si esta en la docmentacion de kubernetes.