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.