[Kubernetes, Cloud] Deploy Jenkins on Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)

原文はこちら。
https://blogs.oracle.com/cloud-infrastructure/deploy-jenkins-on-oke




以前のエントリで、Oracle Cloud Infrastructure Compute plugin for Jenkinsを使ってOracle Cloud Infrastructure上にマスタ/スレーブアーキテクチャでJenkinsをデプロイする方法を説明しました。
Deploy Jenkins on Oracle Cloud Infrastructure
https://blogs.oracle.com/cloud-infrastructure/deploy-jenkins-on-oracle-cloud-infrastructure
Oracle Cloud Infrastructure Compute Plugin
https://github.com/oracle/oci-compute-jenkins-plugin
このプラグインを使うと、仮想マシン(VM)やベアメタルインスタンスをOracle Cloud Infrastructure内でオンデマンドにスレーブ/エージェントとしてスピンアップし、ジョブ完了後自動的に切り離すことができます。数多くのエージェントをスピンアップすることにより、Jenkinsは多数のジョブを並列実行できます。
VMベースのプラグインを使うことに対する代替策として、その代わりにコンテナベースのJenkinsエージェントを作成できます。これはVMよりも迅速にスピンアップできます(秒単位と分単位の違い)し、ビルドジョブ完了後の切り離しも迅速です。必要な全ツールや環境設定を備えたDockerコンテナイメージを基にしてコンテナベースのJenkinsエージェントをプロビジョニングします。

このエントリでは、JenkinsエージェントをDockerコンテナとしてセットアップし、Kubernetesクラスタ内にデプロイする方法を紹介します。これを実現するために、別のJenkinsプラグインを使用します。それがKubernetes plugin for Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) です。 OKEは安全で可用性の高いKubernetesクラスタを提供し、Oracle Cloud Infrastructureでコンテナ化されたアプリケーションを管理します。このエントリの手順に従うと、下図のようにJenkinsを展開できます。

Prerequisites

Step 1: Install the Kubernetes Plugin for Jenkins

Kubernetes plugin for Jenkinsを使って動的なJenkinsエージェントをKubernetesクラスタ内で実行します。
  1. Jenkins Dashboardで、Manage Jenkins > Manage Plugins を選択
  2. Available タブで、Kubernetes pluginを探し、インストール(再起動しない)

Step 2: Configure the Kubernetes Plugin with OKE

  1. In the Jenkins Dashboardダッシュボードで、Manage Jenkins > Configure System を選択
  2. Add a new cloud をクリックし、Kubernetesを選択
  3. Kubernetes クラウド設定の項目に移動し、以下の情報を入力する
    1. Name: Kubernetes クラウド設定の名前
    2. Kubernetes URL: OKEクラスタのエンドポイント。以下のコマンドを実行してKubernetes URLを取得できる(すでにkubeconfigファイルをダウンロード済みである前提)
    3. Kubernetes server certificate key: X509 PEM エンコードされた証明書。Disable https certificate checkを選択した場合にはオプション扱い。以下のコマンドを実行してKubernetesシークレット・トークンを取得できる(すでにkubeconfigファイルをダウンロード済みである前提)
    4. Kubernetes namespace: Kubernetesクラスタの名前空間。
    5. Credentials: Kubernetesシークレット・トークンを格納するシークレットテキスト。kubeconfigファイルでKubernetes証明書キーを取得できるが、base64エンコードされているので、デコードする必要がある。
  4. Kubernetesロールベースアクセス制御(RBAC)を構成し、デフォルトサービスアカウントトークンを有効化し、adminロールを付与することによってクラスタとの対話を可能にする
  5. Test Connection をクリックしてレスポンスが以下のスクリーンショットのように “Connection test successful” であることを確認する
    Note: “No valid crumb was included in the request” というエラーメッセージが表示されることがあるが、このエラーはJenkins Kubernetes Pluginの不具合である。エラーを修正するには、以前のページに戻って再実行する。
  6. Configure the Jenkins URL by entering your Jenkins Master URLを指定してJenkins URLを構成する。残りの入力フィールドはデフォルト値を使ってもよい。
  7. 以下のスクリーンショットのように、 Kubernetes Pod Template を設定する。ビルドジョブ実行時に必要なので、Jenkinsエージェントに設定したラベルを忘れないようにする。
  8. 以下のスクリーンショットのように、Container Template を設定する。このエントリの目的のため、カスタムJenkinsのjnlp-slave Dockerイメージのpull元としてOracle Container Registryを利用する。Jenkinsのjnlp-slave Dockerイメージはすでにレジストリで利用可能になっていることを確認しておくこと。また、パブリックのDocker Hubレジストリを使ってJenkinsのjnlp-slaveイメージをpullすることもできる。この場合、Docker image フィールドにはjenkins/jnlp-slaveを指定する。完了したら設定を保存する。
