Kubernetes: Usando Kubernetes na IBM Cloud: Difference between revisions

From Wiki
 
(11 intermediate revisions by the same user not shown)
Line 37: Line 37:
* Via linha de comando
* Via linha de comando


  ibmcloud cs cluster-create --name <name-of-cluster>
  ibmcloud ks cluster-create --name <name-of-cluster>


* Via console
* Via console


: Vá no endereço https://console.bluemix.net/catalog/ e localize a entrada '''IBM Cloud Kubernetes Service'''.
: Vá no endereço https://cloud.ibm.com/clusters/ e localize a entrada '''IBM Cloud Kubernetes Servivces'''.
<br>
<br>
<br>
<br>
<br>
<br>
= Deploy no K8s na IBM Cloud=
1) Login na IBM Cloud
ibmcloud login
2) Pegando o ip do cluster
Estou usando a versão free, então vou pegar o ip.
ibmcloud ks clusters --cluster <CLUSTER_NAME>
Com o resultado
ID                                                      IP Público        IP Particular    Tipo  Estado  Status  Zona    Versão
kube-brl8ua4f0d7u1d9g9lt0-ebassok8scl-default-00000015  '''159.122.179.120'''  10.144.185.225  free  normal  Ready    mil01  1.18.4_1517
Guarde o IP Público para ser usado abaixo
== Deploy de um nginx no K8s na IBM Cloud==
1)  Iniciando a aplicação
kubectl run nginx --image nginx
2) Verifique o status pelo comando
kubectl get pods
3) Quando o status estiver como RUNNING, execute
kubectl expose pod nginx --type="NodePort" --port=80
4) Pegando a porta do serviço
kubectl get svc
Com o resultado
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP  PORT(S)          AGE
kubernetes        ClusterIP  172.21.0.1      <none>        443/TCP          5d20h
liberty            NodePort    172.21.241.213  <none>        9080:31943/TCP  5d18h
nginx              NodePort    172.21.177.201  <none>        80:'''30965'''/TCP    6m10s
nginx-service-np  NodePort    172.21.123.52    <none>        8082:30000/TCP  5d19h
Vou acessar usando o IP Público mais a porta
== Deploy do echo server (Nginx) ==
2)  Iniciando a aplicação
kubectl run my-echo --image gcr.io/google_containers/echoserver:1.8
3) Verifique o status pelo comando
kubectl get pods
4) Quando o status estiver como RUNNING, execute
kubectl expose pod my-echo --type=NodePort --port=8080
5) Pegando a porta do serviço
kubectl get svc
Vou acessar usando o IP Público mais a porta
== Deploy do liberty (java) ==
2)  Iniciando a aplicação
kubectl run my-liberty --image open-liberty --port=9080
3) Verifique o status pelo comando
kubectl get pods
4) Quando o status estiver como RUNNING, execute
kubectl expose pod my-liberty --type=NodePort --port=9080
5) Pegando a porta do serviço
kubectl get svc
Vou acessar usando o IP Público mais a porta


= Deploy da sua Primeira aplicação no IBM Cloud=
= Deploy da sua Primeira aplicação no IBM Cloud=
Line 106: Line 197:


Anotar o ip público do '''worker'''.
Anotar o ip público do '''worker'''.
<br>
<br>
<br>
<br>


Line 144: Line 237:
  cd ..
  cd ..
  cd Lab2
  cd Lab2
<br>


== Adicionando Replicas ==
== Adicionando Replicas ==
Line 225: Line 319:


  ibmcloud cf services
  ibmcloud cf services


==Bind do serviço para o Cluster==
==Bind do serviço para o Cluster==
Line 235: Line 330:
   
   
  kubectl get secrets.
  kubectl get secrets.


==Criando pods e services==
==Criando pods e services==
Line 261: Line 357:


Your secret has now been created. Note that for this lab, this has been done for you.
Your secret has now been created. Note that for this lab, this has been done for you.


==Verificando a aplicação==
==Verificando a aplicação==

Latest revision as of 19:03, 23 June 2020

Existe um curso sobre Kubernetes na IBM Cloud, o link é o seguinte https://courses.cognitiveclass.ai/

Os exemplos do curso estão no GitHub https://github.com/IBM/container-service-getting-started-wt


