Database
 sql >> Base de Dados >  >> RDS >> Database

Usando Jenkins com Kubernetes AWS, Parte 3


No primeiro artigo, “Using Jenkins with Kubernetes AWS, Part 1”, sobre como automatizar a instalação do Kubernetes com o Jenkins, instalamos o Jenkins no CoreOS, criamos os artefatos de pré-requisito para instalar o Kubernetes e criamos um nó do Jenkins. No segundo artigo, “Usando Jenkins com Kubernetes AWS, Parte 2”, configuramos um Jenkinsfile e criamos um pipeline Jenkins. Neste artigo, executaremos o pipeline do Jenkins para instalar o Kubernetes e, posteriormente, testar o cluster do Kubernetes. Este artigo tem as seguintes seções:
  • Executando o pipeline do Jenkins
  • Teste do cluster Kubernetes
  • Conclusão

Executando o pipeline do Jenkins


Clique em Criar agora para executar o Jenkins Pipeline, conforme mostrado na Figura 1.


Figura 1: Build Now inicia o pipeline Jenkins

O Jenkins Pipeline é iniciado e uma barra de progresso indica o progresso do pipeline. Uma Visão de palco para os vários estágios no pipeline também é exibido, conforme mostrado na Figura 2. O Kube-aws O estágio de renderização no Stage View tem um link “pausado” porque solicitamos a entrada do usuário para a contagem de trabalhadores (e a entrada do usuário do tipo de instância, que deve ser solicitada posteriormente) no Jenkinsfile. Clique no link “pausado”.


Figura 2: Obtendo o endereço IP público

Na saída do console para o pipeline do Jenkins, clique em Entrada solicitada link, como mostrado na Figura 3.


Figura 3: Entrada solicitada para o número de nós

Um número de nós A caixa de diálogo é exibida, solicitando a entrada do usuário para o número de nós, conforme mostrado na Figura 4. Um valor padrão conforme configurado no Jenkinsfile também é definido. Clique em Continuar depois de especificar um valor.


Figura 4: Especificando o número de nós

O pipeline continua em execução e novamente é pausado em outra solicitação de entrada para o tipo de instância. Clique em Inserção solicitada , como mostrado na Figura 5.


Figura 5: Entrada solicitada para o tipo de instância

O tipo de instância diálogo é exibido (veja a Figura 6). Selecione o valor padrão (ou especifique um valor diferente) e clique em Continuar.


Figura 6: Especificando o tipo de instância

O pipeline continua a ser executado. No estágio Deploy Cluster, outro link Input request é apresentado, conforme mostrado na Figura 7. Clique no link.


Figura 7: Entrada solicitada para o cluster deve ser implantado

No cluster deve implantar? diálogo, selecione o valor padrão de “yes” e clique em Proceed, conforme mostrado na Figura 8.


Figura 8: Deve implantar o cluster?

O pipeline continua a ser executado. A criação dos recursos da AWS para um cluster do Kubernetes pode demorar um pouco, conforme indicado pela mensagem na saída do console mostrada na Figura 9.


Figura 9: Criando recursos da AWS

O pipeline é executado até a conclusão. Uma mensagem “SUCCESS” indica que o pipeline foi executado com sucesso, conforme mostrado na Figura 10.


Figura 10: Execução de pipeline do Jenkins concluída com sucesso

A visualização Stage para o Jenkins Pipeline exibe os vários estágios do pipeline concluídos, conforme mostrado na Figura 11. A visualização Stage inclui links para Última compilação, Última compilação estável, Última compilação bem-sucedida e Última compilação concluída.


Figura 11: Visualização do Palco

Clique em Full Stage View para exibir a visualização completa do palco separadamente, conforme mostrado na Figura 12.


Figura 12: Selecionando a visualização de palco completo

A Full Stage View é exibida, conforme mostrado na Figura 13.


Figura 13: Visualização completa do palco

