В първата статия, „Използване на Jenkins с Kubernetes AWS, част 1“, за автоматизиране на инсталацията на Kubernetes с Jenkins, ние инсталирахме Jenkins на CoreOS, създадохме необходимите артефакти за инсталиране на Kubernetes и създадохме възел на Jenkins. Във втората статия, „Използване на Jenkins с Kubernetes AWS, част 2“, ние конфигурирахме Jenkinsfile и създадохме конвейер на Jenkins. В тази статия ще стартираме тръбопровода на Jenkins, за да инсталираме Kubernetes и впоследствие да тестваме клъстера Kubernetes. Тази статия има следните раздели:
- Управление на Jenkins Pipeline
- Тестване на клъстера Kubernetes
- Заключение
Изпълнение на Jenkins Pipeline
Кликнете върху Създаване сега за да стартирате Jenkins Pipeline, както е показано на фигура 1.
Фигура 1: Build Now стартира Jenkins Pipeline
Jenkins Pipeline започва и лента за напредък показва напредъка на тръбопровода. Изглед на сцена за различните етапи в конвейера също се показва, както е показано на фигура 2. Kube-aws етапът на рендериране в Stage View има връзка „на пауза“, тъй като поискахме въвеждане на потребител за броя на работниците (и въвеждане на потребителски тип на инстанция, което ще бъде подканено впоследствие) във файла Jenkins. Кликнете върху връзката „на пауза“.
Фигура 2: Получаване на публичен IP адрес
В изхода на конзолата за Jenkins Pipeline щракнете върху Искан е вход връзка, както е показано на фигура 3.
Фигура 3: Изискван е вход за брой възли
Брой възли се показва диалогов прозорец, подканващ за въвеждане от потребителя за броя на възлите, както е показано на Фигура 4. Задава се и стойност по подразбиране, както е конфигурирана във файла Jenkins. Кликнете върху Напред след задаване на стойност.
Фигура 4: Посочване на брой възли
Конвейерът продължава да работи и отново се спира на пауза при друга заявка за въвеждане за типа екземпляр. Кликнете върху Искано е въвеждане , както е показано на фигура 5.
Фигура 5: Изискван е вход за тип на инстанция
Типът на екземпляра се показва диалоговият прозорец (вижте фигура 6). Изберете стойността по подразбиране (или посочете друга стойност) и щракнете върху Напред.
Фигура 6: Посочване на типа на екземпляра
Тръбопроводът продължава да работи. В етапа „Разгръщане на клъстер“ се представя друга заявена връзка за въвеждане, както е показано на фигура 7. Щракнете върху връзката.
Фигура 7: Изискван е вход за трябва ли да бъде разгърнат клъстер
В клъстера Трябва ли да се разположи? диалогов прозорец, изберете стойността по подразбиране „да“ и щракнете върху Продължи, както е показано на фигура 8.
Фигура 8: Трябва ли да разположите клъстер?
Тръбопроводът продължава да работи. Създаването на ресурсите на AWS за клъстер Kubernetes може да отнеме известно време, както е посочено от съобщението в изхода на конзолата, показан на фигура 9.
Фигура 9: Създаване на AWS ресурси
Тръбопроводът работи до завършване. Съобщение „УСПЕХ“ показва, че тръбопроводът е работил успешно, както е показано на Фигура 10.
Фигура 10: Прогонването на Jenkins Pipeline е завършено успешно
Етапният изглед за Jenkins Pipeline показва различните етапи на завършения конвейер, както е показано на Фигура 11. Изгледът на етап включва връзки за Последна компилация, Последна стабилна компилация, Последна успешна компилация и Последна завършена компилация.
Фигура 11: Изглед на сцена
Щракнете върху Пълен изглед на етап, за да покажете отделно целия изглед на етап, както е показано на Фигура 12.
Фигура 12: Избиране на изглед на цял етап
Показва се изгледът на пълен етап, както е показано на Фигура 13.
Фигура 13: Пълен сценичен изглед
В таблото за управление иконата в непосредствена близост до Jenkins Pipeline става зелена, за да покаже успешно завършване, както е показано на Фигура 14.
Фигура 14: Таблото за управление на Jenkins с Jenkins Pipeline е посочено като успешно завършен
За да покажете изхода на конзолата, изберете Console Output за Build, както е показано на Фигура 15.
Фигура 15: История на компилации>Изход на конзолата
Показва се изходът на конзолата (вижте фигура 16).
Фигура 16: Изход на конзолата
По-подробен изход на конзолата е посочен в следния сегмент от код:
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
След като инсталираме Kubernetes, след това ще тестваме клъстера, като стартираме някакво приложение. Първо, трябва да конфигурираме IP адреса на контролера на публичното DNS име (nosqlsearch.com домейн). Копирайте IP контролера от изхода на конзолата, както е показано на Фигура 17.
Фигура 17: Получаване на публичен IP адрес
Ip на контролера на Kubernetes може да бъде получен и от конзолата EC2, както е показано на фигура 18.
Фигура 18: Получаване на контролера на Kubernetes Ip
Добавете запис A (Host) към файла на DNS зоната за домейна nosqlsearch.com при хостинг доставчика, както е показано на Фигура 19. Добавянето на A запис би било малко по-различно за различните доставчици на хостинг.
Фигура 19: Получаване на публичен IP адрес
SSH Влезте в Kubernetes Master, използвайки IP адреса на Master.
ssh -i "kubernetes-coreos.pem" [email protected]
Показва се командният ред на CoreOS, както е показано на Фигура 20.
Фигура 20: Получаване на публичен IP адрес
Инсталирайте kubectl двоични файлове:
sudo wget https://storage.googleapis.com/kubernetes-release/ release/v1.3.0/bin/linux/amd64/./kubectl sudo chmod +x ./kubectl
Избройте възлите:
./kubectl get nodes
Клъстерните възли на Kubernetes се изброяват (вижте Фигура 21).
Фигура 21: Получаване на публичен IP адрес
За да тествате клъстера, създайте внедряване за nginx състоящ се от три копия.
kubectl run nginx --image=nginx --replicas=3
След това избройте внедряванията:
kubectl get deployments
Разгръщането на “nginx” трябва да бъде изброено, както е показано на Фигура 22.
Фигура 22: Получаване на публичен IP адрес
Избройте подовете за целия клъстер:
kubectl get pods -o wide
Създайте услуга от тип LoadBalancer от nginx внедряване:
kubectl expose deployment nginx --port=80 --type=LoadBalancer
Избройте услугите:
kubectl get services
Подовете за целия клъстер се изброяват, както е показано на Фигура 23. Услугата „nginx“ се създава и изброява, включително ip на клъстера и външния IP.
Фигура 23: Получаване на публичен IP адрес
Извикайте nginx услуга в ip на клъстера. nginx HTML маркирането на изхода на услугата се показва, както е показано на Фигура 24.
Фигура 24: Получаване на публичен IP адрес
Заключение
В три статии обсъдихме инсталирането на клъстер Kubernetes с помощта на проект на Jenkins. Създадохме проект Jenkins Pipeline с Jenkinsfile за инсталиране на клъстера. Конвейерът на Jenkins автоматизира инсталацията на Kubernetes и същият тръбопровод на Jenkins може да бъде модифициран при необходимост и да се стартира повторно, за да се създадат множество Kubernetes клъстери.