I den første artikel, "Brug af Jenkins med Kubernetes AWS, del 1," om automatisering af Kubernetes-installation med Jenkins, installerede vi Jenkins på CoreOS, skabte de nødvendige artefakter til installation af Kubernetes og oprettede en Jenkins-node. I den anden artikel, "Brug af Jenkins med Kubernetes AWS, del 2", konfigurerede vi en Jenkinsfil og oprettede en Jenkins-pipeline. I denne artikel skal vi køre Jenkins-pipeline for at installere Kubernetes og efterfølgende teste Kubernetes-klyngen. Denne artikel har følgende sektioner:
- Kørsel af Jenkins Pipeline
- Test af Kubernetes-klyngen
- Konklusion
Kørsel af Jenkins Pipeline
Klik på Byg nu at køre Jenkins Pipeline, som vist i figur 1.
Figur 1: Byg nu starter Jenkins Pipeline
Jenkins Pipeline starter, og en statuslinje angiver pipelinens fremskridt. En scenevisning for de forskellige stadier i pipelinen bliver også vist, som vist i figur 2. Kube-aws render-stadiet i Stage View har et "pauseret"-link, fordi vi har anmodet om brugerinput til arbejderantal (og brugerinput af forekomsttype, som skal blive bedt om efterfølgende) i Jenkinsfilen. Klik på linket "pause".
Figur 2: Få den offentlige IP-adresse
Klik på anmodet input i konsoludgangen for Jenkins Pipeline link, som vist i figur 3.
Figur 3: Input anmodet om antal noder
Et Antal noder dialogen bliver vist, der beder om brugerinput for antallet af noder, som vist i figur 4. En standardværdi som konfigureret i Jenkinsfilen er også indstillet. Klik på Fortsæt efter at have angivet en værdi.
Figur 4: Angivelse af antal noder
Pipeline fortsætter med at køre og bliver igen sat på pause ved en anden inputanmodning for instanstypen. Klik på Input anmodet , som vist i figur 5.
Figur 5: Input anmodet om forekomsttype
Forekomsttype dialogen vises (se figur 6). Vælg standardværdien (eller angiv en anden værdi), og klik på Fortsæt.
Figur 6: Angivelse af instanstype
Rørledningen fortsætter med at køre. I implementeringsklyngestadiet præsenteres et andet inputanmodet link, som vist i figur 7. Klik på linket.
Figur 7: Input anmodet om skal klynge implementeres
I skal implementere klynge? dialogboksen, vælg standardværdien "ja" og klik på Fortsæt, som vist i figur 8.
Figur 8: Skal du implementere Cluster?
Rørledningen fortsætter med at køre. Oprettelse af AWS-ressourcerne til en Kubernetes-klynge kan tage et stykke tid, som angivet af meddelelsen i konsoludgangen vist i figur 9.
Figur 9: Oprettelse af AWS-ressourcer
Rørledningen løber til færdiggørelse. En "SUCCES"-meddelelse angiver, at pipelinen er kørt korrekt, som vist i figur 10.
Figur 10: Jenkins Pipeline Run gennemført med succes
Stagevisningen for Jenkins-pipelinen viser de forskellige stadier af pipelinen, der er afsluttet, som vist i figur 11. Stagevisningen indeholder links til Sidste bygning, Sidste stabile konstruktion, Sidste vellykkede konstruktion og Sidste fuldførte konstruktion.
Figur 11: Scenevisning
Klik på Fuld scenevisning for at få vist hele scenevisningen separat, som vist i figur 12.
Figur 12: Valg af fuld scenevisning
Den fulde scenevisning bliver vist, som vist i figur 13.
Figur 13: Fuld scenevisning
I Dashboardet bliver ikonet ved siden af Jenkins Pipeline grønt for at angive vellykket afslutning, som vist i figur 14.
Figur 14: Jenkins Dashboard med Jenkins Pipeline angivet som afsluttet med succes
For at få vist konsoludgangen skal du vælge Konsoloutput for bygningen, som vist i figur 15.
Figur 15: Build History>Konsoloutput
Konsoloutputtet vises (se figur 16).
Figur 16: Konsoloutput
Et mere detaljeret konsoloutput er angivet i følgende kodesegment:
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 af Kubernetes-klyngen
Efter at have installeret Kubernetes, skal vi derefter teste klyngen ved at køre et program. Først skal vi konfigurere controllerens Ip på det offentlige DNS-navn (nosqlsearch.com domæne). Kopier controllerens IP fra konsoludgangen, som vist i figur 17.
Figur 17: Få den offentlige IP-adresse
Kubernetes Controller Ip kan også fås fra EC2-konsollen, som vist i figur 18.
Figur 18: Hentning af Kubernetes Controller Ip
Tilføj en A (Host)-indgang til DNS Zone-filen for nosqlsearch.com-domænet hos hostingudbyderen, som vist i figur 19. Tilføjelse af en A-post ville være lidt anderledes for forskellige hostingudbydere.
Figur 19: Få den offentlige IP-adresse
SSH Log ind på Kubernetes Master ved hjælp af Master's Ip.
ssh -i "kubernetes-coreos.pem" [email protected]
CoreOS-kommandoprompten vises, som vist i figur 20.
Figur 20: Få den offentlige IP-adresse
Installer kubectl binære filer:
sudo wget https://storage.googleapis.com/kubernetes-release/ release/v1.3.0/bin/linux/amd64/./kubectl sudo chmod +x ./kubectl
Liste over noderne:
./kubectl get nodes
Kubernetes-klyndeknuderne bliver vist (se figur 21).
Figur 21: Få den offentlige IP-adresse
For at teste klyngen skal du oprette en implementering til nginx bestående af tre replikaer.
kubectl run nginx --image=nginx --replicas=3
Angiv derefter implementeringerne:
kubectl get deployments
"nginx"-implementeringen skulle blive vist på listen, som vist i figur 22.
Figur 22: Få den offentlige IP-adresse
List de klyngeomfattende Pods:
kubectl get pods -o wide
Opret en tjeneste af typen LoadBalancer fra nginx implementering:
kubectl expose deployment nginx --port=80 --type=LoadBalancer
Liste over tjenesterne:
kubectl get services
De klyngeomfattende Pods bliver listet som vist i figur 23. "nginx"-tjenesten bliver oprettet og listet inklusive klynge-ip og den eksterne Ip.
Figur 23: Få den offentlige IP-adresse
Kald på nginx service på klyngens ip. nginx tjenesteoutput HTML-markering bliver vist, som vist i figur 24.
Figur 24: Få den offentlige IP-adresse
Konklusion
I tre artikler diskuterede vi installation af Kubernetes-klynge ved hjælp af et Jenkins-projekt. Vi oprettede et Jenkins Pipeline-projekt med en Jenkinsfil for at installere klyngen. En Jenkins-pipeline automatiserer Kubernetes-installationen, og den samme Jenkins-pipeline kan ændres efter behov og køres igen for at skabe flere Kubernetes-klynger.