Por: JJ Asghar.
Atualizado em: 15 de maio de 2019. | Publicado em: 14 de maio 2019.
Resumo
Neste padrão de código, vamos demonstrar outro cenário onde você poderá implementar uma aplicação simples para o Kubernetes. Utilizaremos o COBOL (sigla de Common Business Oriented Language) para demonstrar como empresas ou organizações podem modernizar as suas aplicações legadas com a ajuda do Kubernetes.
Descrição
Se a sua empresa ou organização possui uma aplicação legada e deseja começar a investigar o processo de desenvolvimento nativo na nuvem, então você está no caminho certo. Tirar proveito do Kubernetes e da nuvem pode ajudar a sua organização a se modernizar e a proteger melhor os seus sistemas e dados, ao mesmo tempo em que permite simplificar o trabalho sem atrasar o front-end voltado para o cliente.
Neste padrão de código, tomaremos o COBOL e o Kubernetes como exemplos para mostrar como você pode compilar aplicações exatamente como faria em um mainframe com um pouco de trabalho de engenharia. Este padrão de código mostra o quão fácil é conseguir que uma aplicação COBOL legada seja construída e implementada como um trabalho em lote para o IBM Cloud Kubernetes Service.
Quando você completar este padrão de código, você saberá como:
- Construir contêineres Docker localmente;
- Testar um contêiner Docker básico;
- Enviar um contêiner Docker a um registro remoto;
- Configurar o Kubernetes para extrair e executar uma aplicação COBOL Hello World de um registro remoto.
Fluxo
Diagrama da arquitetura
- 1. Uma estação de trabalho local é instalada com o Docker CE;
- 2. O usuário cria um namespace no IBM Cloud Container Registry;
- 3. Após a vinculação bem sucedida no IBM Cloud, o usuário solicita um cluster IBM Cloud Kubernetes;
- 4. Os testes são feitos na estação de trabalho local;
- 5. O usuário então executa o trabalho no serviço Kubernetes.
Instruções
Pronto para começar? Para instruções detalhadas, consulte o README.
Executando o COBOL em um cluster do Kubernetes
Neste padrão de código, vamos construir um contêiner Docker com uma simples aplicação COBOL Hello World utilizando o Kubernetes e o Docker. Construiremos um contêiner Docker localmente, o testaremos, o enviaremos para um registro e, depois, o arrastaremos para um cluster remoto do Kubernetes à espera do nosso trabalho.
Quando você tiver completado este padrão de código, você entenderá como:
- Construir contêineres de Docker localmente;
- Testar um recipiente Docker básico;
- Enviar um contêiner Docker para um registro remoto;
- Configurar o Kubernetes para obter e executar uma aplicação de um registro remoto COBOL Hello World.
Passos
- 1. Instale o Docker Community Edition;
- 2. Clone o Repositório Localmente;
- 3. Instale o IBM Cloud CLI;
- 4. Crie o seu namespace;
- 5. Construa o seu contêiner COBOL;
- 6. Teste o seu contêiner COBOL localmente;
- 7. Crie e conecte-se ao cluster IBM Cloud Kubernetes;
- 8. Execute um trabalho no Kubernetes.
1. Instale o Docker Community Edition
Comece instalando a edição Docker-CE em sua estação de trabalho local. Existem duas edições principais do Docker, e gostaríamos de aproveitar a oportunidade para falar sobre as diferentes versões. Primeiro, temos o Docker Community Edition – ou Docker-ce – e o Docker Enterprise Edition ou Docker-ee. Ambas possuem vantagens e são destinadas a diferentes casos de uso. Nós sugerimos fortemente que, depois de você percorrer a documentação presente aqui, que verifique se o Docker-CE é o correto para o seu caso de uso.
Alguns dos seguintes passos exigem que o comando docker-ee NÃO utilize o prefácio sudo, que é o comportamento padrão após a instalação. Para isso, faça o login como usuário root ou siga os passos opcionais de instalação listados aqui.
2. Clone o repositório localmente
Clone este repositório de git na sua estação de trabalho local.
$ git clone https://github.com/IBM/kubernetes-cobol
3. Instale o IBM Cloud CLI
Antes de continuar, certifique-se de ter uma conta IBM Cloud ativa, tal como você já deve possuir o IBM Cloud CLI trabalhando na sua máquina. Para saber mais sobre o IBM Cloud Container Registry e como ativar uma conta na IBM Cloud, visite o site. Para instalar o IBM CLoud CLI, siga as seguintes instruções.
4. Crie o seu namespace
A seguir, crie um namespace no IBM Cloud Container Registry para armazenar as suas imagens do Docker. Entre na IBM Cloud através do CLI e, depois, execute os seguintes comandos. Vamos chamar o nosso namespace de registro de contêineres de "docker_cobol" como nosso exemplo.
OBSERVAÇÃO: o docker_cobol é um namespace universal, e você precisará alterá-lo de forma que O SEU seja diferente. Uma sugestão é que você utilize as iniciais do seu nome mais “_docker_cobol”, como no caso do autor deste tutorial, cujo namespace ficou jj_docker_cobol.
$ ibmcloud login
$ ibmcloud cr namespace-add docker_cobol
$ ibmcloud cr namespace-list | grep docker_cobol # uma prova real para conferir se o namespace foi criado corretamente
5. Construa o seu contêiner COBOL
Construa o contêiner Docker em sua estação de trabalho local. Isso exigirá alguns passos. Nós o acompanharemos através de cada um deles. Primeiro, mude o diretório do docker/. É aconselhável que você construa o seu contêiner e o identifique com uma tag significativa. Utilizando o registro IBM Cloud, você poderá construir o contêiner e também enviá-lo para um registro com um único comando. Nós vamos usar o namespace que criamos acima, chamar o contêiner de hello_world e marcá-lo com a tag v1.
$ cd docker/
$ ibmcloud cr login
$ ibmcloud cr build --tag us.icr.io/docker_cobol/hello_world:v1 ./
Sending build context to Docker daemon 2.56kB
Step 1/11 : FROM centos:latest
latest: Pulling from library/centos
8ba884070f61: Pull complete
Digest: sha256:8d487d68857f5bc9595793279b33d082b03713341ddec91054382641d14db861
Status: Downloaded newer image for centos:latest
---> 9f38484d220f
Step 2/11 : ENV GMP_VERSION=6.0.0
---> Running in 2fb58cad59c6
Removing intermediate container 2fb58cad59c6
---> fdbd9fe6be02
Step 3/11 : ENV GNU_COBOL=1.1
---> Running in 31dc23ee79b3
Removing intermediate container 31dc23ee79b3
---> 96ad047e4fd5
[-- snip --]
O push se refere ao repositório [us.icr.io/docker_cobol/hello_world]
f3eaacc5c5c1: Pushed
cdf3deb1ef52: Pushed
98290c1d657b: Pushed
438a70293769: Pushed
166cbcd2bc5d: Pushed
cc201d7335e0: Pushed
d69483a6face: Pushed
v1: digest: sha256:9dac5ddf1210b899bf3fd75e263bc5a5854ade2141ec2abb6f3e6bf5c59b3539 size: 1785
$
6. Teste o seu contêiner COBOL localmente
Depois de uma construção bem sucedida, vamos testar o contêiner em nossa máquina local. Vá em frente e execute o seguinte comando para puxá-lo do seu namespace local e rodá-lo em sua estação de trabalho local.
Agora que temos o contêiner em nossa estação de trabalho local, vamos conduzir alguns testes. Para isso, vamos utilizar um software chamado InSpec. Prossiga e instale o software a partir da página oficial. Depois disso, mude o diretório para o diretório inspec/ e edite o arquivo 01-docker.rb para substituir o "docker_cobol" pelo namespace correto previamente criado.
$ cd inspec/
$ nano 01-docker.rb # dentro do arquivo, substitua o namespace de exemplo "docker_cobol" pelo namespace criado anteriormente
$ inspec exec 01-docker.rb
Profile: tests from 01-docker.rb (tests from 01-docker.rb)
Version: (not specified)
Target: local://
# with repository == "ubuntu" tag == "12.04"
? should not exist
# with repository == "us.icr.io/docker_cobol/hello_world" tag == "v1"
? should exist
Command: `docker run us.icr.io/docker_cobol/hello_world:v1`
? stdout should eq "Hello world!\n"
? stderr should eq ""
? exit_status should eq 0
Test Summary: 5 successful, 0 failures, 0 skipped
$
Existem diversos testes que você pode escrever e usar para verificar os seus contêineres Docker, e sugerimos que você dê uma olhada na documentação oficial aqui. Nós temos alguns testes no arquivo 01-docker.rb, e é aconselhável que você o verifique para ver as opções de algumas provas reais.
7. Crie e conecte-se ao cluster IBM Cloud Kubernetes
Caso tenhamos uma construção bem sucedida na IBM Cloud, para rodar o resultado e ver o Hello World!, precisaremos solicitar um cluster IBM Cloud Kubernetes. Para isso, execute os seguintes comandos. Você pode executar um cluster "Free Tier" aqui para este padrão de código. Isso levará alguns minutos e é possível verificar o status do processo pelo segundo comando.
$ ibmcloud ks cluster create classic --name cobol_docker
$ ibmcloud ks clusters | grep cobol_docker
Quando o cluster estiver completo e em estado normal, nós podemos nos conectar a ele. Você poderá se conectar através dos seguintes comandos e executar o segundo comando como uma prova real.
$ ibmcloud ks cluster config --cluster cobol_docker
OK
O download da configuração para o cobol_docker foi realizado com sucesso.
Contexto para o cobol_docker adicionado ao arquivo kubeconfig atual.
Agora você pode executar os comandos 'kubectl' no seu cluster. Por exemplo, rode o comando 'kubectl get nodes'.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
10.186.59.93 Ready 1d v1.16.9+IKS
Agora que você tem seu cluster e seu contêiner configurados no IBM Cloud Container Registry, devemos criar algumas chaves para permitir que nosso cluster do Kubernetes acesse o Registry e solicite a nossa configuração.
$ ibmcloud iam service-id-create docker_cobol-service-id --description "COBOL Kubernetes service"
$ ibmcloud iam service-policy-create docker_cobol-service-id --roles Manager --service-name container-registry
$ ibmcloud iam service-api-key-create docker_cobol-api-key docker_cobol-service-id --description "API key for COBOL Kubernetes service"
#
# Anote a chave API criada e a coloque como
#
$ kubectl create secret docker-registry docker-cobol-registry-secret \
--docker-server=us.icr.io \
--docker-username=iamapikey \
--docker-password=
--docker-email=null
8. Execute um trabalho no Kubernetes
Em seguida, mude o diretório para job directory e abra o job.yml. Você verá o docker_cobol e precisará editá-lo para o seu namespace. Depois disso, você precisará aplicar o seu job em lote.
$ cd job/
$ nano job.yml # lembre-se de substituir o docker_cobol pelo namespace criado anteriormente
$ kubectl apply -f job.yml
job.batch/cobol-docker-job created
Por fim, para verificar a sua implementação, você vai precisar fazer o seguinte para ver o Hello World!. A maneira mais fácil seria executar os comandos a seguir para ver o pod Completed e, depois, rodar o comando logs para verificar se ele tem o resultado que estamos esperando.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
cobol-docker-job-mlggk 0/1 Completed 0 40s
$ kubectl logs cobol-docker-job-mlggk
Hello World!
Solução de Problemas
Caso você receba a mensagem de erro dizendo que não foi possível encontrar o recurso 'us.icr.io/docker_cobol/hello_world'
Certifique-se de substituir "docker_cobol" pelo seu próprio namespace, conforme discutido na seção 'Crie o seu namespace'. Se o erro persistir, pode ser que ele esteja relacionado a uma divergência de versão (por exemplo: Unable to find image 'us.icr.io/docker_cobol/hello_world:latest'). Neste último caso, tente mencionar explicitamente ":v1" após o nome do recurso:
$ docker run us.icr.io/docker_cobol/hello_world:v1
Licença
Este padrão de código é licenciado sob a Licença Apache, Versão 2. Objetos de código de terceiros empregados dentro deste padrão de código são licenciados por seus respectivos provedores, de acordo com as suas próprias licenças separadas. As contribuições estão sujeitas ao Certificado de Origem do Desenvolvedor, Versão 1.1 e à Licença Apache, Versão 2.
...
Quer ler mais conteúdo especializado de programação? Conheça a IBM Blue Profile e tenha acesso a matérias exclusivas, novas jornadas de conhecimento e testes personalizados. Confira agora mesmo, consiga as badges e dê um upgrade na sua carreira
Categorias