Está en la página 1de 24

28/6/19

Crear Microservicio
Preparación
Para este manual, se necesitaran las siguientes herramientas:

 Visual Studio Code (Tambien se puede con Visual Studio 2019).


 Cuentas en Azure DevOps o Github.
 Cuenta en el portal Azure.
 Git
 Si el repositorio se encuentra en Azure Repos, en el Visual Studio Code instale la
extensión Azure Repos.

Creación de la aplicación
Cree una carpeta aparte donde guardar la aplicación. Puede ser un repositorio local (que se
explicará luego como hacerlo) o en una carpeta aparte si se desea.

En el visual studio code, cree una aplicación webapi mediante el terminal (es válido cualquier
aplicación, pero para este manual, veremos con un web API):

dotnet new webapi

(Para ver el listado de las aplicaciones que se pueden crear, déjalo como dotnet new)

En ella, para agregar código con la cual el microservicio se comunicará, se debe de hacer desde
el controlador. Funciona lo mismo para los demás tipos de aplicaciones.

pág. 1
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Vamos a hacer algunos cambios para probar: cambiamos uno de los valores dentro de get y
añadimos otro campo donde se genere un número aleatorio (si quiere agrege otra cosa para
probar).

Ahora que se tiene el código fuente, para lanzarlo como microservicio, es indispensable tener
en la aplicación 2 archivos:

 Dockerfile: para la creación de la imagen y lanzarlo a la nube.


 Archivo .yaml: es el manifesto con la cual se lanzará la imagen docker al kubernetes y
con ello crear el microservicio.

Ambos archivos se deben de realizar manualmente y sus configuraciones varian dependiendo


del lenguaje y plataforma en la cual lo desarrolle.

En el dockerfile, se configura de acuerdo al lenguaje con la cual se realiza la aplicación y en qué


sistema operativo quiere que funcione la imagen (uno de Linux o Windows. Para este taller, se
eligió Alpine, una distribución de Linux).

Como es una aplicación .Net, la configuración seria asi:

pág. 2
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Donde dice [Nombre de la aplicación] debes poner el nombre del proyecto que hayas puesto
tal y como está. De lo contrario, no funcionará la imagen.

En el archivo .yaml van las configuraciones necesarias para cuando se despliegue al kubernetes

pág. 3
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Creación del repositorio


Se tienen 2 opciones para la creación de un repositorio: el Azure Repos y Github. Cualquiera de
las 2 son válidas para este paso. Por ello, se mencionará brevemente como crear el repositorio
en las 2 (De preferencia, que el nombre del repositorio sea igual que el de la aplicación).

Azure Repos
Se asumirá aquí que ya tiene un proyecto de Azure DevOps para este proceso. Sino, debe de
crear uno.

Para crear un repositorio, vaya a la pestaña de Repos.

Desde ahí elige la parte donde se muestra el nombre del repositorio para crear uno, ya sea
desde cero o importando uno.

pág. 4
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Github
En el github, seleccione el botón que dice “New Repository”.

Se llena el nombre y, si se desea, una descripción, un readme y/o una licencia.

pág. 5
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Una vez hecho esto, ya estará listo el repositorio.

Pasar el código
Sea cual sea el sitio, ahora se debe de pasar el código al repositorio. Para ello, clonamos el
repositorio localmente con una dirección que se nos da.

git clone [dirección del repositorio].git

(Nota: en el azure devops, la dirección que te dan es un poco diferente y no tiene .git al final,
pero funciona de la misma forma que en el github).

Si se clona el repositorio de Azure DevOps, te pedirá que ingreses con tu usuario y contraseña
de Azure DevOps (ya sea el normal o el que se crea en git credentials en el repositorio). Si es
desde el Github, no hay necesidad de un ingreso de Datos (solo ocurre si haces commit y no se
haya configurado la cuenta en primer lugar).

pág. 6
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Una vez hecha la clonación, se puede crear una aplicación desde ahí o pasar todo el código que
se creó en una carpeta aparte. Luego se hace un commit. Para ello, en el VSCode, vamos a la
pestaña de Control de código.

Seleccionamos el botón + para fijar los cambios. Eso si, antes ignoremos los archivos
temporales. En ese caso, se seleccionan los archivos temporales (normalmente están ubicadas
en las carpetas bin y obj), click derecho selecciona “Añadir a gitignore” (o Add a gitignore).

pág. 7
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Ahora se puede hacer el commit con normalidad. Escribe un nombre de commit (No debe
pasar de 50 caracteres) y pulsa el check para commitear.

pág. 8
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Ve a la opción de “More Actions” (Presentada como “…”) y selecciona Push (o incorporar


cambios, si esta en español el VSCode).

Si todo está bien, entonces se realizará el commit con normalidad y debería visualizarse en la
pestaña de commits, ya sea el de Azure DevOps o Github, dependiendo de donde hayas creado
y clonado el repositorio.

