Este proyecto tiene como objetivo conocer el orquestador de contenedores Kubernetes mediante una aplicación Java.
- Java 17 o superior
- Maven 3.6.0 o superior
- Docker
- Kubernetes (Minikube, kind o cualquier otra distribución)
- Clona el repositorio:
git clone <url-del-repositorio>
- Navega al directorio del proyecto:
cd <directorio-del-proyecto>
- Construye el proyecto usando Maven:
mvn clean install
- Construye la imagen Docker:
docker build -t nombre-imagen .
Instalar el binario de kind
-
Crear un cluster:
kind create cluster --image kindest/node:v1.23.5
-
Ver los servicios del master:
kubectl get po -A kubectl cluster-info
-
Obtener el contexto
kubectl config get-contexts
-
Setear el contexto donde se va a trabajar
kubectl config set-context <nombre del contexto>
-
Ver los comandos
kubectl -h
- Crear namespace documentación
kubectl create namespace indra
- Crear secrets documentación
kubectl -n indra create secret generic app-secret --from-literal=SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydb --from-literal=SPRING_DATASOURCE_USERNAME=root --from-literal=SPRING_DATASOURCE_PASSWORD=root kubectl -n indra create secret generic mysql-root-pass --from-literal=MYSQL_ROOT_PASSWORD=root kubectl get secrets -n indra
NOTA: los archivos yaml se encuentra en demoPod/deployment
- Crear configmap documentación
kubectl -n indra apply -f mysql-init-configmap.yaml kubectl get cm -n indra
- Crear statefulset documentación
kubectl -n indra apply -f statefulset.yaml kubectl get pod -n indra
- Crear deployment documentación
kubectl -n indra apply -f deployment.yaml kubectl get pods -n indra
- Crear services documentación
kubectl -n indra apply -f service-mysql.yaml kubectl -n indra apply -f service.yaml kubectl get services -n indra
- Podemos acceder a los endpoints de servicios privados o pods usando
port-forward
kubectl -n indra port-forward <pod-name> 8080
Para hacer que nuestro sitio sea público, es común exponer los servidores web a través de un proxy o un API gateway. En Kubernetes, se utiliza un Ingress.
-
Para usar un Ingress, necesitamos un controlador de Ingress.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.3/deploy/static/provider/cloud/deploy.yaml kubectl -n ingress-nginx get pods kubectl -n ingress-nginx --address 0.0.0.0 port-forward svc/ingress-nginx-controller 80
-
Crear un Ingress documentación
kubectl apply -f ingress.yaml