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

Verwenden von Jenkins mit Kubernetes AWS, Teil 3

Im ersten Artikel „Using Jenkins with Kubernetes AWS, Part 1“ über die Automatisierung der Kubernetes-Installation mit Jenkins haben wir Jenkins auf CoreOS installiert, die erforderlichen Artefakte für die Installation von Kubernetes erstellt und einen Jenkins-Knoten erstellt. Im zweiten Artikel „Using Jenkins with Kubernetes AWS, Part 2“ haben wir eine Jenkins-Datei konfiguriert und eine Jenkins-Pipeline erstellt. In diesem Artikel führen wir die Jenkins-Pipeline aus, um Kubernetes zu installieren und anschließend den Kubernetes-Cluster zu testen. Dieser Artikel hat die folgenden Abschnitte:

  • Ausführen der Jenkins-Pipeline
  • Kubernetes-Cluster testen
  • Schlussfolgerung

Ausführen der Jenkins-Pipeline

Klicken Sie auf Jetzt erstellen zum Ausführen der Jenkins-Pipeline, wie in Abbildung 1 gezeigt.


Abbildung 1: Build Now startet die Jenkins-Pipeline

Die Jenkins-Pipeline wird gestartet und ein Fortschrittsbalken zeigt den Fortschritt der Pipeline an. Eine Bühnenansicht für die verschiedenen Phasen in der Pipeline wird ebenfalls angezeigt, wie in Abbildung 2 gezeigt. Die Kube-aws render stage in der Stage View hat einen „paused“-Link, da wir Benutzereingaben für die Worker-Anzahl (und Instanztyp-Benutzereingaben, die anschließend angefordert werden sollen) in der Jenkins-Datei angefordert haben. Klicken Sie auf den Link „Pausiert“.


Abbildung 2: Abrufen der öffentlichen IP-Adresse

Klicken Sie in der Konsolenausgabe für die Jenkins-Pipeline auf Eingabe angefordert Link, wie in Abbildung 3 gezeigt.


Abbildung 3: Eingabe für die Anzahl der Knoten erbeten

Eine Anzahl von Knoten Das Dialogfeld wird angezeigt und fordert den Benutzer zur Eingabe der Anzahl der Knoten auf, wie in Abbildung 4 gezeigt. Ein Standardwert, wie er in der Jenkins-Datei konfiguriert ist, wird ebenfalls festgelegt. Klicken Sie auf Fortfahren nachdem Sie einen Wert angegeben haben.


Abbildung 4: Anzahl der Knoten angeben

Die Pipeline läuft weiter und wird bei einer weiteren Eingabeanforderung für den Instanztyp erneut angehalten. Klicken Sie auf Eingabe angefordert , wie in Abbildung 5 gezeigt.


Abbildung 5: Eingabe für Instanztyp angefordert

Der Instanztyp wird angezeigt (siehe Abbildung 6). Wählen Sie den Standardwert (oder geben Sie einen anderen Wert an) und klicken Sie auf Fortfahren.


Abbildung 6: Instanztyp angeben

Die Pipeline läuft weiter. In der Phase „Cluster bereitstellen“ wird ein weiterer Link „Eingabe angefordert“ angezeigt, wie in Abbildung 7 gezeigt. Klicken Sie auf den Link.


Abbildung 7: Erforderliche Eingabe für Soll Cluster bereitgestellt werden

Im Cluster Sollte bereitgestellt werden? Wählen Sie im Dialogfeld „Ja“ den Standardwert aus und klicken Sie auf „Fortfahren“, wie in Abbildung 8 gezeigt.


Abbildung 8: Soll Cluster bereitgestellt werden?

Die Pipeline läuft weiter. Das Erstellen der AWS-Ressourcen für einen Kubernetes-Cluster kann eine Weile dauern, wie die Meldung in der Konsolenausgabe in Abbildung 9 zeigt.


Abbildung 9: Erstellen von AWS-Ressourcen

Die Pipeline wird bis zum Abschluss ausgeführt. Eine „SUCCESS“-Meldung zeigt an, dass die Pipeline erfolgreich ausgeführt wurde, wie in Abbildung 10 gezeigt.


Abbildung 10: Jenkins Pipeline Run erfolgreich abgeschlossen

Die Phasenansicht für die Jenkins-Pipeline zeigt die verschiedenen abgeschlossenen Phasen der Pipeline an, wie in Abbildung 11 gezeigt. Die Phasenansicht enthält Links für „Letzter Build“, „Letzter stabiler Build“, „Letzter erfolgreicher Build“ und „Letzter abgeschlossener Build“.


