Uno de los asistentes de Formación en Kubernetes para desarrolladores Java sugirió probar minikube para simplificar el desarrollo y las pruebas de Kubernetes. Este blog mostrará
cómo empezar con minikube utilizando una sencilla aplicación Java.
Minikube inicia un clúster Kubernetes de un solo nodo en su máquina local para un rápido desarrollo y pruebas. Requisitos enumera
el conjunto exacto de requisitos para los distintos sistemas operativos.
Este blog lo demostrará:
- Iniciar un clúster Kubernetes de un nodo
- Ejecutar el servicio Couchbase
- Ejecutar aplicación Java
- Ver el panel de control de Kubernetes
Todos los archivos de descripción de recursos de Kubernetes utilizados en este blog se encuentran en github.com/arun-gupta/kubernetes-java-sample/tree/master/maven.
Iniciar un clúster Kubernetes con Minikube
Crear un nuevo directorio con el nombre minikube. En ese directorio, descargue kubectl CLI:
|
1 |
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.4.0/bin/darwin/amd64/kubectl && chmod +x kubectl |
Descargar minikube CLI:
|
1 |
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.10.0/minikube-darwin-amd64 && chmod +x minikube |
Inicie el clúster:
|
1 2 3 |
minikube start Starting local Kubernetes cluster... Kubectl is now configured to use the cluster. |
Se puede ver la lista de nodos:
|
1 2 3 |
kubectl get nodes NAME STATUS AGE minikube Ready 2h |
Se pueden obtener más detalles sobre el clúster utilizando la función kubectl cluster-info mando:
|
1 2 3 4 5 |
kubectl cluster-info Kubernetes master is running at https://192.168.99.100:8443 kubernetes-dashboard is running at https://192.168.99.100:8443/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. |
Entre bastidores, se inicia una VM de Virtual Box. El conjunto completo de comandos soportados puede verse usando --ayuda:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
minikube --help Minikube is a CLI tool that provisions and manages single-node Kubernetes clusters optimized for development workflows. Usage: minikube [command] Available Commands: dashboard Opens/displays the kubernetes dashboard URL for your local cluster delete Deletes a local kubernetes cluster. docker-env sets up docker env variables; similar to '$(docker-machine env)' get-k8s-versions Gets the list of available kubernetes versions available for minikube. ip Retrieve the IP address of the running cluster. logs Gets the logs of the running localkube instance, used for debugging minikube, not user code. config Modify minikube config service Gets the kubernetes URL for the specified service in your local cluster ssh Log into or run a command on a machine with SSH; similar to 'docker-machine ssh' start Starts a local kubernetes cluster. status Gets the status of a local kubernetes cluster. stop Stops a running local kubernetes cluster. version Print the version of minikube. Flags: --alsologtostderr[=false]: log to standard error as well as files --log-flush-frequency=5s: Maximum number of seconds between log flushes --log_backtrace_at=:0: when logging hits line file:N, emit a stack trace --log_dir="": If non-empty, write log files in this directory --logtostderr[=false]: log to standard error instead of files --show-libmachine-logs[=false]: Whether or not to show logs from libmachine. --stderrthreshold=2: logs at or above this threshold go to stderr --v=0: log level for V logs --vmodule=: comma-separated list of pattern=N settings for file-filtered logging Use "minikube [command] --help" for more information about a command. |
Ejecutar el servicio Couchbase
Crear un Couchbase servicio:
|
1 2 3 |
kubectl create -f couchbase-service.yml service "couchbase-service" created replicationcontroller "couchbase-rc" created |
Esto iniciará un servicio Couchbase. El servicio utiliza los pods creados por el controlador de replicación. El controlador de replicación crea un servidor Couchbase de nodo único. El archivo de configuración está en github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/couchbase-service.yml y parece:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
apiVersion: v1 kind: Service metadata: name: couchbase-service spec: selector: app: couchbase-rc-pod ports: - name: admin port: 8091 - name: views port: 8092 - name: query port: 8093 - name: memcached port: 11210 --- apiVersion: v1 kind: ReplicationController metadata: name: couchbase-rc spec: replicas: 1 template: metadata: labels: app: couchbase-rc-pod spec: containers: - name: couchbase image: arungupta/oreilly-couchbase ports: - containerPort: 8091 - containerPort: 8092 - containerPort: 8093 - containerPort: 11210 |
Ejecutar aplicación Java
Ejecuta la aplicación:
|
1 2 |
kubectl create -f bootiful-couchbase.yml job "bootiful-couchbase" created |
El archivo de configuración se encuentra en github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/bootiful-couchbase.yml y parece:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
apiVersion: batch/v1 kind: Job metadata: name: bootiful-couchbase labels: name: bootiful-couchbase-pod spec: template: metadata: name: bootiful-couchbase-pod spec: containers: - name: bootiful-couchbase image: arungupta/bootiful-couchbase env: - name: COUCHBASE_URI value: couchbase-service restartPolicy: Never |
Esto es trabajo de una sola ejecución que ejecuta una aplicación Java (Spring Boot) y upserts (inserta o actualiza) un documento JSON en Couchbase. En este trabajo, COUCHBASE_URI valor de la variable de entorno
se establece en servicio couchbase. Este es el nombre del servicio creado anteriormente. La imagen Docker utilizada para este servicio es arungupta/bootiful-couchbase y se crea utilizando fabric8-maven-plugin como se muestra en github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/webapp/pom.xml#L57-L68. En concreto, el comando para el Docker
imagen es:
|
1 |
java -Dspring.couchbase.bootstrap-hosts=$COUCHBASE_URI -jar /maven/${project.artifactId}.jar |
Esto garantiza que COUCHBASE_URI anula la variable de entorno spring.couchbase.bootstrap-hosts tal y como se define en aplicación.propiedades de la aplicación Spring Boot.
Panel de control de Kubernetes
Kubernetes 1.4 incluye un dashboard actualizado. Para minikube, se puede abrir con el siguiente comando:
|
1 2 |
minikube dashboard Waiting, endpoint for service is not ready yet...Opening kubernetes dashboard in default browser... |
A continuación se muestra la vista por defecto:

Pero en nuestro caso, algunos recursos ya han sido creados y por lo tanto esto se verá como se muestra:
Fíjate, aquí se muestran nuestros Jobs, Replication Controllers y Pods.
Apagar el clúster Kubernetes
El clúster se puede apagar fácilmente:
|
1 2 3 |
minikube stop Stopping local Kubernetes cluster... Machine stopped. |
couchbase.com/contenedores proporcionan más detalles sobre cómo ejecutar Couchbase utilizando diferentes marcos de orquestación. Más referencias:
- Foros de Couchbase o StackOverflow
- Síguenos en @couchbasedev o @couchbase
- Más información Servidor Couchbase