Importante: os comandos bx ou bluemix foram depreciados, agora utilizar o comando ibmcloud

Pré-requisitos

1) Instalando os pré-requisitos no MacOS

brew install kubectl 
brew cask install ibm-cloud-cli
brew install cfssl
brew install docker

2) Login na IBM Cloud

 ibmcloud login

Para Login Federado ou para Funcionário IBM use "ibmcloud login -sso"

3) Adicionando os plugins para criar e gerenciar clusters Kubernetes

ibmcloud plugin install container-service -r Bluemix
ibmcloud plugin install container-registry -r Bluemix

4) Listando plug-ins instalados...

ibmcloud plugin list




Provisionando um Cluster na IBM Cloud

  • Via linha de comando
ibmcloud ks cluster-create --name <name-of-cluster>
  • Via console
Vá no endereço https://cloud.ibm.com/clusters/ e localize a entrada IBM Cloud Kubernetes Servivces.




Deploy no K8s na IBM Cloud

1) Login na IBM Cloud

ibmcloud login

2) Pegando o ip do cluster

Estou usando a versão free, então vou pegar o ip.

ibmcloud ks clusters --cluster <CLUSTER_NAME>

Com o resultado

ID                                                       IP Público        IP Particular    Tipo   Estado   Status   Zona    Versão
kube-brl8ua4f0d7u1d9g9lt0-ebassok8scl-default-00000015   159.122.179.120   10.144.185.225   free   normal   Ready    mil01   1.18.4_1517

Guarde o IP Público para ser usado abaixo

Deploy de um nginx no K8s na IBM Cloud

1) Iniciando a aplicação

kubectl run nginx --image nginx

2) Verifique o status pelo comando

kubectl get pods

3) Quando o status estiver como RUNNING, execute

kubectl expose pod nginx --type="NodePort" --port=80

4) Pegando a porta do serviço

kubectl get svc

Com o resultado

NAME               TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes         ClusterIP   172.21.0.1       <none>        443/TCP          5d20h
liberty            NodePort    172.21.241.213   <none>        9080:31943/TCP   5d18h
nginx              NodePort    172.21.177.201   <none>        80:30965/TCP     6m10s
nginx-service-np   NodePort    172.21.123.52    <none>        8082:30000/TCP   5d19h


Vou acessar usando o IP Público mais a porta


Deploy do echo server (Nginx)

2) Iniciando a aplicação

kubectl run my-echo --image gcr.io/google_containers/echoserver:1.8

3) Verifique o status pelo comando

kubectl get pods

4) Quando o status estiver como RUNNING, execute

kubectl expose pod my-echo --type=NodePort --port=8080


5) Pegando a porta do serviço

kubectl get svc


Vou acessar usando o IP Público mais a porta

Deploy do liberty (java)

2) Iniciando a aplicação

kubectl run my-liberty --image open-liberty --port=9080

3) Verifique o status pelo comando

kubectl get pods

4) Quando o status estiver como RUNNING, execute

kubectl expose pod my-liberty --type=NodePort --port=9080


5) Pegando a porta do serviço

kubectl get svc


Vou acessar usando o IP Público mais a porta

Deploy da sua Primeira aplicação no IBM Cloud


No Lab1, temos o deploy de uma aplicação que exibe o hostname. Os arquivos principais do lab são:

  • Dockerfile : define os atributos da image. Busca uma image com o Node.js e instala a aplicação app.js
  • app.js : Aplicação em Node.js que pronta o hostmame
  • package.json: define as dependências necessários pela aplicação app.js

Clonando os exemplos do Github

mkdir Curso
cd Curso
git clone https://github.com/IBM/container-service-getting-started-wt.git



Push da imagem para o IBM Cloud Container Registry

1) Começando o Lab1

cd Lab1

2) Login na IBM Cloud

ibmcloud login --sso

3) Login na IBM Cloud Container Registry.

ibmcloud cr login

4) Criando uma namespace

ibmcloud cr namespace-add <my_namespace>

namespaces é um forma de organização de cluster. No dia a dia, seria projeto1_prod, projeto1_dev, projeto2_prod, ...

5) Criando uma docker image

docker build --tag registry.ng.bluemix.net/<my_namespace>/hello-world:1 .

6) Verificando a imagem

docker images

7) Fazendo o push da image

docker push registry.ng.bluemix.net/<my_namespace>/hello-world:1