Abbildung 11: Bühnenansicht

Klicken Sie auf Vollständige Bühnenansicht, um die vollständige Bühnenansicht separat anzuzeigen, wie in Abbildung 12 gezeigt.


Abbildung 12: Vollständige Bühnenansicht auswählen

Die vollständige Bühnenansicht wird angezeigt, wie in Abbildung 13 gezeigt.


Abbildung 13: Vollständige Bühnenansicht

Im Dashboard wird das Symbol neben der Jenkins-Pipeline grün, um den erfolgreichen Abschluss anzuzeigen, wie in Abbildung 14 gezeigt.


Abbildung 14: Jenkins-Dashboard mit Jenkins-Pipeline, die als „Erfolgreich abgeschlossen“ aufgeführt ist

Um die Konsolenausgabe anzuzeigen, wählen Sie Konsolenausgabe für den Build aus, wie in Abbildung 15 gezeigt.


Abbildung 15: Build-Verlauf>Konsolenausgabe

Die Konsolenausgabe wird angezeigt (siehe Abbildung 16).


Abbildung 16: Konsolenausgabe

Eine detailliertere Konsolenausgabe ist im folgenden Codesegment aufgeführt:

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

Kubernetes-Cluster testen

Nachdem wir Kubernetes installiert haben, testen wir als Nächstes den Cluster, indem wir eine Anwendung ausführen. Zuerst müssen wir die Controller-IP auf dem öffentlichen DNS-Namen (der nosqlsearch.com Domain). Kopieren Sie die Controller-IP aus der Konsolenausgabe, wie in Abbildung 17 gezeigt.


Abbildung 17: Abrufen der öffentlichen IP-Adresse

Die Kubernetes-Controller-IP kann auch von der EC2-Konsole abgerufen werden, wie in Abbildung 18 gezeigt.


Abbildung 18: Abrufen der Kubernetes Controller-IP

Fügen Sie einen A-Eintrag (Host) zur DNS-Zonendatei für die Domäne nosqlsearch.com beim Hosting-Anbieter hinzu, wie in Abbildung 19 gezeigt. Das Hinzufügen eines A-Eintrags würde für verschiedene Hosting-Anbieter etwas anders sein.


Abbildung 19: Abrufen der öffentlichen IP-Adresse

SSH-Anmeldung beim Kubernetes-Master mit der Master-IP.

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

Die CoreOS-Eingabeaufforderung wird angezeigt, wie in Abbildung 20 gezeigt.


Abbildung 20: Abrufen der öffentlichen IP-Adresse

Installieren Sie kubectl Binärdateien:

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

Nodes auflisten:

./kubectl get nodes

Die Kubernetes-Clusterknoten werden aufgelistet (siehe Abbildung 21).


Abbildung 21: Abrufen der öffentlichen IP-Adresse

Erstellen Sie zum Testen des Clusters eine Bereitstellung für nginx bestehend aus drei Repliken.

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

Listen Sie anschließend die Bereitstellungen auf:

kubectl get deployments

Die Bereitstellung „nginx“ sollte aufgelistet werden, wie in Abbildung 22 gezeigt.


Abbildung 22: Abrufen der öffentlichen IP-Adresse

Clusterweite Pods auflisten:

kubectl get pods -o wide

Erstellen Sie einen Dienst vom Typ LoadBalancer aus nginx Bereitstellung:

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

Listen Sie die Dienste auf:

kubectl get services

Die clusterweiten Pods werden aufgelistet, wie in Abbildung 23 gezeigt. Der „nginx“-Dienst wird erstellt und aufgelistet, einschließlich der Cluster-IP und der externen IP.


Abbildung 23: Abrufen der öffentlichen IP-Adresse

Rufen Sie nginx auf Dienst auf der Cluster-IP. Das nginx Service-Ausgabe-HTML-Markup wird angezeigt, wie in Abbildung 24 gezeigt.


Abbildung 24: Abrufen der öffentlichen IP-Adresse

Schlussfolgerung

In drei Artikeln haben wir die Installation von Kubernetes-Clustern mit einem Jenkins-Projekt besprochen. Wir haben ein Jenkins-Pipeline-Projekt mit einer Jenkins-Datei erstellt, um den Cluster zu installieren. Eine Jenkins-Pipeline automatisiert die Kubernetes-Installation, und dieselbe Jenkins-Pipeline kann nach Bedarf geändert und erneut ausgeführt werden, um mehrere Kubernetes-Cluster zu erstellen.