Database
 sql >> Database >  >> RDS >> Database

Utilizzo di Jenkins con Kubernetes AWS, parte 3

Nel primo articolo, "Utilizzo di Jenkins con Kubernetes AWS, parte 1", sull'automazione dell'installazione di Kubernetes con Jenkins, abbiamo installato Jenkins su CoreOS, creato gli artefatti prerequisiti per l'installazione di Kubernetes e creato un nodo Jenkins. Nel secondo articolo, "Utilizzo di Jenkins con Kubernetes AWS, parte 2", abbiamo configurato un file Jenkins e creato una pipeline Jenkins. In questo articolo, eseguiremo la pipeline Jenkins per installare Kubernetes e successivamente testare il cluster Kubernetes. Questo articolo ha le seguenti sezioni:

  • Gestione della pipeline Jenkins
  • Test del cluster Kubernetes
  • Conclusione

Eseguire la pipeline Jenkins

Fai clic su Crea ora per eseguire Jenkins Pipeline, come mostrato nella Figura 1.


Figura 1: Build Now avvia la pipeline Jenkins

Viene avviata la Jenkins Pipeline e una barra di avanzamento indica l'avanzamento della pipeline. Una Vista per fasi viene visualizzato anche per le varie fasi della pipeline, come mostrato nella Figura 2. Il Kube-aws la fase di rendering nella visualizzazione stage ha un collegamento "in pausa" perché è stato richiesto l'input dell'utente per il conteggio dei lavoratori (e l'input dell'utente del tipo di istanza, che verrà richiesto successivamente) nel Jenkinsfile. Fai clic sul link "in pausa".


Figura 2: Ottenere l'indirizzo IP pubblico

Nell'output della console per la pipeline Jenkins, fai clic su Input richiesto collegamento, come mostrato nella Figura 3.


Figura 3: Input richiesto per numero di nodi

Un Numero di nodi viene visualizzata la finestra di dialogo, che richiede l'input dell'utente per il numero di nodi, come mostrato nella Figura 4. Viene inoltre impostato un valore predefinito come configurato nel file Jenkins. Fai clic su Procedi dopo aver specificato un valore.


Figura 4: Specificare il numero di nodi

La pipeline continua a essere eseguita e viene nuovamente messa in pausa a un'altra richiesta di input per il tipo di istanza. Fai clic su Input richiesto , come mostrato nella Figura 5.


Figura 5: Input richiesto per il tipo di istanza

Il Tipo di istanza viene visualizzata la finestra di dialogo (vedere la Figura 6). Seleziona il valore predefinito (o specifica un valore diverso) e fai clic su Procedi.


Figura 6: Specifica del tipo di istanza

La pipeline continua a funzionare. Nella fase Deploy Cluster, viene presentato un altro collegamento Input richiesto, come mostrato nella Figura 7. Fare clic sul collegamento.


Figura 7: Input richiesto per il cluster da distribuire

Nel cluster dovrebbe essere distribuito? finestra di dialogo, selezionare il valore predefinito "yes" e fare clic su Procedi, come mostrato nella Figura 8.


Figura 8: Dovrebbe distribuire il cluster?

La pipeline continua a funzionare. La creazione delle risorse AWS per un cluster Kubernetes potrebbe richiedere del tempo, come indicato dal messaggio nell'output della console mostrato nella Figura 9.


Figura 9: Creazione di risorse AWS

La pipeline viene completata. Un messaggio "SUCCESS" indica che la pipeline è stata eseguita correttamente, come mostrato nella Figura 10.


Figura 10: Jenkins Pipeline Run completato con successo

La visualizzazione della fase per la pipeline Jenkins mostra le varie fasi della pipeline che sono state completate, come mostrato nella Figura 11. La visualizzazione della fase include i collegamenti per Ultima build, Ultima build stabile, Ultima build riuscita e Ultima build completata.


Figura 11: Vista dello stage

Fare clic su Visualizzazione dello stage completo per visualizzare separatamente la visualizzazione dello stage completo, come mostrato nella Figura 12.


Figura 12: Selezione della visualizzazione a tutto schermo

Viene visualizzata la visualizzazione dello stage completo, come mostrato nella Figura 13.


Figura 13: Visualizzazione a tutto schermo

Nella Dashboard, l'icona adiacente alla Jenkins Pipeline diventa verde per indicare il completamento con successo, come mostrato nella Figura 14.


Figura 14: Dashboard Jenkins con Jenkins Pipeline indicato come completato con successo

Per visualizzare l'output della console, seleziona Console Output per la build, come mostrato nella Figura 15.


Figura 15: Cronologia build>Uscita console

Viene visualizzato l'output della console (vedere la Figura 16).


Figura 16: Uscita console

Un output della console più dettagliato è elencato nel seguente segmento di codice:

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

Test del cluster Kubernetes

Dopo aver installato Kubernetes, testeremo il cluster eseguendo alcune applicazioni. Innanzitutto, dobbiamo configurare l'Ip del controller sul nome DNS pubblico (il nosqlsearch.com dominio). Copia l'IP del controller dall'output della console, come mostrato nella Figura 17.


Figura 17: Ottenere l'indirizzo IP pubblico

L'Ip del controller Kubernetes può essere ottenuto anche dalla console EC2, come mostrato nella Figura 18.


Figura 18: Ottenere l'Ip del controller Kubernetes

Aggiungi una voce A (Host) al file della zona DNS per il dominio nosqlsearch.com presso il provider di hosting, come mostrato nella Figura 19. L'aggiunta di un record A sarebbe leggermente diversa per i diversi provider di hosting.


Figura 19: Ottenere l'indirizzo IP pubblico

SSH Accedi al Master Kubernetes utilizzando l'Ip del Master.

ssh -i "kubernetes-coreos.pem" [email protected]

Viene visualizzato il prompt dei comandi di CoreOS, come mostrato nella Figura 20.


Figura 20: Ottenere l'indirizzo IP pubblico

Installa kubectl binari:

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

Elenca i nodi:

./kubectl get nodes

I nodi del cluster Kubernetes vengono elencati (vedi Figura 21).


Figura 21: Ottenere l'indirizzo IP pubblico

Per testare il cluster, crea una distribuzione per nginx composto da tre repliche.

kubectl  run nginx --image=nginx --replicas=3

Successivamente, elenca le distribuzioni:

kubectl get deployments

La distribuzione "nginx" dovrebbe essere elencata, come mostrato nella Figura 22.


Figura 22: Ottenere l'indirizzo IP pubblico

Elenca i Pod a livello di cluster:

kubectl get pods -o wide

Crea un servizio di tipo LoadBalancer da nginx distribuzione:

kubectl expose deployment nginx --port=80 --type=LoadBalancer

Elenca i servizi:

kubectl get services

I Pod a livello di cluster vengono elencati, come mostrato nella Figura 23. Il servizio "nginx" viene creato ed elencato includendo l'IP del cluster e l'IP esterno.


Figura 23: Ottenere l'indirizzo IP pubblico

Richiama nginx servizio all'ip del cluster. Il nginx il markup HTML dell'output del servizio viene visualizzato, come mostrato nella Figura 24.


Figura 24: Ottenere l'indirizzo IP pubblico

Conclusione

In tre articoli, abbiamo discusso dell'installazione del cluster Kubernetes utilizzando un progetto Jenkins. Abbiamo creato un progetto Jenkins Pipeline con un file Jenkins per installare il cluster. Una pipeline Jenkins automatizza l'installazione di Kubernetes e la stessa pipeline Jenkins può essere modificata secondo necessità e rieseguita per creare più cluster Kubernetes.