lunes, 1 de junio de 2020

Instalar Kubernetes en Azure

Bueno vamos a probar Kubernetes en Azure, así de una, sin vueltas, sin caretearla (?).
Para empezar ingresamos al Portal de Azure con nuestras credenciales y en "Inicio" a la izquierda vamos a ver los servicios que nos ofrece Azure para desplegar.
Uno de ellos es "Servicios de Kubernetes", clickeamos ahí:


Luego vamos a crear nuestro primer cluster haciendo click en "Agregar" o "Crear Servicio de Kubernetes":


Elegimos nuestra suscripción, creamos un nuevo grupo de recursos o resource group, elegimos el nombre del cluster y la región. Y mas abajo elegimos el tamaño del nodo y la cantidad, este paso es muy importante, porque al definir el tamaño del nodo básicamente estamos eligiendo las especificaciones técnicas (cpu, memoria, disco) que van a tener las maquinas virtuales que van a formar los nodos del cluster y esto no se podrá cambiar después de crearlo. El numero de nodos si se puede cambiar.
En mi caso elijo la maquina virtual mas barata que es la DS2 v2, que tiene un 2 CPU y 7GB de RAM.



Fijense que a la derecha aparecen los precios de las virtuales (Costo Mensual Estimado):



El tamaño que estoy eligiendo DS2_v2 sale 6547 pesos argentinos (estimado mensual) y si bien hay otra que sale la mitad DS1_v2 (3273 pesos) y que trae la mitad del CPU y memoria, no pude elegirla porque el cluster me pedía que los nodos tengan por lo menos 2 CPUs, no estoy seguro si es por mi cuenta o porque, pero había visto que se podían elegir virtuales con un solo CPU, si quieren prueben y va a ser mas barato.
Para esta prueba con la mas barata alcanza, para producción deberíamos analizar bien que pensamos correr en el cluster y definir las características en base a eso, aunque siempre tengamos en cuenta que por la naturaleza del cluster y de Kubernetes podríamos agregar mas nodos momentáneamente para aumentar nuestra capacidad de computo y luego volver atrás. Es una de sus gracias.
Para el resto de las pestañas vamos a dejar las opciones por defecto:






Una vez elegido todo clickeamos en "Revisar y crear". Realiza una validación, clickeamos en "Crear" y comienza a crearlo. Esto demora algunos minutos:


Para conectarnos al cluster y poder ejecutar comandos vamos a la Shell:


Y abajo se nos abrirá la opción de Bash o PowerShell. Vamos con Bash:


Creamos almacenamiento:


Ya tenemos Shell:


Escribimos az y ENTER para ingresar a la Azure Cli::


De todas formas, mi idea no es ejecutar las cosas desde la cli del navegador. Así que vamos a nuestra maquina con Linux para instalarnos todo lo necesario para correr los comandos de Kubernetes directo desde nuestra terminal.

No vamos a ahondar en explicaciones, para eso pueden entrar acá, copiamos y pegamos como monos lo siguiente:

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

sudo apt-get update

sudo apt-get install ca-certificates curl apt-transport-https lsb-release gnupg

curl -sL https://packages.microsoft.com/keys/microsoft.asc |
    gpg --dearmor |
    sudo tee /etc/apt/trusted.gpg.d/microsoft.asc.gpg > /dev/null

AZ_REPO=$(lsb_release -cs)
echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" |
    sudo tee /etc/apt/sources.list.d/azure-cli.list

sudo apt-get update

sudo apt-get install azure-cli

az login

Para loguearnos nos hace ingresar a una URL e ingresar un código que nos brinda. Luego vamos a tener que ingresar las credenciales de la cuenta de Azure con la que creamos el cluster. Una vez realizados los pasos quedamos logueados:



Ahora vamos a la ayuda para ver como carajo instalar kubectl:

az aks --help


Y dice:

install-cli: Download and install kubectl, the Kubernetes command-line tool.

Fácil, ¿no? Solo había que leer ¬¬
Entonces ejecutamos:

install-cli


Nos dice que nos aseguremos que /usr/local/bin/ este en nuestro PATH y como por defecto está en nuestro PATH sabemos que debería funcionar (sino pueden ver como agregarlo aca). Probamos ejecutar el comando en cuestión:

kubectl


Y funciona. Ya podemos ejecutar nuestro primer comando, ¡que nervios! ¬¬
Primero nos posicionamos en nuestro cluster:

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

En mi caso:

az aks get-credentials --resource-group MiPrimerCluster --name ArdillasEnLaRedCluster


Ejecutamos:

kubectl get pods

Y vemos que nos dice que no hay PODs en el namespace default, y está bien, porque no tenemos PODs desplegados, solamente NODOS. Si ejecutamos el comando para ver los PODs de todos los namespace:

kubectl get pods -A


Vemos que tampoco hay ninguno.
kube-system es el espacio de nombres (namespace) para aquellos objetos creados por el sistema de Kubernetes, con lo cual se crea por defecto.
Podríamos filtrar por namespace de esta forma:

kubectl get pods -n kube-system

O si queres aprender mucho mas, podes ir a mi posteo para manejar un namespace diferente al default

Los NODOS, como son independientes del namespace si podemos verlos sin especificarlo:

kubectl get nodes

O también:

kubectl get nodes -n kube-system


Vemos que aparecen 3 que son los que habíamos configurado al crear el cluster.

Bueno, la idea del post era llegar hasta acá, porque de acá en mas se supone que deberías poder hacer todo lo que explique en este post y en este post, pero antes de despedirnos vamos a ejecutar un deploy y exponer un servicio para ver si podemos acceder a traves de la IP publica cosa que no pudimos hacer cuando probamos Minikube.

Creamos el archivo yaml:

sudo nano azure-vote.yaml

Y pegamos este código:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-back
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-back
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: azure-vote-front
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: azure-vote-front
        image: microsoft/azure-vote-front:v1
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front

Ejecutamos el deploy de la aplicación especificando el nombre del manifiesto yaml:

kubectl apply -f azure-vote.yaml


Verificamos si nos expuso el servicio:

kubectl get service azure-vote-front


Vemos que si, que incluso nos dio una IP publica (cosa que con Minikube no).

Probamos el acceso desde terminal:

Con curl:


Con lynx:


Y finalmente, con un navegador convencional como Firefox:


Votamos Gato, y vemos que ganó:


Listo, ya probamos Kubernetes en Azure.
Ahora borramos el cluster para no seguir gastando guita al pedo ¬¬

Borrar cluster:

az group delete --name myResourceGroup --yes --no-wait

En mi caso:

az group delete --name MiPrimerCluster --yes --no-wait


Antes
Después
Tengan en cuenta que esto demora varios minutos.

Aclaración para que no se asusten, el gasto fue menor, no lo se exacto, pero calculo que fueron alrededor de 35 pesos argentinos, ¿que haces con 35 pesos argentinos? Instalas Kubernetes en Azure!

Nada mas...

COMPARTI, o te vuelvo a linkear la canción, no lo puedo evitar perdón, es que me da fuerzas para compartir (?).

Te mando un codazo (?).

No hay comentarios:

Publicar un comentario