pág. 9
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Preparación del Azure Container Registry


Para crear cualquiera de los recursos que vamos viendo, necesitamos de un grupo de recursos,
en la cual se encuentra en esta parte:

Selecciona “+ Agregar” para crear un grupo de recursos nuevo. Vamos a crear uno Llamado
“Taller” y se encontrará Ubicada en el Este de EEUU 2.

Desde el grupo de recursos creado, ve a agregar.

Busca el recurso Container Registry.

Lo eliges y pulsa crear.

Desde ahí te aparecerá otra pantalla:


pág. 10
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Los campos son:

1. Nombre de registro (Lo llamaremos “TallerContenedores”, lo pueden llamar como


gusten)
2. La subscripción.
3. El grupo de recurso a la cual va destinado (elige la recién creada).
4. Ubicación (Se recomienda elegir la de Este de EEUU 2).
5. Usuario Administrador (Habilítalo)
6. SKU (Elige la básica).

Una vez llenados los campos, se habrá creado después de minutos el registro de contenedores
donde se almacenarán las imágenes de docker.

Para generar el usuario y contraseña del registro, vaya a la opción “Claves de accesso” del
registro de contenedor ya creado y habilite Usuario administrador (si es que no lo habilito)

pág. 11
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Esto es importante para la comunicación entre el registro y el cluster, que se verá en detalle
luego.

También desde ahí se puede ver el servidor de inicio de sección que nos servirá luego.

Preparación del Azure Kubernetes Service


Desde el grupo de recursos que hemos creado, elige agregar

Busca y elige Azure Kubernetes Service para crear.

pág. 12
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Se mostrará luego la siguiente pantalla:

pág. 13
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Los campos aquí son:

1. Suscripción
2. El grupo de recursos a la que pertenecerá
3. El nombre del cluster que le pondrá
4. La región en la que estará. Como las anteriores, es recomendable usar el de Este de
EEUU 2.
5. La versión de Kubernetes con la que trabajará (puede dejarlo tal como está)
6. El prefijo de nombre DNS (se genera conforme le des nombre al cluster. Es mejor no
cambiarlo a menos que sepas lo que haces).
7. El tamaño de los nodos con los que trabajará (de eso hablaremos de inmediato)
8. El número de nodos para el cluster. Se recomienda cambiar la cantidad de nodos a 1
puesto que, al menos en este caso, no necesitaremos de muchos recursos.

Nunca olvides cambiar el tamaño para que no cuente mucho al utilizar el recurso (eso va
también para todo los demás recursos que tengan distintos planes. Si existe un plan gratuito,
mejor).

En la pantalla, puesto que no existe un plan gratuito para Kubernetes, selecciona el tamaño
que menos cuesta de todas:

pág. 14
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Ahora movemos a la pestaña Autenticación y desde ahí deshabilita el RBAC: Control de acceso
basado en rol (Puede que lo necesites en algún Proyecto de la vida real, pero para este
manual, que no necesita de autenticación de usuario alguna, lo vamos a deshabilitar).

pág. 15
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

El resto de los campos puede dejarlos intactos como gustes.

Si la revisión da visto bueno, se puede crear el cluster.

Ahora pulse crear y espere hasta que se termine de implementar el cluster. Esto toma unos
minutos (el Portal le avisará cuando esté listo).

Crear Imagen
Para este manual, se hará todo el proceso mediante la nube en si. Si se desea hacerlo
localmente, se deben de instalar adicionalmente el azure cli y el kubectl para la ejecución de
los comandos que se verán a continuación. Se recomienda en el Cloud sheel (el CLI de Azure)
elegir bash.

Para pasar el código fuente al almacenamiento de la nube (que se crea la primera vez que se
utiliza el comando de Azure), se clona desde una carpeta aparte (si se desea) usando:

Mkdir [Carpeta aparte]

Luego:

Cd [La carpeta creada]

Ahora se puede hacer la clonación:

git clone [Dirección del repositorio].git

pág. 16
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

(Recuerda: en el azure devops, la dirección que te dan es un poco diferente y no tiene .git al
final, pero funciona de la misma forma que en el github).

Como se mencionó antes, si se clona desde Azure DevOps, les pedirá usuario y contraseña para
poder hacer la clonación (en este caso, dichos campos se pueden configurar en las
credenciales git que se encuentran en el repositorio de Azure DevOps). Si es desde Github, no
necesita hacer ningún paso adicional.

Una vez hecho eso, pulsen el botón donde se muestran 2 llaves para ver las carpetas
disponibles. Entre ellas está la carpeta creada junto con el repositorio ya clonado.

Una vez hecho esto, es momento de crear la imagen.

Para ello, ingrese el siguiente comando:

az acr build –image [nombre de la imagen. Puede ser cualquier nombre, recuerda que las letras
deben de estar en minuscula] –registry [nombre del recursos de acr en la que se guardará la
imagen] [La dirección del dockerfile.]