Notes:
  • Oracle Container Registryのリポジトリにpublicとしてマークを付け、カスタムjnlp-slave Dockerイメージを取得できるようにしているが、プライベートリポジトリを使用している場合は、リポジトリにアクセスするための適切な資格情報を使うようJenkinsを設定する必要がある。
  • パブリックDocker Hubレジストリを使用してjnlp-slaveイメージを取得する場合は、必ずjenkins/jnlp-slaveと入力する。多くのオンラインリソースにはjenkinsci/jnlp-slaveを指定するような記述がありますが、この設定は廃止予定である。

Step 3: Test the Kubernetes Plugin with OKE

  1. New > Freestyle project を選択してJenkinsで簡単なプロジェクトを作成する
  2. このプロジェクト名を testOKE とし、デフォルト値を使う。Label Expressionにはk8sを指定しておく(以前の設定で利用したもの)その後、プロジェクトをビルドする。

    ビルド開始後、 jnlp-slave コンテナがJenkins Dashboardでプロビジョニングされる。
  3. 以下のコマンドを実行してステータスを確認する。
これで、Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) へのJenkinsエージェントのデプロイは完了です。

Extending the Deployment

以前のデプロイで、JenkinsマスターをVMとして実行し、Container Service for Kubernetes (OKE)上でJenkinsエージェント/スレーブをDockerコンテナとしてスケールアウトしました。JenkinsマスタをJenkinsスレーブのそばのKubernetesクラスタ内にデプロイすることで、このデプロイメントを拡張できます。この構成では、Jenkinsコンテナ(マスタとスレーブの両方)の耐障害性、サービス・レジリエンシ、リソース利用率が向上します。設定方法を見ていくことにしましょう。このデプロイメントは下図の設定に類似しています。

Prerequisites

  • Oracle Cloud InfrastructureにKubernetesクラスタが展開済みであること

Deployment

KubernetesにJenkinsマスタをデプロイする手順は以下のようです。
  1. Jenkins用のKubernetes manifestファイルを準備
  2. Oracle Cloud Infrastructure Block Volume上に、永続ボリュームとともにJenkinsマスタをデプロイ
  3. Jenkinsサービスをロードバランサを使って公開
  4. Jenkinsマスタを構成

Step 1: Prepare the Kubernetes Manifests for Jenkins

jenkins-master.yaml manifestファイルには、Jenkinsマスタをデプロイするための構成が含まれており、1個のレプリカを作成します。この設定では、最新のJenkinsイメージを使用し、Jenkinsのマスターコンテナにポート8080と50000を公開します。jenkins-dirボリュームマウントは、jenkins-master-pvcというPVCに関連付けられています。

jenkins-pvc.yamlファイルは、Oracle Cloud Infrastructureのブロックボリュームを含むPVCの設定で構成されています。ブロックボリュームとして50GB確保していますが、これは必要に応じてJenkinsビルドファイルやアーティファクトを格納するために使われます。

Step 2: Deploy to the Kubernetes Cluster

Store the manifestファイルをディレクトリ(例えばjenkins-k8s)に格納し、以下のコマンドを実行してPVCを使ってJenkinsマスタデプロイメントを作成します。

デプロイメントPodが作成されたことを確認します。


PVCが作成されたことを確認します。その際には以下のコマンドを実行するか、もしくはOracle Cloud InfrastructureコンソールのBlock Volumeの画面を使います。


Step 3: Expose the Deployment via a Load Balancer

デプロイメントを作成したら、サービスを作成し、そのサービスをOracle Cloud Infrastructureロードバランサを使って80/tcpで公開できます。(Jenkinsマスタはデフォルトでは8080/tcpをリスニングしているため)ターゲット・ポートとして8080/tcpを指定します。

Oracle Cloud Infrastructureコンソールでロードバランサがプロビジョニングされていることを確認できます。プロビジョニング後、リスナーとして80/tcpを使って、パブリックIPアドレスが公開されます。

サービスのパブリックIPアドレスを以下のコマンドを実行して確認できます。

Step 4: Configure the Jenkins Master

Step 3で入手したパブリックIPと80/tcpを使ってJenkinsダッシュボードにアクセスすると、以下のような画面が確認できるはずです。

以下のコマンドを実行してJenkinsのadminの初期パスワードを取得します。


この後、Jenkinsマスタの構成プロセスは以前のエントリに記述した内容に類似しています。
Deploy Jenkins on Oracle Cloud Infrastructure
https://blogs.oracle.com/cloud-infrastructure/deploy-jenkins-on-oracle-cloud-infrastructure
Jenkinsマスタを構成後、Kubernetesプラグインをインストールすれば、このエントリの最初に説明したようにJenkinsスレーブをスケールアウトできます。

Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)は、Jenkins Kubernetesプラグインとのシームレスに統合できます。Jenkins KubernetesプラグインでのOKEの設定は、他のKubernetesエンジンの設定に類似しています。OKEは安全で可用性の高いKubernetesクラスタを提供し、Oracle Cloud Infrastructureでコンテナ化されたアプリケーションを管理します。

0 件のコメント:

コメントを投稿