A medida que se van instalando aplicaciones en el cluster va aumentando la complejidad y es complicado tener una visión general (monitorización) de que está instalado y las relaciones entre los diferentes elementos. Vamos, que se va liando el tema y únicamente uniendo etiquetas de los .yaml no es suficiente para ver el cluster en su conjunto.
Existen aplicaciones que permiten pintar los objetos y las relaciones de kubernetes, he incluso, como no podemos instalarlas en el propio cluster. Voy a probar con kubeview y veremos que tal funciona.
Creación de los ficheros .yaml
Esta disponible en https://artifacthub.io por lo que con helm podemos generar los templates y hacer a mano un yaml de instalación sencillo e independiente.
$ helm repo add kubeview https://benc-uk.github.io/kubeview/charts
"kubeview" has been added to your repositories
$ helm template kubeview kubeview/kubeview -f values.yaml --output-dir .
wrote ./kubeview/templates/service-account.yaml
wrote ./kubeview/templates/service-account.yaml
wrote ./kubeview/templates/service-account.yaml
wrote ./kubeview/templates/service.yaml
wrote ./kubeview/templates/deployment.yaml
wrote ./kubeview/templates/tests/test-connection.yaml
Apply de los ficheros
ServiceAccount, ClusterRole, ClusterRoleBinding
apiVersion: v1
kind: Namespace
metadata:
name: monitoring
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: kubeview
namespace: monitoring
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubeview
rules:
- apiGroups: ["extensions"]
resources:
- ingresses
verbs: ["get", "list"]
- apiGroups: ["apps"]
resources:
- deployments
- replicasets
- daemonsets
- statefulsets
verbs: ["get", "list"]
- apiGroups: [""]
resources:
- pods
- configmaps
- secrets
- events
- endpoints
- namespaces
- nodes
- persistentvolumes
- persistentvolumeclaims
- resourcequotas
- services
verbs: ["get", "list"]
- apiGroups: ["networking.k8s.io"]
resources:
- ingresses
verbs: ["get", "list"]
- nonResourceURLs: ["*"]
verbs: ["get", "list"]
Service, Ingress y Deploy
apiVersion: v1
kind: Service
metadata:
name: kubeview
namespace: monitoring
labels:
app: kubeview
spec:
ports:
- port: 8000
targetPort: 8000
selector:
app: kubeview
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production
name: monitor
namespace: monitoring
spec:
rules:
- host: tu-sitio-web
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubeview
port:
number: 8000
tls:
- hosts:
- tu-sitio-web
# En este certificate cert-manager guarda el certificado.
secretName: monitor-cert
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubeview
namespace: monitoring
labels:
app: kubeview
spec:
replicas: 1
selector:
matchLabels:
app: kubeview
template:
metadata:
labels:
app: kubeview
spec:
serviceAccountName: kubeview
containers:
- name: kubeview
image: "ghcr.io/benc-uk/kubeview:0.1.31"
imagePullPolicy: Always
env:
- name: IN_CLUSTER
value: "true"
ports:
- containerPort: 8000
Vamos a ver si se visualiza alguna cosa
Al acceder a la url configurada en el Ingress se accede directamente al frontal. No pide autenticación lo cual es un poco raro pero supongo se podrá configurar posteriormente.
En el desplegable aparece un listado con los namespaces del cluster. En la imagen he seleccionado el namespace motioneye (donde tengo las cámaras IP) y kubeview pinta cada uno de los elementos junto a sus relaciones.
Justo la primera prueba ya me ha servido para comprobar que existe un pod marcado como error (Status – phase: Failed). Al situar el puntero del ratón encima del objeto muestra los detalles, existiendo además, la posibilidad de ampliarlos.
Desde consola llevo al cementerio de los pods al serializado como kt5q2.
$ kubectl get pods -n motioneye
NAME READY STATUS RESTARTS AGE
motioneye-8459f5ffbb-kt5q2 0/1 ContainerStatusUnknown 1 10d
motioneye-8459f5ffbb-mgsxw 1/1 Running 0 23h
$
$
$ kubectl delete pod -n motioneye motioneye-8459f5ffbb-kt5q2
pod "motioneye-8459f5ffbb-kt5q2" deleted
Volviendo a kubeview se puede observar que el pod averiado ya no está y el molesto color rojo desapareció.
A priori la utilidad no va a sustituir un sistema como Prometheus, ni al omnipresente kubectl, pero aporta una visualización refrescante que me ha servido como en cada una de las entradas de https://www.juanjosevalera.com/archivos/category/kubernetes/, para ir aprendiendo mas acerca de este mundo.