この連載が書籍になりました!『RancherによるKubernetes活用完全ガイド

Rancher Pipelineを使ったCI/CD

2019年6月5日(水)
藤原 涼馬
連載7回目となる今回は、Rancher Pipelineを用いたCDの実現方法について解説します。

Rancher Pipelineを使ったCI/CD

前回までで、GitLabのPipelineを使ったCIとRancher Catalogを用いたCIからデプロイまでの流れを解説しました。今回は前回の補足として、Rancher Pipelineを用いたCDについて解説します。

Rancher Pipelineとは

Rancher Pipelineは、単純なCI/CDパイプラインを提供するための仕組みです。Rancherのバージョン2.1から本格的に提供されるようになりました。以下のような機能を提供しています。※1

  • Dockerイメージのビルドとレジストリへのプッシュ
  • 任意のスクリプトの実行
  • Kubernetesのリソースマニフェストの適用

※1:さらに、バージョン2.2では機能が強化され。カタログテンプレートの公開・カタログアプリケーションのデプロイといった機能が提供されるようになっています。

Rancher Pipelineの構成

Rancher Pipelineは、内部的には以下の3要素から構成されています。

  • Jenkins
    • CI/CDパイプラインの実行エンジン(Rancherからのみ操作でき、Jenkins本体のUIはユーザには公開されません)
  • Docker registry
    • CIパイプラインでビルドされたDockerイメージを保管します。なお、リモートのリポジトリに保管する場合は利用されません※2
  • Minio
    • CI/CDバイプラインの実行結果のターミナルログを保管します

※2:今回はGitLab Container Registry(以下、GitLab CR)にイメージを保管するため、利用しません。

実際に利用する際には、DockerイメージやCI/CDのターミナルログのバックアップやリストアを除き、あまり内部の構成を意識することはないでしょう。※3

※3:なお、これらのバックアップについては具体的な方法についてはドキュメントでは定義されていません。基本的にはPersistent Volume内部にデータが含まれているため、ストレージクラス固有のバックアップ方法を使ってバックアップを取得することになるでしょう。

Rancher Pipelineを構成する際に必要となる概念として、PipelineStageStepがあります。それぞれの関係を下図1に示します。

図1:Rancher Pipelineの構成要素

図1:Rancher Pipelineの構成要素

Pipelineの中にStageがあり、その中にStepがあります。

Pipeline全体の定義は.rancher-pipeline.ymlファイルで記述します。しかし、Rancherでは基本的なパイプライン定義はすべてGUIで行えるようになっているため、大枠をGUIで作成し、詳細を.rancher-pipeline.ymlを直接編集する形で実現するのが良いでしょう。

Stageは次に述べるStepを束ねるものです。同じStageに含まれるStepは同時に実行されます。そのため実行順序に依存関係のあるStepは、その依存関係に合わせたStageに分けて所属させたほうが良いでしょう。

最後のStepが、実際に様々な処理が行われる部分になります。例えばイメージのビルドやテストといったCI、Kubernetesのマニフェストファイルの適用といったCDが行われるのは、この要素の中です。

以降は実際に前回実装したGitLab CIのパイプラインとほぼ同等のCIパイプラインに加えて、CDも含めたCI/CDパイプラインを作成してみましょう。

Rancher Pipelineの利用

さて、ここからはRancher Pipelineの導入です。実際には複数のステップから構成されます。何も設定していない状態からスタートした場合は、以下のようなステップを踏むことになります。

  1. Rancherとgitリポジトリ(今回はGitLab)との連携
  2. Rancher Pipelineの構築

では、それぞれを実際の流れに沿って解説していきます。

RancherとGitLabの連携

まず、Rancher Pipelineを設定したいプロジェクト(図2の場合はlocalクラスタのrancherプロジェクト)を選択します。次にWorkloadsメニュー(図2(1))を選択ます。Workloadsの画面に遷移したらPipelinesタブを選択します(図2(2))。その後表示される画面でConfigure Repositoriesを選択します(図2(3))。

図2:Pipelineの設定

図2:Pipelineの設定

すると連携させているリポジトリの一覧画面(図3)が表示されますが、初期時点ではサンプルを除いていかなるリポジトリとも連携していません。では今回はGitLab.com上に作成しているサンプルアプリケーションのリポジトリと連携させてみましょう。図3のAuthorize & Fetch Your Own Repositoriesをクリックします。

図3:連携しているRepositoryの一覧画面

図3:連携しているRepositoryの一覧画面

リポジトリの認証情報を設定していない場合は、その設定を行うことを確認するモーダルウィンドウが開きます(図4)ので、Config Nowをクリックします。

図4:リポジトリ認証機能の有効化確認

図4:リポジトリ認証機能の有効化確認

今回はGitLabとの連携なので、GibLabのアイコンを選択します(図5(1))。次に、図5(2)のリンクを図5(3)のURLをコピーした後に選択します。

図5:リポジトリ連携の設定画面

図5:リポジトリ連携の設定画面

