Implantar um aplicativo de inicialização Spring no OpenShift
1. Visão geral
Neste tutorial, mostraremos como implantar um aplicativo de nosso tutorialBootstrap a Simple Application using Spring Boot paraOpenshift.
Como parte disso, nós:
-
Instale e configure as ferramentas de desenvolvimento Openshift.
-
Crie um projeto Openshift e implantação do MySQL.
-
Configure o aplicativo paraSpring Cloud Kubernetes.
-
Crie e implante o aplicativo em um contêiner usandoFabric8 Maven plugine teste e dimensione o aplicativo.
2. Configuração OpenShift
Primeiro,we need to install Minishift, the local single-node Openshift cluster, and the Openshift client.
Antes de usar o Minishift, precisamos configurar permissões para o usuário desenvolvedor:
minishift addons install --defaults
minishift addons enable admin-user
minishift start
oc adm policy --as system:admin add-cluster-role-to-user cluster-admin developer
Agora queremos usar o console Openshift para criar um serviço MySQL. Podemos iniciar o URL do navegador usando:
minishift console
Se você não estiver logado automaticamente, usedeveloper/developer.
Crie um projeto denominadoexample-demo e, em seguida, crie um serviço de banco de dados MySQL a partir do catálogo. Forneçaexample-db para o serviço de banco de dados,example_db para o nome do banco de dados MySQL e deixe os outros valores com seus padrões.
Agora temos um serviço e segredos para acessar o banco de dados. Anote o url de conexão do banco de dados:mysql://example-db:3306/example_db
Também precisamos permitir que aplicativos leiam configurações como Kubernetes Secrets e ConfigMaps:
oc create rolebinding default-view --clusterrole=view \
--serviceaccount=example-demo:default --namespace=example-demo
3. Dependências do Spring Cloud Kubernetes
Usaremos o projetoSpring Cloud Kubernetes para habilitar as APIs nativas da nuvem para Kubernetes que sustentam o Openshift:
openshift
org.springframework.cloud
spring-cloud-kubernetes-dependencies
0.3.0.RELEASE
pom
import
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR2
pom
import
org.springframework.cloud
spring-cloud-starter-kubernetes-config
org.springframework.boot
spring-boot-starter-actuator
Também usaremosFabric8 Maven plugin para construir e implantar o contêiner:
io.fabric8
fabric8-maven-plugin
3.5.37
fmp
resource
build
4. Configuração da Aplicação
Agorawe need to provide configuration to ensure the correct Spring Profiles and Kubernetes Secrets are injected as environmental variables.
Let’s create a YAML fragment in src/main/fabric8 para que o plugin Fabric8 Maven o use ao criar a configuração de implantação.
Também precisamos adicionar uma seção para o atuador Spring Boot, já que o padrão no Fabric8 ainda tenta acessar/health em vez de/actuator/health:
spec:
template:
spec:
containers:
- env:
- name: SPRING_PROFILES_ACTIVE
value: mysql
- name: SPRING_DATASOURCE_USER
valueFrom:
secretKeyRef:
name: example-db
key: database-user
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
secretKeyRef:
name: example-db
key: database-password
livenessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 180
readinessProbe:
httpGet:
path: /actuator/health
port: 8080
scheme: HTTP
initialDelaySeconds: 30
Em seguida,we’ll save a ConfigMap in*openshift/configmap.yml*, contém os dados para umapplication.properties com o URL do MySQL:
apiVersion: v1
kind: ConfigMap
metadata:
name: spring-boot-bootstrap
data:
application.properties: |-
spring.datasource.url=jdbc:mysql://example-db:3306/example_db
Before interacting with Openshift using the command line client we need to log in. No canto superior direito do console da web, há um ícone de usuário no qual podemos selecionar o menu suspenso chamado "Copiar comando de login". Em seguida, use em um shell:
oc login https://192.168.42.122:8443 --token=
Vamos ter certeza de que estamos usando o projeto correto:
oc project example-demo
E entãowe upload the ConfigMap:
oc create -f openshift/configmap.yml
5. Desdobramento, desenvolvimento
Durante a implantação, o plug-in Fabric8 Maven tenta determinar a porta configurada. O arquivoapplication.properties existente em nosso aplicativo de exemplo usa uma expressão para definir a porta, que o plug-in não consegue analisar. Portanto, temos que comentar a linha:
#server.port=${port:8080}
do atualapplication.properties.
Agora estamos prontos para implantação:
mvn clean fabric8:deploy -P openshift
Podemos acompanhar o andamento da implantação até vermos nosso aplicativo em execução:
oc get pods -w
Deve fornecer uma lista:
NAME READY STATUS RESTARTS AGE
example-db-1-9m2cr 1/1 Running 1 1h
spring-boot-bootstrap-1-x6wj5 1/1 Running 0 46s
Antes de testarmos o aplicativo, precisamos determinar a rota:
oc get routes
Irá imprimir as rotas no projeto atual:
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
spring-boot-bootstrap spring-boot-bootstrap-example-demo.192.168.42.122.nip.io spring-boot-bootstrap 8080 None
Agora, vamos verificar se nosso aplicativo está funcionando adicionando um livro:
http POST http://spring-boot-bootstrap-example-demo.192.168.42.122.nip.io/api/books \
title="The Player of Games" author="Iain M. Banks"
Esperando a seguinte saída:
HTTP/1.1 201
{
"author": "Iain M. Banks",
"id": 1,
"title": "The Player of Games"
}
6. Dimensionando o aplicativo
Vamos dimensionar a implantação para executar 2 instâncias:
oc scale --replicas=2 dc spring-boot-bootstrap
E podemos usar as mesmas etapas anteriores, para assistir a implantação, obter as rotas e testar o terminal.
O Openshift fornece uma ampla gama de opções paramanaging performance and scaling além do escopo deste artigo.
7. Conclusão
Neste tutorial, nós:
-
Instalou e configurou as ferramentas de desenvolvimento Openshift e o ambiente local
-
Implantou um serviço MySQL
-
Criou uma configuração do ConfigMap and Deployment para fornecer propriedades de conexão com o banco de dados
-
Criamos e implantamos um contêiner para nosso aplicativo Spring Boot configurado e
-
Testou e dimensionou o aplicativo.
Para obter mais detalhes, verifiquethe detailed Openshift documentation.
O código-fonte completo de nossos exemplos aqui é, como sempre,over on GitHub.