K8s / Kubernetes – notas de consulta rápida

Breves apuntes de consulta rápida, se irá actualizando poco a poco.

 

DaemonSet

DaemonSet ensures that all (or some) Nodes run a copy of a Pod. As nodes are added to the cluster, Pods are added to them. As nodes are removed from the cluster, those Pods are garbage collected. Deleting a DaemonSet will clean up the Pods it created.

Un caso práctico sería, desplegamos daemont Set que genera pod con un container de fluentd que monta los volumnes de /var/lib/docker/containers, fluentd lo envía a un Splunk. Con Daemon Set tendremos un pod en cada nodo.

Servicios

  • ClusterIP
    • Expone:
      • spec.clusterIp:spec.ports[*].port
    • Solo puedes acceder este servicio desde dentro del cluster. Accesible desde su spec.clusterIp port. Si hay configurado el spec.ports[*].targetPort enrutará desde el puerto al targetPort. La IP que recibes cuando llamas via kubectl get services es la IP asignada a ese servicio dentro del cluster, internamente.
  • NodePort
    • Expone:
      • <NodeIP>:spec.ports[*].nodePort
      • spec.clusterIP:spec.ports[*].port
    • Si se accede a este servicio con nodePort, desde la IP externa del nodo, enrutará la petición a spec.clusterIP:spec.ports[*].port, lo cual resultará en enrutarla hacia spec.ports[*].targetPort si está configurado. Este servicio también puede ser accedido en la misma forma que ClusterIP.
    • Tu NodeIPS son las direcciones IP externas de los nodos. Tú no puedes acceder al servicio desde ClusterIP:spec.ports[*].nodePort
  • LoadBalancer
    • Expone
      •  <spec.loadBalancerIp:spec.ports[*].port
      • <NodeIP>:spec.ports[*].nodePort
      • spec.clusterIp:spec.ports[*].port
    • Puedes acceder al servicio desde la IP de tu balanceador el cual enrutará tu petición al nodePort, el cual enrutará a su vez al puerto del ClusterIP. Puedes acceder a este servicio como harías en un NodePort o un ClusterIP.

¿Qué pasa cuando generamos recursos via yaml en AWS?

  • Se genera un ALB mediante service tipo node port e ingress
  • Se genera ELB mediante service tipo loadbalancer

Mapear puerto de namespace en local

Ejemplo práctico: un despliegue de blackbox exporter dentro del namespace production. Queremos poder acceder via http a ese pod:puerto localmente para consultar métricas. Mapeamos con port-forward como sigue:

kubectl port-forward blackbox-exporter-prometheus-blackbox-exporter-79c8455888-r57kx 9115:9115 -n production

Logs

pod multicontainer

kubectl logs apo-api-analitica-1560416400-7bf2l --all-containers

 Ordenar por consumo de ram

kubectl top pod --all-namespaces, pipe it to sort:

kubectl top pod --all-namespaces | sort --reverse --key 3 --numeric \
  | head -10
  • kubectl top pod --all-namespace Muestra la información de top de todos los pods en todos los namespaces.
  • sort --reverse --key 3 --numeric Ordena el input acorde con los valores numéricos encontrados en la columna 3 y orden descendiente.
  • head -10 Muestra solo las diez primeras líneas.

Herramientas

Links

Continue reading