図5(2)のリンクをクリックすると、GitLab.comのアプリケーション連携の設定画面に遷移します(図6)。アプリケーションの名前(図6(1))を入力し、リダイレクト先のURL(図6(2))に図5(3)のURLを指定したら、このアプリケーションが必要とする権限を選択します(図6(3))。すべて入力し終えたらSave applicationボタンをクリックします(図6(4))。

図6:GitLab.com側のアプリケーション連携設定画面

図6:GitLab.com側のアプリケーション連携設定画面

確認画面が出るのでAuthorizeボタンをクリックします(図7)。

図7:アプリケーション連携確認画面

図7:アプリケーション連携確認画面

アプリケーション連携用のApplication ID(図8(1))とSecret(図8(2))が取得できます。これを手元に記録しておきましょう。

図8:アプリケーション連携用の<b>Application ID</b>と<b>Secret</b>

図8:アプリケーション連携用のApplication IDSecret

さて、図5の画面に戻ります。先ほど図8で取得したApplication IDSecretをそれぞれ図9(1)、図9(2)に入力しましょう。入力し終わったら、Authenticateボタンをクリックします(図9(3))。

図9:リポジトリ連携の設定画面への<b>Application ID</b>と<b>Secret</b>の入力

図9:リポジトリ連携の設定画面へのApplication IDSecretの入力

連携可能なリポジトリの一覧が表示されます。今回連携したいリポジトリ(ti_rancher_k8s_sampleapp.git)をEnabledにします(図10(1))。無事に切り替わったら、Doneボタンをクリックします(図10(2))。

図10:連携可能なリポジトリの一覧

図10:連携可能なリポジトリの一覧

これでRancher PipelineとGitlab.com上のgitリポジトリの間の連携設定が完了しました。

しかし、これだけではまだGitLab CRをRancher Pipelineから操作することができません。GitLab CRとの連携のために、追加の設定を進めましょう。

前回の連載と同様にGitLab.comのアクセストークンを取得します(図11)。トークンの名前を指定し(図11(1))、権限としてapiを付与します(図11(2))。apiの権限を付与するのは、GitLab CRに対しての書き込みも行うためです。ここまで設定したら、Create personal access tokenボタンをクリックしましょう(図11(3))。

図11:GitLab - Rancher Pipeline連携のためのトークンの取得

図11:GitLab - Rancher Pipeline連携のためのトークンの取得

ボタンをクリック後、画面が遷移するとアクセストークンが表示されます(図12)。図中の注意書きにもあるように、トークンの値を再度確認する手段はないので、ここで確実に記録するように注意してください。では、この取得したトークンを使って、GitLab CRにアクセスするためのレジストリの認証情報を作成していきましょう。

図12:作成されたアクセストークン

図12:作成されたアクセストークン

レジストリ認証情報を設定するためにメニューからResourcesRegistriesの順に選択します(図13)。

図13:レジストリの認証情報一覧画面への遷移

図13:レジストリの認証情報一覧画面への遷移

レジストリの認証情報一覧が表示されるので、Add Registryボタン(図14赤枠)をクリックします。

図14:レジストリの認証情報一覧

図14:レジストリの認証情報一覧

レジストリ認証情報の名前を設定(図15(1))し、Available to all namespaces in this project(図15(2))を選択します。CI/CDパイプラインが立ち上がる際にはランダムな名前のネームスペースが作成されるので、すべてのネームスペースで利用できるようにしておきます。今回はGitLab CRを利用するので、AddressについてはCustomを選択してregistry.gitlab.comを設定します(図15(3))。レジストリのユーザ名にはregistry_user(GitLab CR利用の際の固定値)を設定します(図15(4))。最後に図13で取得したシークレット情報をレジストリのパスワードに設定します(図15(5))。ここまで完了したら、Saveボタンをクリックします(図15(6))。

図15:レジストリの認証情報設定画面

図15:レジストリの認証情報設定画面

ここまでで、連携したいGitLabプロジェクトに含まれるgitリポジトリおよびコンテナレジストリと、Rancherの連携設定の投入が完了しました。以降はRancher Pipelineの作成に進んでいきます。

株式会社リクルートテクノロジーズ

ITエンジニアリング本部プロダクティビティエンジニアリング部
クラウドアーキテクトグループ

Rancher JPコミュニティコアメンバー

ユーザ系SIerにてR&Dを経験したのち、2016年より現職。 業務ではパブリッククラウド、コンテナ関連技術を活用した 先進テクノロジーアーキテクチャの事業装着を担当。 Japan Container Days v18.12や、RancherJPのイベント等登壇等複数。

連載バックナンバー

クラウド技術解説
第11回

Rancherコードリーディング入門(3/3)

2020/2/19
前回に続き、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。
クラウド技術解説
第10回

Rancherコードリーディング入門(2/3)

2019/12/25
前回に続き、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。
クラウド技術解説
第9回

Rancherコードリーディング入門(1/3)

2019/11/5
今回からは、紙面の都合で「RancherによるKubernetes活用完全ガイド」に掲載されなかったパートをご紹介します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています