Capacitacion Interna Docker Kubernetes ICP v1.0
Capacitacion Interna Docker Kubernetes ICP v1.0
26 de agosto, 2019
Lima, Perú
Historial de Revisiones
Descripción Versión Fecha Autor
Creación de documento 1.0 26/08/2019 Jhon Paredes - Everis
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
Contenido
1. Introducción ............................................................................................................ 4
2. Consideraciones iniciales ...................................................................................... 5
2.1. Requisitos previos. .......................................................................................... 5
2.2. Configuración de la maquina virtual. .............................................................. 5
2.2.1. ..................................................................................................................................... 7
Consideraciones para la configuración ..................................................................... 7
3. App Calculadora ..................................................................................................... 8
3.1. Diseño de la solución. ...................................................................................... 8
3.2. Creación de servicio calculadora .................................................................... 8
3.3. Creación del servicio calculadoraApp .......................................................... 15
4. Dockerizar la aplicación App Calculadora .......................................................... 19
4.1. Construcción del componente jar ................................................................. 19
4.1.1. ................................................................................................................................... 19
Construccion del componente jar mediante línea de comando ........................ 19
4.1.2. ................................................................................................................................... 20
Construccion del componente jar mediante el IDE de desarrollo .................... 20
4.2. Creación de Docker Image............................................................................. 23
4.3. Creación de Docker Container ...................................................................... 28
5. Subir nuestra aplicación a ICP............................................................................. 33
5.1. ...................................................................................................................................... 33
Subir Docker Image al cluster ICP ............................................................................. 33
5.2. ...................................................................................................................................... 34
Creación de kubernetes deployment en ICP........................................................... 34
5.3. ...................................................................................................................................... 38
Creación de kubernetes service en ICP ................................................................... 38
6. Referencias ........................................................................................................... 45
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
1. Introducción
El presente documento es una guía para el paso a paso que debemos realizar cuando
trabajamos con la plataforma de IBM Cloud Private, desde el desarrollo de un primer
microservicio utilizando Spring boot, construcción de una imagen utilizando docker y su
respectivo despligue en ICP.
2. Consideraciones iniciales
2.1. Requisitos previos.
Asegurarse de tener instalado y configurado lo siguiente:
Java 8.
Maven.
IDE de desarrollo para java y spring(STS 4, eclipse, etc).
Oracle VM VirtualBox versión 5.x o superior.
WinSCP.
PuTTY.
Los puertos necesarios para la configuración del reenvio en nuestra VM son los
siguientes:
Protocolo Valor Descripción
Tabla Nro. 01
Se pueden agregar mas puertos en la configuración, sin embargo para la presente guía
con ello es suficiente.
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
3. App Calculadora
3.1. Diseño de la solución.
El App Calculadora, es nuestro ejemplo concreto para esta guía donde vamos a
desarrollar dos microservicios apoyándonos en spring boot. El primero que cumple
la función de proveedor que va contar con las 4 operaciones básicas, el segundo
que cumple la función de consumidor que expone una sola operación y que
mediante una lógica se realiza la invocación a los diferentes métodos que expone
el proveedor.
Imagen referencial
http://localhost:8080/api/calculator
Endpoint
/divide
Resources /add /subtract /multiply
{
{ { {
"divide": {
"add": { "subtract": { "multiply": {
"intA": 6,
"intA": 2, "intA": 4, "intA": 3,
Request "intB": 2
"intB": 2 "intB": 2 "intB": 2
}
} } }
}
} } }
{
{ { {
"divideResponse": {
"addResponse": { "subtractResponse": { "multiplyResponse": {
"divideResult": 3
Response "addResult": 4 "subtractResult": 2 "multiplyResult": 6
}
} } }
}
} } }
Tabla Nro. 02
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
5. Luego de terminar de construir las clases java para la definición del servicio,
debemos crear una clase java que se encargara de exponer las 4 operaciones
de nuestro servicio calculadora, creamos otro paquete llamado controller y en
ella nuestra clase CalculadoraController.
http://localhost:9090/api/bus
Endpoint
/operacion
Resources
{
"operacion": {
"input": "10 / 5"
Request
}
}
{
"respuesta": {
"output": 2
Response
}
}
Tabla Nro. 03
4. Ahora, luego de terminar de construir las clases java para la definición del
servicio, debemos crear una clase java que se encargara de exponer la
operacion de nuestro servicio calculadoraApp, creamos otro paquete llamado
controller y en ella nuestra clase CalculadoraAppController.
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
4. Ahora que ya ingresamos por ssh y estamos con privilegios de usuario root,
vamos a proceder a crear los diferentes directorios para ambas aplicaciones
y asignarle sus permisos respectivos.
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
cd %ruta_workspace%\calculadora\target
pscp calculadora-0.0.1-SNAPSHOT.jar
userssh@%ip_computador%:/home/userssh/calculadora
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
cd %ruta_workspace%\calculadoraApp\target
pscp calculadoraApp-0.0.1-SNAPSHOT.jar
userssh@%ip_computador%:/home/userssh/calculadoraApp
Ejecutamos lo siguiente:
Servicio calculadora
FROM ibmjava:8-sfj
LABEL maintainer="IBM Java Engineering at IBM Cloud"
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar
/app.jar" ]
Servicio calculadoraApp
FROM ibmjava:8-sfj
LABEL maintainer="IBM Java Engineering at IBM Cloud"
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar
/app.jar" ]
docker images
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
docker ps
Servicio calculadora
Servicio calculadoraApp
Por ello es que nuestro servicio calculadoraApp tiene una falla en la comunicación
con el servicio calculadora, porque lo intenta realizar mediante localhost. Para
solucionar este error primero debemos obtener la dirección ip asignada al
contenedor del servicio calculadora, para ello ejecutamos lo siguiente:
Ahora que ya contamos con la dirección ip del contenedor del servicio calculadora,
debemos editar el código fuente de calculadoraApp para que apunte a esta
dirección ip obtenida.
Utilizamos cualquier editor de texto para modificar las fuentes de la clase java
CalculadoraAppController.
docker rm -f <containerNameOrId>
docker rmi -f <imageNameOrId>
docker push
<cluster_CA_domain>:8500/<namespace>/<image_name>:<version>
https://10.4.77.115:8443/oidc/login.jsp
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
kubectl version
La razón es simple, primero era necesario obtener la dirección ip del pod que se
le otorgo al momento de crear el deployment, con ello tenemos que volver a
modificar las fuentes para volver a crear el componente jar, la imagen, subirla al
cluster ICP para poder crear su respectivo kubernetes deployment y kubernetes
service.
Fichero pom.xml
El puerto que nos asigno el servicio para ser consumido es el siguiente 31399, la
forma de consumirlo seria apuntando a la ip del proxy que tiene ICP y el puerto
asignado por el servicio.
<ip_proxy_icp>:<port_service>
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
Endpoint: http://10.4.77.124:31399/api/bus
Resource: /operación
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
Y llegamos al final de esta guía, esperando que sea de gran ayuda para futuros
desarrollos. Con un inicio desde el desarrollo de nuestro primer microservicio,
dockerizando nuestra aplicación app calculadora y culminando con su respectivo
despliegue y exposición en la plataforma de contenedores y kubernetes de IBM
llamada IBM Cloud Private.
Nueva Plataforma IBM Cloud Private, Docker
Container, Kubernetes & Microservicios.
6. Referencias
Como referencias no solo para el desarrollo de esta guía, comparto los siguientes link:
https://kubernetes.io/es/docs/concepts/
https://docs.docker.com/get-started/
https://www.scalyr.com/blog/create-docker-image/
https://bluedemos.com/show/2459
https://www.ibm.com/cloud/blog/deploying-to-ibm-cloud-private-3-1-with-ibm-cloud-
developer-tools-cli
https://www.ibm.com/support/knowledgecenter/en/SSBS6K_3.1.2/manage_applications
/deploy_app.html
https://www.ibm.com/support/knowledgecenter/SSBS6K_3.1.2/manage_applications/ex
pose_app.html
https://www.baeldung.com/spring-resttemplate-post-json
https://spring.io/guides/gs/consuming-rest/
https://www.callicoder.com/spring-boot-docker-example/
https://spring.io/guides/gs/consuming-web-service/
https://spring.io/guides/gs/producing-web-service/
https://spring.io/guides/tutorials/rest/
https://spring.io/guides/gs/actuator-service/