pág. 17
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

En nuestro caso quedaría asi:

Si se ejecuta el comando adecuadamente, se creará la imagen (demora normalmente entre 1 a


2 minutos) y debería parecer la imagen con el nombre asignado anteriormente en la opción de
Repositorios.

Preparación para lanzar microservicio


Exponer credenciales
Para tener contacto con el cluster desde el CLI, se ejecuta el siguiente comando:

az aks get-credentials –n [nombre del cluster] –g [nombre del grupo de recursos donde
pertenece].

Una vez se ejecute con éxito, verifica que haya contacto con el cluster. Ejecuta cualquier
comando del kubectl para verificar (ej: kubectl get nodes, kubectl get services, etc.). Si sale
error al momento de ejecutar alguno de los comandos, vuelve a exponer los credenciales con
el comando ya visto.

Si no se reconoce el kubectl, ejecute este comando:

az aks install-cli

Y vuelva a ejecutar los comandos.

Crear secreto
Para mantener contacto entre el registro de contenedor y el cluster, debe de crearse un
secreto para ello. Para crearlo, ejecuta el siguiente comando:
pág. 18
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

kubectl create secret docker-registry [nombre del secreto]--docker-server [servidor de inicio de


sección] --docker-username [el nombre de usuario]--docker-password [la contraseña del
registro. Elige cualquiera de las 2 disponibles]--docker-email [el email con el que esta enlazado
el azure].

Para este manual, llamaremos el secreto “secretomanual”. Puede llamarlo como quiera

Lanzar aplicación como microservicio


Antes de lanzar la aplicación como microservicio, verifica que el archivo .yaml este configurado
debidamente. Volvamos a la vista de carpetas del CLI de antes y busquemos el archivo .yaml
de la aplicación.

Una vez encontrado, verifiquemos que el nombre de la app (los campos name y app deben de
estar iguales, menos un campo name que se verá de inmediato, el resto puede estar tal como

pág. 19
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

se dejó) este como deberían estar (Para este taller, llamaremos “tallerapi” a nuestro
microservicio, se puede poner cualquier nombre) y cambiamos 2 campos:

 En la parte debajo de containers está el campo –image. Cambia la configuración a:


[servidor de inicio de sección]/[nombre de la imagen].
 Debajo de imagePullSecrets, en la parte de name, pon el nombre del secreto ya hecho.

Al momento de hacer los cambios, guardamos y luego ejecutamos el siguiente comando:

kubectl apply –f [ubicación exacta del archivo yaml junto con el archivo mismo]

Si todo está en orden, verá mensajes señalando que todo fue creado con éxito.

Si se quiere ver que funciona todo bien, ejecute el siguiente comando:

kubectl get services

Le debe de aparecer la aplicación misma ya creada.

pág. 20
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

En el campo donde dice external , espere al menos 1 minuto para que le dé un ip con el cual
acceder (si es que ejecuta el comando al momento de crearse el servicio. Sino, aparece normal
el IP externo).

Ingresar a la aplicación
Una vez hecho esto y pasado el minuto, hay 2 formas para acceder: desde el mismo azure cli
con la ip ya creada o desde un Panel donde se pueden ver todos los detalles del cluster.

Desde comando
Ejecute kubectl get services Como se mencionó antes y copie el IP externo del microservicio.

Normalmente si se trata de una aplicación normal como una web, ingresar solo el IP te
redirecciona a ese microservicio con normalidad, con todo y vista. Pero como es una web API,
se deben de agregar los siguientes parámetros.

[el ip del microservicio]/api/values (el nombre del controlador. Puede ser otro dependiendo de
como llames al controlador).

Agregado eso, se verifica si funciona o no el microservicio.

Desde Panel
Ve al cluster y busca la opción de Panel de Kubernetes.

pág. 21
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Selecciónalo y te saldrá este sub menú:

pág. 22
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Nota: ignora la advertencia de que no funciona en Cloud Shell, puede ejecutar los comandos
que ves en pantalla con normalidad.

Elige el comando que te lleva al panel de Kubernetes:

az aks browse --resource-group [Grupo de recursos] --name [nombre del cluster]

Al ejecutarlo, automáticamente te lleva al panel de Kubernetes.

pág. 23
Autor: Alvaro Racchumi
Edición: Baneza
28/6/19

Baja más abajo hacia la parte de services y selecciona donde dice External endpoints

De nuevo, como es una aplicación web api, al momento de ingresar a la dirección señalada,
agrega los paramentros /api/values para ver el resultado. Si fuera cualquier otro microservicio,
ingresando a la IP es suficiente.

Y listo, ahora ya sabes cómo crear un Microservicio en el Kubernetes. Puede seguir probando
con otros tipos de aplicaciones.

pág. 24
Autor: Alvaro Racchumi
Edición: Baneza

También podría gustarte