No Dashboard, o ícone adjacente ao Jenkins Pipeline fica verde para indicar a conclusão bem-sucedida, conforme mostrado na Figura 14.


Figura 14: Jenkins Dashboard com Jenkins Pipeline listado como concluído com sucesso

Para exibir a saída do console, selecione Console Output for the Build, conforme mostrado na Figura 15.


Figura 15: Histórico de compilação>Saída do console

A saída do console é exibida (veja a Figura 16).


Figura 16: Saída do console

Uma saída de console mais detalhada está listada no seguinte segmento de código:
Started by user Deepak Vohra
[Pipeline] node
Running on jenkins in /var/jenkins/workspace/install-kubernetes
[Pipeline] {
   [Pipeline] stage (set env)
   Using the 'stage' step without a block argument is deprecated
   Entering stage set env
   Proceeding
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + sudo yum install gnupg2
   Loaded plugins: priorities, update-motd, upgrade-helper
   Package gnupg2-2.0.28-1.30.amzn1.x86_64 already installed and
      latest version
   Nothing to do
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + gpg2 --keyserver pgp.mit.edu --recv-key FC8A365E
   gpg: directory '/home/ec2-user/.gnupg' created
   gpg: new configuration file '/home/ec2-user/.gnupg/gpg.conf'
        created
   ...
   ...
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + gpg2 --fingerprint FC8A365E
   pub   4096R/FC8A365E 2016-03-02 [expires: 2021-03-01]
         Key fingerprint = 18AD 5014 C99E F7E3 BA5F  6CE9 50BD
                           D3E0 FC8A 365E
   uid   [ unknown] CoreOS Application Signing Key
         <[email protected]>
   sub   2048R/3F1B2C87 2016-03-02 [expires: 2019-03-02]
   sub   2048R/BEDDBA18 2016-03-08 [expires: 2019-03-08]
   sub   2048R/7EF48FD3 2016-03-08 [expires: 2019-03-08]

   [Pipeline] sh
   [install-kubernetes] Running shell script
   + wget https://github.com/coreos/coreos-kubernetes/releases/
      download/v0.7.1/kube-aws-linux-amd64.tar.gz
   --2016-11-29 21:22:04-- https://github.com/coreos/
      coreos-kubernetes/releases/download/v0.7.1/
      kube-aws-linux-amd64.tar.gz
   Resolving github.com (github.com)... 192.30.253.112,
      192.30.253.113
   Connecting to github.com (github.com)|192.30.253.112|:443...
      connected.
   HTTP request sent, awaiting response... 302 Found
   Location: https://github-cloud.s3.amazonaws.com/releases/
      41458519/309e294a-29b1-
   ...
   ...
   2016-11-29 21:22:05 (62.5 MB/s) - 'kube-aws-linux-amd64.tar.gz'
      saved [4655969/4655969]

   [Pipeline] sh
   [install-kubernetes] Running shell script
   + wget https://github.com/coreos/coreos-kubernetes/releases/
   download/v0.7.1/kube-aws-linux-amd64.tar.gz.sig
   --2016-11-29 21:22:05--  https://github.com/coreos/
      coreos-kubernetes/releases/download/v0.7.1/kube-aws-linux-
      amd64.tar.gz.sig
   Resolving github.com (github.com)... 192.30.253.113,
      192.30.253.112
   Connecting to github.com (github.com)|192.30.253.113|:443...
      connected.
   HTTP request sent, awaiting response... 302 Found
   Location: https://github-cloud.s3.amazonaws.com/releases/
      41458519/0543b716-2bf4-
   ...
   ...
   Saving to: 'kube-aws-linux-amd64.tar.gz.sig'

   0K                          100% 9.21M=0s

   2016-11-29 21:22:05 (9.21 MB/s) -
      'kube-aws-linux-amd64.tar.gz.sig' saved [287/287]

   [Pipeline] sh
   [install-kubernetes] Running shell script
   + gpg2 --verify kube-aws-linux-amd64.tar.gz.sig kube-aws-
   linux-amd64.tar.gz
   gpg: Signature made Mon 06 Jun 2016 09:32:47 PM UTC using RSA
        key ID BEDDBA18
   gpg: Good signature from "CoreOS Application Signing Key
        <[email protected]>" [unknown]
   gpg: WARNING: This key is not certified with a trusted
        signature!
   gpg: There is no indication that the signature belongs to the
        owner.
   Primary key fingerprint: 18AD 5014 C99E F7E3 BA5F  6CE9 50BD
                            D3E0 FC8A 365E
      Subkey fingerprint: 55DB DA91 BBE1 849E A27F  E733 A6F7
                          1EE5 BEDD BA18
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + tar zxvf kube-aws-linux-amd64.tar.gz
   linux-amd64/
   linux-amd64/kube-aws
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + sudo mv linux-amd64/kube-aws /usr/local/bin
   [Pipeline] sh
   [install-kubernetes] Running shell script
   ...
   ...
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + aws ec2 create-volume --availability-zone us-east-1c
   --size 10 --volume-type gp2
   {
      "AvailabilityZone": "us-east-1c",
      "Encrypted":        false,
      "VolumeType":       "gp2",
      "VolumeId":         "vol-b325332f",
      "State":            "creating",
      "Iops":             100,
      "SnapshotId":       "",
      "CreateTime":       "2016-11-29T21:22:07.949Z",
      "Size":             10
   }
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + aws ec2 create-key-pair --key-name kubernetes-coreos
   --query KeyMaterial --output text
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + chmod 400 kubernetes-coreos.pem
   [Pipeline] stage (Kube-aws init)
   Using the 'stage' step without a block argument is deprecated
   Entering stage Kube-aws init
   Proceeding
   [Pipeline] deleteDir
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + mkdir coreos-cluster
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + cd coreos-cluster
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + kube-aws init --cluster-name=kubernetes-coreos-cluster
   --external-dns-name=NOSQLSEARCH.COM --region=us-east-1
   --availability-zone=us-east-1c --key-name=kubernetes-coreos
   --kms-key-arn=arn:aws:kms:us-east-1:672593526685:key/
      c9748fda-2ac6-43ff-a267-d4edc5b21ad9
   Success! Created cluster.yaml

   Next steps:
   1. (Optional) Edit cluster.yaml to parameterize the cluster.
   2. Use the "kube-aws render" command to render the stack
      template.
   [Pipeline] stage (Kube-aws render)
   Using the 'stage' step without a block argument is deprecated
   Entering stage Kube-aws render
   Proceeding
   [Pipeline] input
   Input requested
   Approved by Deepak Vohra
   [Pipeline] input
   Input requested
   Approved by Deepak Vohra
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + kube-aws render
   Success! Stack rendered to stack-template.json.

   Next steps:
   1. (Optional) Validate your changes to cluster.yaml with
      "kube-aws validate"
   2. (Optional) Further customize the cluster by modifying
      stack-template.json or files in ./userdata.
   3. Start the cluster with "kube-aws up".
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + sed -i 's/#workerCount: 1/workerCount: 3/' cluster.yaml
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + sed -i 's/#workerInstanceType: m3.medium/
      workerInstanceType: t2.micro/' cluster.yaml
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + kube-aws validate
   Validating UserData...
   UserData is valid.

   Validating stack template...
   Validation Report: {
      Capabilities: ["CAPABILITY_IAM"],
      CapabilitiesReason: "The following resource(s) require
         capabilities: [AWS::IAM::Role]",
      Description: "kube-aws Kubernetes cluster
         kubernetes-coreos-cluster"
   }
   stack template is valid.

   Validation OK!
   [Pipeline] stage (Archive CFN)
   Using the 'stage' step without a block argument is deprecated
   Entering stage Archive CFN
   Proceeding
   [Pipeline] step
   Archiving artifacts
   Recording fingerprints
   [Pipeline] stage (Deploy Cluster)
   Using the 'stage' step without a block argument is deprecated
   Entering stage Deploy Cluster
   Proceeding
   [Pipeline] input
   Input requested
   Approved by Deepak Vohra
   [Pipeline] echo
   Deploying Kubernetes cluster
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + kube-aws up
   Creating AWS resources. This should take around 5 minutes.
   Success! Your AWS resources have been created:
   Cluster Name:    kubernetes-coreos-cluster
   Controller IP:   34.193.183.134

   The containers that power your cluster are now being downloaded.

   You should be able to access the Kubernetes API once the
      containers finish downloading.
   [Pipeline] sh
   [install-kubernetes] Running shell script
   + kube-aws status
   Cluster Name:    kubernetes-coreos-cluster
   Controller IP:   34.193.183.134
   [Pipeline] step
   Archiving artifacts
   Recording fingerprints
   [Pipeline] }
