Kubernetes: Usando Kubernetes na IBM Cloud: Difference between revisions

From Wiki
 
(35 intermediate revisions by the same user not shown)
Line 3: Line 3:
Os exemplos do curso estão no GitHub https://github.com/IBM/container-service-getting-started-wt
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 =
= Pré-requisitos =


== Instalando os pré-requisitos ==
1) Instalando os pré-requisitos no MacOS
 
No MacOS


  brew install kubectl  
  brew install kubectl  
Line 15: Line 15:
  brew install docker
  brew install docker


== Login na IBM Cloud ==
2) Login na IBM Cloud


   ibmcloud login
   ibmcloud login
Line 21: Line 21:
Para Login Federado ou para Funcionário IBM use '''"ibmcloud login -sso"'''
Para Login Federado ou para Funcionário IBM use '''"ibmcloud login -sso"'''


== Install the IBM Cloud plug-ins==
3) Adicionando os plugins para criar e gerenciar clusters Kubernetes
 
Install the IBM Cloud Kubernetes Service plug-in to create Kubernetes clusters and manage worker nodes by installing the IBM Cloud Kubernetes Service plug-in:


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


Listando plug-ins instalados...
4) Listando plug-ins instalados...


  ibmcloud plugin list
  ibmcloud plugin list
<br>
<br>
<br>
= 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'''.
<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


: Nome do Plug-in                        Versão
3) Quando o status estiver como RUNNING, execute
: container-service/kubernetes-service  0.1.593


== Provisionando um Cluster na IBM Cloud ==
kubectl expose pod nginx --type="NodePort" --port=80
4) Pegando a porta do serviço


Vá no endereço https://console.bluemix.net/catalog/ e localize a entrada '''IBM Cloud Kubernetes Service'''.
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=
<br>
No Lab1, temos o deploy de uma aplicação que exibe o hostname. Os arquivos principais do lab são:


== Push da imagem para o IBM Cloud Container Registry ==
* '''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
Clonando os exemplos do Github


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


Login na IBM Cloud
== Push da imagem para o IBM Cloud Container Registry ==


bx login --sso
1) Começando o Lab1


Login na IBM Cloud Container Registry.
cd Lab1


bx cr login
2) Login na IBM Cloud


Criando uma namespace
ibmcloud login --sso


bx cr namespace-add <my_namespace>
3) Login na IBM Cloud Container Registry.


Criando uma docker image
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 .
  docker build --tag registry.ng.bluemix.net/<my_namespace>/hello-world:1 .


Verificando a imagem
6) Verificando a imagem


  docker images
  docker images


Fazendo o push da image
7) Fazendo o push da image


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


Verifique que o cluster está pronto pra uso
8) Verifique que o cluster está pronto pra uso
 
ibmcloud cs clusters


bx cs clusters
verificar se o estado está NORMAL
# verificar se o estado está normal
   
   
  bx cs workers <yourclustername>
  ibmcloud cs workers <yourclustername>
# Verifica se os workers estão no estado "Normal" com o status "Ready"
 
Verifica se os workers estão no estado NORMAL com o status READY


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


== Deploy da aplicação ==
== Deploy da aplicação ==


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


  bx cs cluster-config <yourclustername>
  ibmcloud cs cluster-config <yourclustername>


Exemplo no Mac
Exemplo no Mac:


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


Iniciando a aplicação
2) Iniciando a aplicação


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


Verifique o status pelo comando
3) Verifique o status pelo comando


  kubectl get pods
  kubectl get pods


Quando o status estiver como '''Running''', execute
4) Quando o status estiver como RUNNING, execute


  kubectl expose deployment/hello-world --type="NodePort" --port=8080
  kubectl expose deployment/hello-world --type="NodePort" --port=8080
Line 108: Line 227:


Outros comandos: [[Kubernetes:_Trabalhando_com_o_kubectl#Para_achar_a_porta|Para achar a porta]], [[Kubernetes:_Trabalhando_com_o_kubectl#Para_remover_o_Deployment|Para remover o Deployment]] , [[Kubernetes:_Trabalhando_com_o_kubectl#Para_remover_o_Service|Para remover o Service]]
Outros comandos: [[Kubernetes:_Trabalhando_com_o_kubectl#Para_achar_a_porta|Para achar a porta]], [[Kubernetes:_Trabalhando_com_o_kubectl#Para_remover_o_Deployment|Para remover o Deployment]] , [[Kubernetes:_Trabalhando_com_o_kubectl#Para_remover_o_Service|Para remover o Service]]
<br>
<br>


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


== Adicionando replicas via linha de comando ==
1) Começando o Lab2
 
cd ..
cd Lab2
<br>
 
== Adicionando Replicas ==
 
* Adicionando replicas via linha de comando


Adicionando via linha de comando
Adicionando via linha de comando
Line 118: Line 248:




== Adicionando replicas via arquivo de configuração ==
* Adicionando replicas via arquivo de configuração


Adicionando via edição da configuração
Adicionando via edição da configuração
Line 128: Line 258:
  ...
  ...
     spec:
     spec:
       replicas: 1
       '''replicas''': 1


Salve e feche o arquivo
Salve e feche o arquivo
Line 143: Line 273:


o STATUS deve ser RUNNING.
o STATUS deve ser RUNNING.
<br>
<br>
<br>
= 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 =
= Ver também =

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