Implantar um aplicativo de inicialização Spring no OpenShift

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.