[Pipeline]   // Node
[Pipeline] End of Pipeline
Finished: SUCCESS

Testando o cluster Kubernetes


Tendo instalado o Kubernetes, a seguir vamos testar o cluster executando algum aplicativo. Primeiro, precisamos configurar o Ip do Controlador no Nome DNS Público (o nosqlsearch.com domínio). Copie o IP do controlador da saída do console, conforme mostrado na Figura 17.


Figura 17: Obtendo o endereço IP público

O Ip do controlador Kubernetes também pode ser obtido no Console do EC2, conforme mostrado na Figura 18.


Figura 18: Obtendo o Ip do controlador Kubernetes

Adicione uma entrada A (Host) ao arquivo DNS Zone para o domínio nosqlsearch.com no provedor de hospedagem, conforme mostrado na Figura 19. Adicionar um registro A seria um pouco diferente para diferentes provedores de hospedagem.


Figura 19: Obtendo o endereço IP público

SSH Faça login no Kubernetes Master usando o Ip do Master.
ssh -i "kubernetes-coreos.pem" [email protected]

O prompt de comando do CoreOS é exibido, conforme mostrado na Figura 20.


Figura 20: Obtendo o endereço IP público

Instale o kubectl binários:
sudo wget https://storage.googleapis.com/kubernetes-release/
   release/v1.3.0/bin/linux/amd64/./kubectl
