Dalam artikel pertama, “Menggunakan Jenkins dengan Kubernetes AWS, Bagian 1,” tentang mengotomatiskan instalasi Kubernetes dengan Jenkins, kami menginstal Jenkins di CoreOS, membuat artefak prasyarat untuk menginstal Kubernetes, dan membuat simpul Jenkins. Di artikel kedua, “Menggunakan Jenkins dengan Kubernetes AWS, Bagian 2,” kami mengonfigurasi Jenkinsfile dan membuat pipeline Jenkins. Pada artikel ini, kita akan menjalankan pipeline Jenkins untuk menginstal Kubernetes dan selanjutnya menguji cluster Kubernetes. Artikel ini memiliki bagian berikut:
- Menjalankan Jenkins Pipeline
- Menguji Cluster Kubernetes
- Kesimpulan
Menjalankan Jenkins Pipeline
Klik Bangun Sekarang untuk menjalankan Jenkins Pipeline, seperti yang ditunjukkan pada Gambar 1.
Gambar 1: Build Now memulai Jenkins Pipeline
Jenkins Pipeline dimulai dan bilah kemajuan menunjukkan kemajuan pipeline. Tampilan Panggung untuk berbagai tahapan dalam pipeline juga akan ditampilkan, seperti yang ditunjukkan pada Gambar 2. Kube-aws render stage di Stage View memiliki tautan "dijeda" karena kami meminta input pengguna untuk jumlah pekerja (dan input pengguna tipe instance, yang akan diminta untuk selanjutnya) di Jenkinsfile. Klik tautan “dijeda”.
Gambar 2: Mendapatkan Alamat IP Publik
Di Output Konsol untuk Jenkins Pipeline, klik Input yang diminta tautan, seperti yang ditunjukkan pada Gambar 3.
Gambar 3: Input diminta untuk jumlah node
Jumlah Node dialog akan ditampilkan, meminta masukan pengguna untuk jumlah node, seperti yang ditunjukkan pada Gambar 4. Nilai default seperti yang dikonfigurasi dalam Jenkinsfile juga ditetapkan. Klik Lanjutkan setelah menentukan nilai.
Gambar 4: Menentukan Jumlah Node
Pipeline terus berjalan dan kembali dijeda pada permintaan input lain untuk jenis instans. Klik Masukan diminta , seperti yang ditunjukkan pada Gambar 5.
Gambar 5: Masukan yang Diminta untuk Jenis Instance
Jenis Instance dialog akan ditampilkan (lihat Gambar 6). Pilih nilai default (atau tentukan nilai yang berbeda) dan klik Lanjutkan.
Gambar 6: Menentukan Jenis Instance
Pipa terus berjalan. Pada tahap Deploy Cluster, tautan lain yang diminta Input ditampilkan, seperti yang ditunjukkan pada Gambar 7. Klik tautan tersebut.
Gambar 7: Masukan yang Diminta Jika Cluster Di-Deploy
Dalam Cluster yang Harus Di-Deploy? dialog, pilih nilai default "ya" dan klik Lanjutkan, seperti yang ditunjukkan pada Gambar 8.
Gambar 8: Haruskah Menyebarkan Cluster?
Pipa terus berjalan. Pembuatan sumber daya AWS untuk klaster Kubernetes dapat memakan waktu cukup lama, seperti yang ditunjukkan oleh pesan di Keluaran Konsol yang ditunjukkan pada Gambar 9.
Gambar 9: Membuat Sumber Daya AWS
Pipa berjalan sampai selesai. Pesan “SUCCESS” menunjukkan bahwa pipeline telah berhasil dijalankan, seperti yang ditunjukkan pada Gambar 10.
Gambar 10: Jenkins Pipeline Run berhasil diselesaikan
Tampilan Tahap untuk Jenkins Pipeline menampilkan berbagai tahapan pipeline yang telah selesai, seperti yang ditunjukkan pada Gambar 11. Tampilan Tahap mencakup tautan untuk Pembuatan terakhir, Pembuatan stabil terakhir, Pembuatan terakhir berhasil, dan Pembuatan terakhir selesai.
Gambar 11 Tampilan Panggung
Klik Full Stage View untuk menampilkan tampilan full stage secara terpisah, seperti yang ditunjukkan pada Gambar 12.
Gambar 12: Memilih Tampilan Panggung Penuh
Tampilan Panggung Penuh akan ditampilkan, seperti yang ditunjukkan pada Gambar 13.
Gambar 13: Tampilan Panggung Penuh
Di Dasbor, ikon yang berdekatan dengan Jenkins Pipeline berubah menjadi hijau untuk menunjukkan penyelesaian yang berhasil, seperti yang ditunjukkan pada Gambar 14.
Gambar 14: Dasbor Jenkins dengan Jenkins Pipeline terdaftar sebagai Berhasil menyelesaikan
Untuk menampilkan output konsol, pilih Output Konsol untuk Build, seperti yang ditunjukkan pada Gambar 15.
Gambar 15: Riwayat Bangun>Keluaran Konsol
Keluaran Konsol akan ditampilkan (lihat Gambar 16).
Gambar 16: Keluaran Konsol
Output Konsol yang lebih detail tercantum di segmen kode berikut:
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
Menguji Cluster Kubernetes
Setelah Kubernetes terinstal, selanjutnya kita akan menguji cluster dengan menjalankan beberapa aplikasi. Pertama, kita perlu mengkonfigurasi Ip Pengendali pada Nama DNS Publik (nosqlsearch.com domain). Salin IP Pengontrol dari Output Konsol, seperti yang ditunjukkan pada Gambar 17.
Gambar 17: Mendapatkan Alamat IP Publik
Ip Kontroler Kubernetes juga dapat diperoleh dari Konsol EC2, seperti yang ditunjukkan pada Gambar 18.
Gambar 18: Mendapatkan Ip Pengontrol Kubernetes
Tambahkan entri A (Host) ke file DNS Zone untuk domain nosqlsearch.com di penyedia hosting, seperti yang ditunjukkan pada Gambar 19. Menambahkan catatan A akan sedikit berbeda untuk penyedia hosting yang berbeda.
Gambar 19: Mendapatkan Alamat IP Publik
Masuk SSH ke Master Kubernetes menggunakan Ip Master.
ssh -i "kubernetes-coreos.pem" [email protected]
Prompt perintah CoreOS akan ditampilkan, seperti yang ditunjukkan pada Gambar 20.
Gambar 20: Mendapatkan Alamat IP Publik
Instal kubectl binari:
sudo wget https://storage.googleapis.com/kubernetes-release/ release/v1.3.0/bin/linux/amd64/./kubectl sudo chmod +x ./kubectl
Buat daftar node:
./kubectl get nodes
Node cluster Kubernetes terdaftar (lihat Gambar 21).
Gambar 21: Mendapatkan Alamat IP Publik
Untuk menguji cluster, buat penerapan untuk nginx terdiri dari tiga replika.
kubectl run nginx --image=nginx --replicas=3
Selanjutnya, buat daftar penerapan:
kubectl get deployments
Penerapan "nginx" harus terdaftar, seperti yang ditunjukkan pada Gambar 22.
Gambar 22: Mendapatkan Alamat IP Publik
Buat daftar Pod di seluruh cluster:
kubectl get pods -o wide
Buat layanan dengan tipe LoadBalancer dari nginx penyebaran:
kubectl expose deployment nginx --port=80 --type=LoadBalancer
Buat daftar layanan:
kubectl get services
Pod di seluruh cluster terdaftar, seperti yang ditunjukkan pada Gambar 23. Layanan “nginx” dibuat dan terdaftar termasuk ip cluster dan Ip eksternal.
Gambar 23: Mendapatkan Alamat IP Publik
Aktifkan nginx layanan di cluster ip. nginx output layanan markup HTML akan ditampilkan, seperti yang ditunjukkan pada Gambar 24.
Gambar 24: Mendapatkan Alamat IP Publik
Kesimpulan
Dalam tiga artikel, kami membahas cara menginstal cluster Kubernetes menggunakan proyek Jenkins. Kami membuat proyek Jenkins Pipeline dengan Jenkinsfile untuk menginstal cluster. Pipeline Jenkins mengotomatiskan penginstalan Kubernetes, dan pipeline Jenkins yang sama dapat dimodifikasi sesuai kebutuhan dan dijalankan kembali untuk membuat beberapa cluster Kubernetes.