Iniciar Minikube porque lo necesitamos:
minikube start --driver=docker
A minikube le indicamos que utilice solo docker
CLonar repositorio: Repositorio GitHub
Ir a la línea 13 del archivo docker-compose.yml y cambiar la línea por la ruta de la carpeta actual:
%Actual_Path%/jenkins_home:/var/jenkins_home
Tenemos un docker composer para ejecutar.
docker compose up -d
Para poder instalar cosas necesitamos entrar al contenedor:
docker exec -it --user=root jenkinsdocker /bin/bash
Se instala Kubectl en el interior de Jenkins:
Guía de instalación: https://k8s-docs.netlify.app/en/docs/tasks/tools/install-kubectl/
Ejecutar el comando de instalación:
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
Debemos darle los permisos de ejecución:
chmod +x ./kubectl
Se mueve al directorio de ejecución:
mv ./kubectl /usr/local/bin/kubectl
Comprobar Instalación:
kubectl version --output=json --client
Ahora se puede acceder a Jenkins desde la ruta de Minikube:
Instalación inicial. Necesitamos poner la clave inicial: Ruta var/jenkins_home/secrets/initialAdminPassword
Si este archivo no se ha creado en la ruta en cuestión, obtenerlo utilizando los siguientes comandos (dentro del contenedor, donde aún estamos):
cat var/jenkins_home/secrets/initialAdminPassword
Instalar plugins predefinidos.
Salir del contenedor:
exit
Una vez la instalación este completa. Instalar el plugin Kubernetes
Visualizar redes presentes en minikube
docker network ls
Nos interesa es la red de minikube.
Conectar el contenedor de jenkins a esta red.
docker network connect minikube jenkinsdocker
Comprobamos que se ha agregado de manera correcta
docker container inspect jenkinsdocker
Cuando terminemos este ejercicio no olvides desconectar este contenedor a de esa red.
Dado que si no inicia el minikube con su red y el contenedor conectado a esa red podria tener problemas a querer iniciar de manera independiente
Comando para desconectarlo de la red
docker network disconnect minikube jenkinsdocker
Entrar a la carpeta kubernetes-monitor:
kubectl apply -f jenkins-account.yaml
Ver la configuración del cluster:
kubectl config view
Aquí veremos dos campos importantes: certificate-authority: tiene la ruta del certificado de autenticación. server: Tiene la ruta del cluster minikube
Esto nos servira para configurar las credenciales de acceso de Jenkins. SI intentamos entrar a la ruta del server, veremos que obtenemos error 403: forbidden.
Ver los servicios:
kubectl --namespace default get serviceaccount
Ejecutar el service-account-token:
kubectl apply -f jenkins-service-account-token.yaml
Obtener el Token:
kubectl describe secret/jenkins-token-rk2mg
Ir a Manage Jenkins, Credentials y añadir una credencial global: Tipo: Secret text Secret: el token que obtuvimos al ejecutar el describe anterior Ver nombre del ID en linea 15 jenkins file ID: kubernete-jenkis-server-account Descripción: kubernetes
Ir a Manage Jenkins, CLouds, New CLoud. CLoud Name: kubernetes tipo: kubernetes. Crear.
Ir a KUbernetes cloud details. El server es la url que nos daba 403. Kubernetes URL:
kubectl config view
Certificate key: Necesitamos el certificado que nos da en el mismo comando. Hacer un cat para obtener su valor, recordar que los certificados deben pegarse incluyendo las leyendas de begin and end certificate.
cat /home/bellyster/.minikube/ca.crt
Seleccionar las credenciales agregadas anteriormente. Y dar click en Test Connection
Ir al panel principal y crear un nuevo job de tipo Pipeline. En la sección build, seleccionar from SCM file, y dar el link del repositorio Jenkins: LINK: https://github.com/bellyster/GrafanaExample script path: kubernetes-monitor/Jenkinsfile Testear proceso.
Obtenemos la IP de minikube y accedemos al puerto: 31780
minikube ip
Y veremos la aplicación desplegada. Datos default estan en application properties. user: userdevops password: devops
En kubernetes-monitor entrar a la carpeta Prometheus
Verificar si tenemos el namespace monitoring creado.
kubectl get namespace
Si no aparece lo debemos crear.
kubectl create namespace monitoring
Comprobemos nuevamente que este creado:
kubectl get namespace
Entrar a la carpeta prometheus en la consola, y luego a la carpeta monitoring. Ejecutamos el siguiente comando para aplicar el script de Autorización de prometheus.
kubectl apply -f authorization-prometheus.yaml
Abrir una segunda terminal y abrir dashboard de minikube. Debe hacerce en una segunda terminal ya que dejara la terminal tomada mientras se ejecute el dashboard.
minikube dashboard --url
Ir a la url que retorna este comando y veremos el dashboard:
En la sección de "Config Maps" veremos la configuración. En la parte superior podemos seleccionar el namespace a visualizar. Deberia haber un config Maps en monitoring.
kubectl apply -f configmap-prometheus.yaml
Ahora veremos el config map creado en el namespace de monitoring.
Hacer deployment de prometheus:
kubectl apply -f deployment-prometheus.yaml
comprobemos si esta todo dentro del namespace
kubectl get all --namespace=monitoring
Y luego ejecutamos el comando
minikube ip
192.168.49.2:30000
Y deberiamos ver a prometheus en acción. Veremos todas las secciones desplegadas, pero falta añadir la configuración de que vamos a monitorear, por lo que al final de todo, veremos una sección en rojo.
Ahora vamos a configurar los "kube-state-metric", indicando que se va a monitorear.
kubectl apply -f kube-state-metrics/
En Slack crear un canal llamado Prometheus Añadir la app: WebHooks entrantes
En los ajustes de integración seleccionar el canal, y copiar la URL del Webhook habilitado para JSONs.
Ahora en la carpeta de "alert-manager"
Archivo "configmap-alert-manager.yaml" en la linea 12 debemos cambiar:
slack_api_url : La url que entregó la app de slack
Este archivo describe la integración de alertas.
Ahora ejecutar un apply sobre esta carpeta.
kubectl apply -f alert-manager/
Podemos ver la alerta configurada en :
minikubeip:31000
Esperar un momento y recibiremos alertas
Esta alerta se encuentra definida en el archivo: configmap-prometheus.yaml En la linea 11
En el directorio the prometheus/monitoring
kubectl apply -f grafana/
Se puede ingresar a grafana en la ruta:
MinikubeIp:32000
minikube service grafana --url -n monitoring
En el "+" (navbar extremo derecho) agregar un import
Solo es necesario indicar el id: 6417 y damos click en "load"
y en la ultima opción seleccionamos prometheus
y damos click en "import"
- count by (namespace) (kube_pod_info)
- kube_pod_container_resource_limits