Um dos participantes da Treinamento Kubernetes para desenvolvedores Java sugeriu experimentar o minikube para desenvolvimento e teste simplificados do Kubernetes. Este blog mostrará
como começar a usar o minikube usando um aplicativo Java simples.
Minikube inicia um cluster Kubernetes de nó único em seu computador local para desenvolvimento e testes rápidos. Requisitos listas
o conjunto exato de requisitos para diferentes sistemas operacionais.
Este blog mostrará:
- Iniciar um cluster Kubernetes de um nó
- Executar o serviço Couchbase
- Executar o aplicativo Java
- Exibir o painel do Kubernetes
Todos os arquivos de descrição de recursos do Kubernetes usados neste blog estão em github.com/arun-gupta/kubernetes-java-sample/tree/master/maven.
Iniciar o cluster Kubernetes usando o Minikube
Crie um novo diretório com o nome minikube. Nesse diretório, faça o download de kubectl CLI:
|
1 |
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.4.0/bin/darwin/amd64/kubectl && chmod +x kubectl |
Baixar minikube CLI:
|
1 |
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.10.0/minikube-darwin-amd64 && chmod +x minikube |
Inicie o cluster:
|
1 2 3 |
minikube start Starting local Kubernetes cluster... Kubectl is now configured to use the cluster. |
A lista de nós pode ser vista:
|
1 2 3 |
kubectl get nodes NAME STATUS AGE minikube Ready 2h |
Mais detalhes sobre o cluster podem ser obtidos usando o comando kubectl cluster-info comando:
|
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'. |
Nos bastidores, uma VM do Virtual Box é iniciada. O conjunto completo de comandos suportados pode ser visto usando -ajuda:
|
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. |
Executar o serviço Couchbase
Criar um Couchbase serviço:
|
1 2 3 |
kubectl create -f couchbase-service.yml service "couchbase-service" created replicationcontroller "couchbase-rc" created |
Isso iniciará um serviço do Couchbase. O serviço está usando os pods criados pelo controlador de replicação. O controlador de replicação cria um servidor Couchbase de nó único. O arquivo de configuração está em github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/couchbase-service.yml e se parece com isso:
|
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 |
Executar aplicativo Java
Execute o aplicativo:
|
1 2 |
kubectl create -f bootiful-couchbase.yml job "bootiful-couchbase" created |
O arquivo de configuração está em github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/bootiful-couchbase.yml e se parece com isso:
|
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 |
Isso é trabalho executado uma única vez que executa um aplicativo Java (Spring Boot) e faz upserts (inserção ou atualização) de um documento JSON no Couchbase. Neste trabalho, COUCHBASE_URI valor da variável de ambiente
é definido como serviço couchbase. Esse é o nome do serviço criado anteriormente. A imagem do Docker usada para esse serviço é arungupta/bootiful-couchbase e é criado usando fabric8-maven-plugin conforme mostrado em github.com/arun-gupta/kubernetes-java-sample/blob/master/maven/webapp/pom.xml#L57-L68. Especificamente, o comando para o Docker
A imagem é:
|
1 |
java -Dspring.couchbase.bootstrap-hosts=$COUCHBASE_URI -jar /maven/${project.artifactId}.jar |
Isso garante que COUCHBASE_URI está substituindo a variável de ambiente spring.couchbase.bootstrap-hosts conforme definido em application.properties do aplicativo Spring Boot.
Painel de controle do Kubernetes
O Kubernetes 1.4 incluiu um painel de controle atualizado. Para o minikube, ele pode ser aberto usando o seguinte comando:
|
1 2 |
minikube dashboard Waiting, endpoint for service is not ready yet...Opening kubernetes dashboard in default browser... |
A visualização padrão é mostrada abaixo:

Mas, no nosso caso, alguns recursos já foram criados e, portanto, a aparência será a mostrada:
Observe que nossos Jobs, controladores de replicação e pods são mostrados aqui.
Encerrar o cluster do Kubernetes
O cluster pode ser facilmente desligado:
|
1 2 3 |
minikube stop Stopping local Kubernetes cluster... Machine stopped. |
couchbase.com/containers fornecem mais detalhes sobre a execução do Couchbase usando diferentes estruturas de orquestração. Outras referências:
- Fóruns do Couchbase ou StackOverflow
- Siga-nos em @couchbasedev ou @couchbase
- Leia mais sobre Servidor Couchbase