フォーム読み込み中
皆さんこんにちは。クラウドエンジニアのKangです。
この記事ではServerlessKubernetes にJenkinsをデプロイし、高可用性、柔軟なスケーリング、低コストの自動化CI/CD(継続的インテグレーション/継続的デリバリー) システムを構築する方法を紹介します。
Kubernetes masterノードのシングルポイント障害、リソースの利用率が低い、システムの拡張性が悪いと言った問題を解決することを目指します。
・高コスト
ハードウェアやライセンス、専門的な技術スキルを必要とするため、導入および維持に高いコストがかかる場合があります。
・複雑なセットアップと管理
セットアップや構成が複雑であり、管理が困難な場合があります。これにより、運用や保守に多くの時間とリソースが必要になります。
・柔軟性の欠如
特定のツールやプロセスに依存する場合があり、柔軟性に欠けることがあります。新しいツールや技術への移行が困難な場合があります。
・スケーラビリティの課題
大規模なプロジェクトや構成でのスケーラビリティに課題を抱えることがあります。ビルドやデプロイの速度やパフォーマンスが低下する場合があります。
・インフラストラクチャの制約
特定のインフラストラクチャに依存することがあります。クラウドベースのシステムやコンテナ化された環境への移行が制約される場合があります。
これらの課題を解決するため、本記事ではAlibabaCloud Elastic Container Instance(ECI)をベースとしたサーバーレスKubernetesサービス(Serverless ACK)とNASストレージを利用し、リソーススケーラブル、低コスト、自動化CI/CDシステムを構築する方法を紹介したいと思います。
ECIをベースとしたServerlss ACKによるCI/CDシステムでは、以下のような課題を解決できます
・低コストのデプロイとデリバリー
ECIベースの低コストCI/CDシステムは、従来のシステムと比較してコストを削減し、経済的な解決策を提供します。
・煩雑な設定管理は不要
ECIシステムにより、アーティファクト、設定ファイル、重要な知識を集中管理し、設定管理を簡素化できます。
・効率的なビルドとデプロイプロセス
ECIベースのCI/CDシステムは、自動化されたビルド、テスト、デプロイプロセスにより、手動操作やエラーを減らし、デリバリーの速度と品質を向上させます。
・スケーラビリティと柔軟性
本システムは柔軟で拡張可能であり、複数のチームやプロジェクトの並行開発をサポートし、効率と柔軟性を向上させます。
本記事はAlibabaCloudのベストプラクティス (中国語) も参考にしています。
本システムの構成図は以下の通りです。
今回はGithubに保存されているソースコードをダウンロードし、K8sコンテナ内でDockerイメージをビルドして、アプリケーションを実行するという一連の処理が自動的に完成させるため、予めPipelineを作成して、JenkinsによりPipelineをトリーガーします。
Pipelineには四つのステージがあります。デモコードのJenkinsfileに記載があります。
(https://github.com/nancyli2008/jenkins-demo/blob/main/Jenkinsfile )
ステージ1:Git→コードクローンタスクを完成します。
ステージ2: Package→ Mavenでコードパッケージを実行します。
ステージ3: Image Build And Publish→ KanikoでイメージビルドとPublishします。(K8sコンテナ内でDockerイメージをビルドする必要があるため、Kanikoを利用しています。)
ステージ4: Deploy to Kubernetes→ kubectlでアプリケーションをデプロイします。
ECIベースの低コストCI/CDシステムを導入するために、以下リソース及びAlibabaCloud サービスを利用しています。
Github:APPコードを格納します。
Maven:コードパッケージを実行します。
Kaniko:イメージを構築するためのツールです。
Openjdk: デモコードではJavaベースなのでOpenjdkを使用します。
PodTemplate Contain: erImage用Basicイメージとデモアプリケーションのレポジトリを格納します。
Alibaba Cloud ECS (Elastic Compute Service): 仮想マシンを提供し、ローカル開発用の環境として利用します。
Alibaba Cloud Apsara File Storage NAS (NAS):アーティファクトの保存や設定ファイルの管理に使用します。
Alibaba Cloud Container Registry(ACR): コンテナイメージの管理と配信に使用します。
Alibaba Cloud Container Service for Kubernetes(K8s):仮想マシンを提供し、CI/CDシステムの実行環境として利用します。
本章で紹介するデータフローは以下の通りとなっております。
1.アプリケーションのソースコードを変更します。
2.コードを GitHub にコミットします。
3.継続的インテグレーション トリガーが Jenkins に送られます。
4.Jenkins は動的ビルドエージェントのために AlibabaCloud Serverless Kubernetes (ASK) を使用してビルドジョブをトリガーします。
5.Jenkins はmavenコンテナーを構築しアプリケーションのソースコードをパッケージします。
6.Jenkins はKanikoコンテナーを構築しアプリケーションのレポジトリをAlibabaCloudの Container Registry(ACR) にプッシュします。
7.Jenkins はkubectlコンテナーを構築し、アプリケーションをAlibabaCloud Serverless Kubernetes (ASK) にデプロイします。
8.アプリケーションのデモがブラウザで確認できます。
では早速ですが、構築手順を紹介していきたいと思います。
上記の構成を実現するために、まず必要なクラウドリソースを作成する必要があります。ここでは、VPCとVSwitch、ローカル開発用のECS、NAS、ASKなどのAlibabaCloud リソースを作成します。
1.1.1 VPCを作成します。
1.1.2 Vswitchを作成します。
1.1.3 VPCとVSwitchが作成されたことを確認します。
1.2.1 RegionとECSのスペックを選択します。
1.2.2 イメージとディスクを選択します。
1.2.3 VPCとIPを設定します。
1.2.4 ログインキーを設定します。
1.2.5 ECSの作成が完了していることを確認します。
1.3.1 NASインスタンスを購入します。
NASのストレージタイプは[nas_extreme]を利用します。
1.3.2 注意事項を確認の上、NASを購入します。
1.3.3 NASが作成されていることを確認します。
1.3.4 RAMコンソールでAliyunNASManageENIRoleを許可します。
1.4.1 k8sクラスター仕様、リージョン、バージョン、VPCなどを選択します。
1.4.2 デフォルトの設定のまま、次のステップへ遷移します。
1.4.3 サービス許可をチェックし、クラスターを作成します。
1.4.4 AlibabaCloud ASKが作成完了していることを確認します。
流れとしては、以下のようになっております。
まず、ASKのCloudshellでJenkinsのデプロイファイルをダウンロードします。
次に、NASインスタンスを作成し、マウントポイントを設定します。
その後、Jenkins_homeとNASストレージを設定し、Jenkinsをデプロイします。
最後に、JenkinsでKubernetesのプラグインをインストールします。
2.1.1 ASKのインスタンスを選択し、「CloudShell開く」メニューをクリックします。
2.1.2 CloudShell画面を開きます。
2.1.3 下記コマンドでデプロイファイルをダウンロードします。
2.1.4 フォルダを変更します。
cd jenkins-on-serverless
2.2.1 NASコンソールにインスタンスを選択します。
2.2.2 ターゲットマウントを追加します。
2.2.3 VPCとVSwitchを設定します。
2.2.4 ターゲットマウントされていることを確認します。
2.3.1 CloudShellコンソール画面を開きます。
2.3.2 yamlファイルを確認します。
ls
2.3.3 NASコンソール画面からServerアドレスを取得します。
255ebf40-1j0n.ap-northeast-1.extreme.nas.aliyuncs.com
2.3.4 yamlファイルのJenkinsHomeにNASのServerアドレスを設定します。
vim serverless-k8s-jenkins-deploy.yaml
2.4.1 Jenkinsをデプロイします。
kubectl apply -f serverless-k8s-jenkins-deploy.yaml
kubectl get pods --all-namespaces
2.4.2 podステータスを確認します。
podステータスが[Running]であることが確認できます。
2.4.3 Jenkinsに登録します。
ASKインスタンス→Network→Serivce→Jenkins→ExternalEndpointの順で。クリックし、Jenkinsにログインします。
2.4.4 JenkinsのPodターミナルに接続します。
2.4.5 下記コマンドでJenkinsのパスワードを取得します。
2.4.6 プラグインのインストールはとりあえずスキップし、Jenkinsにログインします。
アカウント:admin
パスワード: f6bddcda90a54ceda77439c4f5******
2.5.1 JenkinsでKubernetesのプラグインをインストールします。
Kubernetes-pluginプラグインを使用すると、KubernetesはJenkinsに動的にスレーブを構築する機能を提供することができます。
ユーザーは構築するPodテンプレートを指定し、自動的にjnlpコンテナを注入し、Jenkinsステージがブレーキングを実行してリソースのクリーンアップを完了することで、Serverless Kubernetesが提供するECI機能と合わせて、クラスタリソースのサイジングを事前に計画しなくても、自動的かつ回復力のあるCI/CDシステムを構築することが可能です。
2.5.1.1 Jenkinsの画面でプラグインを確認します。
Jenkins Dashboard →Manage Jenkins→→Manage Plugins→Installedの順でクリックします。
2.5.1.2 下記のプラグインをインストールします。
Kubernetes
Kubernetes Credentials
Kubernetes CLI
2.5.1.3 プラグインをインストールします。
2.5.1.4 Kubernetesプラグインを確認します。
2.5.2 gitプラグインを作成します。
2.5.2.1 プラグイン管理画面にgit プラグインを選択します。
2.5.2.2 git プラグインをインストールします。
2.5.3 localeプラグインをインストールします。
2.5.3.1 プラグイン管理画面にlocaleプラグインを選択します。
2.5.3.2 設定画面でLocaleデフォルト言語を英語に設定します。
2.5.4 mavenプラグインをインストールします。
2.5.4.1 プラグイン管理画面にmavenプラグインを選択します。
2.5.4.2 mavenプラグインをインストールします。
2.5.4.3 Mavenを設定します。
Jenkins Dashboard →Manage Jenkins→Global Tool Configuration→Mavenの順でクリックします。
2.5.5 BlueOceanプラグインをインストールします。
2.5.5.1 BlueOceanプラグインを選択します。
2.5.5.2 BlueOceanプラグインをインストールします。
本記事では、Alibaba CloudでJenkinsを使ったCI/CDの構築について、課題やその解決のための構成などについて説明し、リソースの構築、Jenkinsのデプロイまでを解説しました。
つづきは、Alibaba CloudでJenkinsを使ったCI/CD(その二)をご覧ください。
条件に該当するページがございません