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
<example@sqldat.com>
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
<example@sqldat.com>" [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" example@sqldat.com
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.