sudo chmod +x ./kubectl

Liste os nós:
./kubectl get nodes

Os nós do cluster Kubernetes são listados (consulte a Figura 21).


Figura 21: Obtendo o endereço IP público

Para testar o cluster, crie uma implantação para nginx composto por três réplicas.
kubectl  run nginx --image=nginx --replicas=3

Em seguida, liste as implantações:
kubectl get deployments

A implantação “nginx” deve ser listada, conforme mostrado na Figura 22.


Figura 22: Obtendo o endereço IP público

Liste os pods em todo o cluster:
kubectl get pods -o wide

Crie um serviço do tipo LoadBalancer do nginx desdobramento, desenvolvimento:
kubectl expose deployment nginx --port=80 --type=LoadBalancer

Liste os serviços:
kubectl get services

Os Pods de todo o cluster são listados, conforme mostrado na Figura 23. O serviço “nginx” é criado e listado incluindo o IP do cluster e o Ip externo.


Figura 23: Obtendo o endereço IP público

Invoque o nginx serviço no ip do cluster. O nginx a marcação HTML de saída do serviço é exibida, conforme mostrado na Figura 24.


Figura 24: Obtendo o endereço IP público

Conclusão


Em três artigos, discutimos a instalação do cluster Kubernetes usando um projeto Jenkins. Criamos um projeto Jenkins Pipeline com um Jenkinsfile para instalar o cluster. Um pipeline do Jenkins automatiza a instalação do Kubernetes, e o mesmo pipeline do Jenkins pode ser modificado conforme necessário e executado novamente para criar vários clusters do Kubernetes.