Jenkinsを使用したKubernetesのインストールの自動化に関する最初の記事「KubernetesAWSでのJenkinsの使用、パート1」では、CoreOSにJenkinsをインストールし、Kubernetesをインストールするための前提条件のアーティファクトを作成し、Jenkinsノードを作成しました。 2番目の記事「KubernetesAWSでのJenkinsの使用、パート2」では、Jenkinsfileを構成し、Jenkinsパイプラインを作成しました。この記事では、Jenkinsパイプラインを実行してKubernetesをインストールし、続いてKubernetesクラスターをテストします。この記事には次のセクションがあります:
- Jenkinsパイプラインの実行
- Kubernetesクラスターのテスト
- 結論
Jenkinsパイプラインの実行
今すぐ作成をクリックします 図1に示すように、Jenkinsパイプラインを実行します。
図1: Build Nowは、Jenkinsパイプラインを開始します
Jenkinsパイプラインが開始され、進行状況バーにパイプラインの進行状況が表示されます。 ステージビュー 図2に示すように、パイプラインのさまざまなステージの値も表示されます。 Kube-aws Jenkinsfileでワーカー数のユーザー入力(およびインスタンスタイプのユーザー入力、後でプロンプトが表示される)を要求したため、ステージビューのレンダリングステージには「一時停止」リンクがあります。 「一時停止」リンクをクリックします。
図2: パブリックIPアドレスの取得
Jenkinsパイプラインのコンソール出力で、[要求された入力]をクリックします 図3に示すように、リンク。
図3: ノード数の入力が要求されました
ノードの数 図4に示すように、ダイアログが表示され、ノード数のユーザー入力を求められます。Jenkinsfileで構成されているデフォルト値も設定されています。 続行をクリックします 値を指定した後。
図4: ノード数の指定
パイプラインは実行を継続し、インスタンスタイプの別の入力要求で再び一時停止します。 入力が要求されましたをクリックします 、図5に示すように。
図5: インスタンスタイプに対して要求された入力
インスタンスタイプ ダイアログが表示されます(図6を参照)。デフォルト値を選択して(または別の値を指定して)、[続行]をクリックします。
図6: インスタンスタイプの指定
パイプラインは引き続き実行されます。 「クラスターのデプロイ」ステージでは、図7に示すように、別の入力要求リンクが表示されます。リンクをクリックします。
図7: クラスターをデプロイする必要があるために要求された入力
クラスターを展開する必要がありますか?ダイアログで、デフォルト値の「yes」を選択し、図8に示すように、「続行」をクリックします。
図8: クラスターをデプロイする必要がありますか?
パイプラインは引き続き実行されます。図9に示すコンソール出力のメッセージに示されているように、KubernetesクラスターのAWSリソースの作成には時間がかかる場合があります。
図9: AWSリソースの作成
パイプラインは完了するまで実行されます。 「SUCCESS」メッセージは、図10に示すように、パイプラインが正常に実行されたことを示します。
図10: Jenkinsパイプラインの実行が正常に完了しました
Jenkinsパイプラインのステージビューには、図11に示すように、完了したパイプラインのさまざまなステージが表示されます。ステージビューには、最後のビルド、最後の安定したビルド、最後の成功したビルド、および最後に完了したビルドのリンクが含まれます。
図11: ステージビュー
図12に示すように、[フルステージビュー]をクリックして、フルステージビューを個別に表示します。
図12: フルステージビューの選択
図13に示すように、フルステージビューが表示されます。
図13: フルステージビュー
ダッシュボードでは、図14に示すように、Jenkinsパイプラインの横にあるアイコンが緑色に変わり、正常に完了したことを示します。
図14: Jenkinsパイプラインが正常に完了したとリストされているJenkinsダッシュボード
コンソール出力を表示するには、図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をインストールしたら、次にアプリケーションを実行してクラスターをテストします。まず、パブリックDNS名( nosqlsearch.com )でコントローラーIPを構成する必要があります。 ドメイン)。図17に示すように、コンソール出力からコントローラーIPをコピーします。
図17: パブリックIPアドレスの取得
図18に示すように、KubernetesControllerIpはEC2コンソールから取得することもできます。
図18: KubernetesControllerIpの取得
図19に示すように、ホスティングプロバイダーのnosqlsearch.comドメインのDNSゾーンファイルにA(ホスト)エントリを追加します。Aレコードの追加は、ホスティングプロバイダーごとに少し異なります。
図19: パブリックIPアドレスの取得
SSHマスターのIPを使用してKubernetesマスターにログインします。
ssh -i "kubernetes-coreos.pem" [email protected]
図20に示すように、CoreOSコマンドプロンプトが表示されます。
図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のデプロイを作成します 3つのレプリカで構成されています。
kubectl run nginx --image=nginx --replicas=3
続いて、展開を一覧表示します。
kubectl get deployments
図22に示すように、「nginx」デプロイメントが一覧表示されます。
図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 図24に示すように、サービス出力のHTMLマークアップが表示されます。
図24: パブリックIPアドレスの取得
結論
3つの記事で、Jenkinsプロジェクトを使用したKubernetesクラスターのインストールについて説明しました。クラスターをインストールするために、Jenkinsfileを使用してJenkinsパイプラインプロジェクトを作成しました。 JenkinsパイプラインはKubernetesのインストールを自動化し、同じJenkinsパイプラインを必要に応じて変更して再実行し、複数のKubernetesクラスターを作成できます。