Una de las cosas que más me sorprenden de Kubernetes es que es necesario instalar una capa de red sobre el clúster.
En el caso concreto del que he obtenido las capturas de pantalla, el clúster corre sobre máquinas virtuales con Debian Jessie.
La instalación de Weave Net en Kubernetes consiste únicamente en una línea, como explica el artículo: Run Weave Net with Kubernetes in Just One Line.
Antes de instalar la red en el clúster (de momento, de un solo nodo), kubectl indica que el estado del nodo es NotReady
:
$ kubectl get nodes
NAME STATUS AGE VERSION
k8s NotReady 5h v1.6.1
$
En la salida del comando tenemos que la versión de Kubernetes es la 1.6.1. Este dato será importante más adelante a la hora de escoger el comando de instalación de Weave Net.
Si obtenemos la lista de pods, comprobamos que no tenemos ningún pod de red:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-k8s 1/1 Running 0 5h
kube-system kube-apiserver-k8s 1/1 Running 0 5h
kube-system kube-controller-manager-k8s 1/1 Running 0 5h
kube-system kube-dns-3913472980-4nlg9 0/3 Pending 0 5h
kube-system kube-proxy-l02zn 1/1 Running 0 5h
kube-system kube-scheduler-k8s 1/1 Running 0 5h
$
Además, los pods de DNS kube-dns-*
están en estado Pending
.
Siguiendo las instrucciones del artículo de Weave Net, lanzamos el comando de instalación para versiones 1.6 (o superior):
$ kubectl apply -f https://git.io/weave-kube-1.6
clusterrole "weave-net" created
serviceaccount "weave-net" created
clusterrolebinding "weave-net" created
daemonset "weave-net" created
$
Obtenemos la lista de pods de nuevo y observamos que se están creando dos nuevos contenedores:
operador@k8s:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-k8s 1/1 Running 0 5h
kube-system kube-apiserver-k8s 1/1 Running 0 5h
kube-system kube-controller-manager-k8s 1/1 Running 0 5h
kube-system kube-dns-3913472980-4nlg9 0/3 Pending 0 5h
kube-system kube-proxy-l02zn 1/1 Running 0 5h
kube-system kube-scheduler-k8s 1/1 Running 0 5h
kube-system weave-net-32ptg 0/2 ContainerCreating 0 12s
operador@k8s:~$
De hecho, se creado el daemonset “weave-net”. Un daemonset es un pod que se crea en cada uno de los nodos del clúster automáticamente. Kubernetes se encarga de descargar la imagen desde DockerHub y arrancar un contenedor. Los nodos en la red creada por Weave Net forman una red mesh que se configura automáticamente, de manera que es posible agregar nodos adicionales sin necesidad de cambiar ninguna configuración.
Pasados unos segundos la creación de los nodos se ha completado:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-k8s 1/1 Running 0 5h
kube-system kube-apiserver-k8s 1/1 Running 0 5h
kube-system kube-controller-manager-k8s 1/1 Running 0 5h
kube-system kube-dns-3913472980-4nlg9 0/3 ErrImagePull 0 5h
kube-system kube-proxy-l02zn 1/1 Running 0 5h
kube-system kube-scheduler-k8s 1/1 Running 0 5h
kube-system weave-net-32ptg 2/2 Running 0 1m
$
Finalmente, verificamos que el primer nodo del clúster ya es operativo:
$ kubectl get nodes
NAME STATUS AGE VERSION
k8s Ready 5h v1.6.1
$
Además, una vez que tenemos la red instalada en el clúster, el pod kube-dns
comienza la creación de los contenedores (quizás tengas que reiniciar):
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-k8s 1/1 Running 1 11d
kube-system kube-apiserver-k8s 1/1 Running 1 11d
kube-system kube-controller-manager-k8s 1/1 Running 1 11d
kube-system kube-dns-3913472980-4nlg9 0/3 ContainerCreating 0 11d
kube-system kube-proxy-l02zn 1/1 Running 1 11d
kube-system kube-scheduler-k8s 1/1 Running 1 11d
kube-system weave-net-32ptg 2/2 Running 3 10d
Tras unos segundos, tenemos todos los pods del clúster funcionales:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-k8s 1/1 Running 1 11d
kube-system kube-apiserver-k8s 1/1 Running 1 11d
kube-system kube-controller-manager-k8s 1/1 Running 1 11d
kube-system kube-dns-3913472980-4nlg9 3/3 Running 0 11d
kube-system kube-proxy-l02zn 1/1 Running 1 11d
kube-system kube-scheduler-k8s 1/1 Running 1 11d
kube-system weave-net-32ptg 2/2 Running 3 10d
$
Ahora sólo tenemos que añadir nodos worker y hacer crecer el clúster.