jueves, 5 de julio de 2018

Kubeadm - Laboratorio Kubernetes

Explicamos en esta entrada la instalación y uso de un cluster kubernetes mínimo para testeo previo a uso de clouds corporativos o profesionales. Dicho cluster sólo tendrá un nodo, el master.

Lo haremos con Kubeadm. La página de referencia es "https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/".

En otra entrada explicaremos la instalación y uso de otro laboratorio que usamos habitualmente en nuestras pruebas: Minikube.


Configuración
Para la realización de este pequeño manual hemos utilizado un Ubuntu Server (18.04 de 64 bits), sin entorno gráfico, virtualizado sobre VirtualBox. Consultar la página oficial de descargas de Ubuntu.

No nos detenemos en la instalación ya que es la habitual de cualquier iso sobre VirtualBox.


Kubeadm
Según la documentación, los requerimientos de instalación son los siguientes:

  • Ubuntu, CentOS, Debian....
  • 2 GB de RAM
  • 2 CPU's
  • Conexión de red.
Comencemos


Instalación
Fijamos una ip para nuestro ubuntu virtualizado. En la vesión 18.04 se puede hacer mediante netplan. En nuestro caso creamos el fichero "/etc/netplan/01-netcfg.yaml" e introducimos la siguiente configuración:


Aplicamos
    sudo netplan apply

  podemos validar con "ifconfig" de forma que vemos la ip configurada.

Más adelante usaremos la ip configurada (192.168.1.70) en el arranque de kubeadm.

Instalamos Docker. Para ello ejecutamos:
    sudo apt-get update
    sudo apt-get install -y docker.io

Validamos ejecutando "sudo docker version", lo cual devuelve, en el momento de hacer esta entrada

    Client:
     Version:       17.12.1-ce
     API version:   1.35
    ...

Ahora instalamos 
  • kubeadm: el comando para levantar nuestro cluster de prueba
  • kubelet: el daemon que corre en cada nodo del cluster y permite el arranque de pods, etc...
  • kubectl: el cliente que permite hablar con nuestro cluster
Lanzamos los siguientes comandos
    sudo apt-get update && sudo apt-get install -y apt-transport-https curl
    sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Creamos el fichero siguiente:
    sudo vi /etc/apt/sources.list.d/kubernetes.list

    añadimos

    deb http://apt.kubernetes.io/ kubernetes-xenial main 

    y grabamos (:wq + enter)

Finalmente
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl


Inicio
Habilitamos el servicio docker
    sudo systemctl enable docker.service

Deshabilitamos swap (espacio de intercambio), en otro caso no nos arrancará
    sudo swapoff -a

Arrancamos informando la ip fijada más arriba
    sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=192.168.1.70 --ignore-preflight-errors=all

conifiguramos kubectl
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config

Instalamos Calico como proveedor de red
    kubectl apply -f  https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml

Revisamos
    watch kubectl get pods --all-namespaces

Cuando veamos todos los pods en running proseguimos (Ctrl + c)



En un entorno real, en el nodo master no deberíamos instalar ningún pod. Sin embargo, al ser un entorno de test, hemos de habilitar esta posibilidad (deshabilitada por defecto)

    sudo kubectl taint nodes --all node-role.kubernetes.io/master-

Nos devuelve "node/ubuntu18system untainted".

Vemos los nodos activos
    sudo kubectl get nodes -o wide


Si hubiésemos de configurar un entorno real con más nodos, en el arranque de kubeadm se indica como deberíamos proceder para hacer el join del resto de nodos. En nuestro caso nos aparece el siguiente log:

    You can now join any number of machines by running the following on each node as root:

    kubeadm join 192.168.1.70:6443 --token 7z00kz.h3zrsijjih4hf3cg --discovery-token-ca-cert-hash sha256:97540b4036babb5c314c02b82fd6319b24eba3a2f4e987bde860b43b7d0ef4ce

No lanzaremos dicho comando en ningún lugar ya que sólo estamos configurando un único nodo.


Prueba
Finalmente validaremos la instalación de una imagen, levantando un pod y accediendo desde nuestro windows.

Utilizaremos una imagen nginx para ello.

Creamos el deployment
    kubectl create deployment nginx --image=nginx

Creamos el servicio exponiendo el puerto 80
    kubectl create svc nodeport nginx --tcp=80:80

Revisamos deployment y servicio con
    kubectl get deployments
    kubectl get svc

Vemos la ip y puerto que nuestro kubeadm ha generado para el servicio
    kubectl describe service nginx


Ahora, para poder acceder desde nuestro windows al pod del kubeadm dentro del ubuntu virtualizado en Virtual Box hemos de recoger todos los datos necesarios y realizar dos configuraciones extras:


  • Port forward dentro de ubuntu

               sudo kubectl port-forward svc/nginx 90:80

          dentro de ubuntu podemos validar ahora que accedemos a nginx con
               curl -v http://127.0.0.1:90


  • Ahora, configuramos reenvío de puertos en nuestro VirtualBox:




          Como se puede ver, hemos configurado el acceso a nginx.
          También un acceso ssh para trabajar de forma más cómoda (putty...) en la consola ubuntu.

Ahora ya podemos ver nuestro pod nginx desde windows con http://localhost:90



Más info
Se puede encontrar más información en los siguientes enlaces:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
https://kubernetes.io/docs/concepts/cluster-administration/addons/
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/

Port forward en kubernetes
https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/

Configuración estática ip en ubuntu
https://websiteforstudents.com/configure-static-ip-addresses-on-ubuntu-18-04-beta/

No hay comentarios:

Publicar un comentario