10000 GitHub - haroldo89/mongodb-operator-jv
[go: up one dir, main page]

Skip to content

haroldo89/mongodb-operator-jv

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mongodb-operator-jv

Operador para mongodb desarrollado en java, con javaoperatorsdk https://javaoperatorsdk.io/docs/getting-started/

Paso 1: Pre-requisitos

Asegúrate de tener instalado:

  • Java 17+
  • Maven
  • Docker
  • Kind (brew install kind en macOS)
  • kubectl configurado

Paso 2: Crear el proyecto (si no lo hiciste ya)

mvn io.javaoperatorsdk:bootstrapper:5.1.1:create \
  -DprojectGroupId=org.acme \
  -DprojectArtifactId=mongodb-operator
cd mongodb-operator

Paso 3: Implementar tu operador

  1. Define tu CustomResource (MongodbCustomResource, MongodbSpec, MongodbStatus)
  2. Implementa tu MongodbReconciler
  3. Agrega la clase Runner con:
public class Runner {
    public static void main(String[] args) {
        KubernetesClient client = new KubernetesClientBuilder().build
8000
();
        Operator operator = Operator.create(client);
        operator.register(new MongodbReconciler(client));
        operator.start();
    }
}

Paso 4: Agrega estas dependencias y plugins al pom.xml

Dependencias clave

<dependencies>
  <dependency>
    <groupId>io.javaoperatorsdk</groupId>
    <artifactId>operator-framework</artifactId>
    <version>5.1.1</version>
  </dependency>
  <dependency>
    <groupId>io.fabric8</groupId>
    <artifactId>kubernetes-client</artifactId>
    <version>6.9.0</version>
  </dependency>
</dependencies>

⚙️ Plugin para ejecutar Runner localmente

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <version>3.1.0</version>
  <configuration>
    <mainClass>org.acme.Runner</mainClass>
  </configuration>
</plugin>

Paso 5: Generar el CRD

mvn clean compile

El CRD se genera en:

target/classes/META-INF/fabric8/*.yaml

Aplica el CRD en Kind:

kubectl apply -f target/classes/META-INF/fabric8/<archivo_crd>.yml

Paso 6: Crea el clúster Kind (si no lo tienes)

kind create cluster --name java-operator
kubectl cluster-info --context kind-java-operator

Paso 7: Crear imagen Docker del operador

  1. Crea el Dockerfile:
FROM eclipse-temurin:17-jdk
WORKDIR /app
COPY target/mongodb-*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
  1. Construye la imagen local:
mvn clean package -DskipTests
docker build -t mongodb-operator:latest .
  1. Carga la imagen en Kind:
kind load docker-image mongodb-operator:latest --name java-operator

Paso 8: Despliega el operador en Kubernetes

Crea un manifiesto de Deployment (por ejemplo, operator-deployment.yaml):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongodb-operator
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb-operator
  template:
    metadata:
      labels:
        app: mongodb-operator
    spec:
      containers:
        - name: operator
          image: mongodb-operator:latest
          imagePullPolicy: IfNotPresent

Despliega:

kubectl apply -f operator-deployment.yaml

Paso 9: Crear un recurso Mongodb

Ejemplo YAML mongodb-sample.yaml:

apiVersion: org.acme/v1
kind: MongodbCustomResource
metadata:
  name: test-mongo
spec:
  database: mydb

Aplica:

kubectl apply -f test-resource.yaml

Paso 10: Verifica el operador

kubectl logs deployment/mongodb-operator
kubectl get pods
kubectl get mongodb

📦 Makefile: Tareas automatizadas

El proyecto incluye un Makefile que simplifica la compilación, construcción de imágenes y despliegue del operador en Kubernetes.

⚙️ Tareas disponibles

Comando Descripción
make build Compila el proyecto con Maven, omitiendo tests
make image Construye la imagen Docker del operador
make push Sube la imagen al registro configurado
make kind-load Carga la imagen Docker al clúster Kind
make deploy Aplica el Deployment en Kubernetes usando la imagen especificada
make deploy-crd Aplica el CRD generado automáticamente
make deploy-roles Aplica roles, bindings y permisos necesarios para ejecutar el operador
make deploy-sample Aplica un ejemplo de recurso personalizado (Mongodb)
make logs Muestra los logs del operador desde Kubernetes
make clean Elimina los recursos y archivos temporales generados
make all Ejecuta build, image, push y deploy
make all-local Ejecuta todo el flujo local: build, image, load en Kind, CRD, roles y despliegue

📄 El archivo k8s/operator-deployment.yaml contiene el manifiesto base del Deployment. Durante make deploy, se reemplaza dinámicamente __IMAGE__ por la imagen construida (mongodb-operator:0.1.0 por defecto).

✅ Ejemplo de uso

make all-local

Esto compila, construye la imagen, la carga en Kind, aplica permisos, el CRD y despliega el operador en Kubernetes local.


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
2964
0