Seguimos con la serie de entradas investigando el desempeño de Kubernetes en cluster de servidores. Después de la instalación y configuración del cluster, con el nodo master y tres nodos workers, llega el turno de empezar a ver que posibilidades nos ofrece e instalar los addons disponibles.
Volvemos a la página de Github de Luxas, donde revisaremos ahora la parte de addons. Luxas nos ofrece cinco addons compilados para nuestro cluster:
- DNS
- Registry
- Load Balancer
- Dashboard
- Monitorización
El primer addon para activar, recomiendo el Dashboard, esto se realiza de esta manera, desde el nodo master:
$ kube-config enable-addon dns
Este primer addon es el más inmediato, y no debería haber ningún problema. Si nos conectamos al nodo master http://ip_master:8080/ nos debe mostrar:
Una representación muy visual. Es posible que si solo activáis este addon, la pantalla que os salga sea un cuadro con un texto para desplegar aplicaciones. El botón «+» de la esquina superior derecha os lleva al mismo sitio.
Tenéis más información del Dashboard aquí.
Personalmente, he activado todos y jugado un poco con cada uno de ello. No lo he probado pero activar el último el DNS ayuda a que todo funcione mejor.
$ kube-config enable-addon registry $ kube-config enable-addon heapster $ kube-config enable-addon loadbalancer $ kube-config enable-addon dns
En la dirección http://ip_master:8080/api/v1/proxy/namespaces/kube-system/services/monitoring-grafana/dashboard/db/cluster, tenemos el monitor Grafana para revisar los nodos, consumo de CPU, etc… Es divertido de ver pero no aporta mucho.
Más interesante es el monitor de cada nodo, que se activa por defecto en la dirección http://ip_nodo:4194/
En cuanto al módulo Load Balancer, la única acción adicional a realizar en taggear un nodo como balanceador, evidentemente he taggeado el nodo master como balanceador para el resto:
$ kubectl label node ip_master role=loadbalancer
Con esta instrucción
$ kubectl describe no 192.168.1.8
Podemos ver información de todo del nodo:
$ kubectl describe no 192.168.1.8 Name: 192.168.1.8 Labels: kubernetes.io/hostname=192.168.1.8,role=loadbalancer CreationTimestamp: Sun, 22 May 2016 22:21:03 +0200 Phase: Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- OutOfDisk False Sun, 29 May 2016 01:05:50 +0200 Sun, 29 May 2016 01:04:27 +0200 KubeletHasSufficientDisk kubelet has sufficient disk space available Ready True Sun, 29 May 2016 01:05:50 +0200 Sun, 29 May 2016 01:04:27 +0200 KubeletReady kubelet is posting ready status Addresses: 192.168.1.8,192.168.1.8 Capacity: cpu: 4 memory: 947696Ki pods: 110 System Info: Machine ID: e1f1b26c7e6e4d2bb421c3d638fc53b3 System UUID: e1f1b26c7e6e4d2bb421c3d638fc53b3 Boot ID: edf03a23-0e4f-431d-8c78-027990e64f98 Kernel Version: 4.1.17-hypriotos-v7+ OS Image: Raspbian GNU/Linux 8 (jessie) Container Runtime Version: docker://1.10.3 Kubelet Version: v1.2.0 Kube-Proxy Version: v1.2.0 ExternalID: 192.168.1.8 Non-terminated Pods: (2 in total) Namespace Name CPU Requests CPU Limits Memory Requests Memory Limits --------- ---- ------------ ---------- --------------- ------------- default k8s-master-192.168.1.8 0 (0%) 0 (0%) 0 (0%) 0 (0%) kube-system service-loadbalancer-65uuz 0 (0%) 0 (0%) 0 (0%) 0 (0%) Allocated resources: (Total limits may be over 100%, i.e., overcommitted. More info: http://releases.k8s.io/HEAD/docs/user-guide/compute-resources.md) CPU Requests CPU Limits Memory Requests Memory Limits ------------ ---------- --------------- ------------- 0 (0%) 0 (0%) 0 (0%) 0 (0%) Events: FirstSeen LastSeen Count From SubobjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 6d 1m 1939 {controllermanager } Normal NodeNotReady Node 192.168.1.8 status is now: NodeNotReady 6d 1m 1966 {kubelet 192.168.1.8} Normal NodeHasSufficientDisk Node 192.168.1.8 status is now: NodeHasSufficientDisk 6d 1m 1957 {kubelet 192.168.1.8} Normal NodeReady Node 192.168.1.8 status is now: NodeReady
Como podéis ver, el nodo master se ha etiquetado como loadbalancer.
El addon registry es bastante interesante porque te permite tener un repositorio local privado donde guardar las imágenes de contenedores de aplicaciones que vayamos generando. Pero para ello debemos realizar una acción puesto que la instalación del addon no termina de funcionar de forma correcta. Para ellos buscamos en la documentación oficial del addon, no en la de Luxas, si no en la de Kubernetes.
$ POD=$(kubectl get pods --namespace kube-system -l k8s-app=kube-registry \ -o template --template '{{range .items}}{{.metadata.name}} {{.status.phase}}{{"\n"}}{{end}}' \ | grep Running | head -1 | cut -f1 -d' ') $ kubectl port-forward --namespace kube-system $POD 5000:5000 &
Con esto tendremos un cluster funcional, con todos los addons instalados y funcionando. Es hora de jugar.
¿Qué os esta pareciendo? Dejadlo en comentarios y hablamos. Volvemos a dar las gracias a Diego Barrio (@guili) por su ayuda en el camino.