8) Verifique que o cluster está pronto pra uso

ibmcloud cs clusters

verificar se o estado está NORMAL

ibmcloud cs workers <yourclustername>

Verifica se os workers estão no estado NORMAL com o status READY

Anotar o ip público do worker.


Deploy da aplicação

1) Execute o comando e defina as variáveis de ambiente

ibmcloud cs cluster-config <yourclustername>

Exemplo no Mac:

export KUBECONFIG=/Users/<user_name>/.bluemix/plugins/container-service/clusters/pr_firm_cluster/kube-config-prod-par02-pr_firm_cluster.yml

2) Iniciando a aplicação

kubectl run hello-world --image=registry.ng.bluemix.net/<my_namespace>/hello-world:1

3) Verifique o status pelo comando

kubectl get pods

4) Quando o status estiver como RUNNING, execute

kubectl expose deployment/hello-world --type="NodePort" --port=8080


Com o navegador, acesse o ip e porta para visualizar

Outros comandos: Para achar a porta, Para remover o Deployment , Para remover o Service


Escalando e atualizando aplicações -- services, replica sets e health checks

1) Começando o Lab2

cd ..
cd Lab2


Adicionando Replicas

  • Adicionando replicas via linha de comando

Adicionando via linha de comando

$ kubectl scale --replicas=10 deployment hello-world


  • Adicionando replicas via arquivo de configuração

Adicionando via edição da configuração

kubectl edit deployment/<name-of-deployment>

Alterar o item replicas

...
   spec:
     replicas: 1

Salve e feche o arquivo

Verificando o rollout da alteração

Verificando o rollout da alteração

kubectl rollout status deployment/hello-world

Após o rollout verifique se os pods estão executando.

kubectl get pods

o STATUS deve ser RUNNING.


Deploy de uma aplicação com IBM Watson

1) Começando o Lab3

cd ../Lab3

Construindo as images do Watson

1) Build das images

docker build -t registry.ng.bluemix.net/<namespace>/watson ./watson

docker build -t registry.ng.bluemix.net/<namespace>/watson-talk ./watson-talk

2) push da image Watson para o IBM Cloud Container Registry.

docker push registry.ng.bluemix.net/<namespace>/watson

docker push registry.ng.bluemix.net/<namespace>/watson-talk

3) Edite o arquivo watson-deployment.yml e altere a tag <namespace> para a que você está utilizando


Criando uma instância do Watson service

1) Verifique o space e o org

ibmcloud login

Se quiser alterar execute o comando ibmcloud target --cf

2) Criando o serviço

ibmcloud cf create-service tone_analyzer standard tone

onde tone é o nome do serviço

Note: When you add the Tone Analyzer service to your account, a message is displayed that the service is not free. If you limit your API calls, this course does not incur charges from the Watson service.

3) Conferindo se o serviço foi criado

ibmcloud cf services


Bind do serviço para o Cluster

1) Execute

ibmcloud cs cluster-service-bind <name-of-cluster> default tone

2) Verifique os secrets criado pelo comando anterior

kubectl get secrets.


Criando pods e services

Agora que o serviço está vinculado ao cluster, vamos expor o secret do seu pod para que ele possa utilizar o serviço. Para fazer isso, crie um Secret datastore como parte de sua configuração de implantação.

Isso foi feito para você no watson-deployment.yml:

   volumeMounts:
           - mountPath: /opt/service-bind
             name: service-bind-volume
     volumes:
       - name: service-bind-volume
         secret:
           defaultMode: 420
           secretName: binding-tone
           # from the kubectl get secrets command above

1) Construa a aplicação através do arquivo watson-deployment.yml:

kubectl create -f watson-deployment.yml

2) Verificando que o pod foi criado

kubectl get pods

Your secret has now been created. Note that for this lab, this has been done for you.


Verificando a aplicação

1) Verifique o Kubernetes via:

  • via Kubernetes dashboard na IBM Cloud
  • via comando kubectl
kubectl get pods
kubectl get deployments
kubectl get services

2) Anote o IP público da aplicação através do output do comando

ibmcloud cs workers <name-of-cluster>

3) Testando a aplicação no navegador

http://<public-IP>:30080/analyze/"Today is a beautiful day"

Será mostrado um JSON na tela

Ver também