Kubernetesを前提としたCI/CDパイプラインの具体例と、本番運用に必要なもの:コンテナベースのCI/CD本番事例大解剖(3)(1/2 ページ)
Kubernetes、コンテナ技術を活用したCI/CD基盤におけるサービス開発について、リクルートテクノロジーズの事例を基に解説する連載。今回は、インフラエンジニア視点からKubernetesを前提としたCI/CDの具体例について解説します。
本連載「コンテナベースのCI/CD本番事例大解剖」では、リクルートテクノロジーズが取り組んだ事例を基に、Kubernetes、コンテナ技術を活用したCI/CD(継続的インテグレーション/継続的デリバリー)基盤におけるサービス開発について解説します。第1〜3回では、「Kubernetes、Dockerをコア技術に据えてサービスを構築した際に、開発、保守運用においてどのような影響があったのか」について、インフラアーキテクト、アプリエンジニア、インフラエンジニアそれぞれの視点から紹介します。
連載第2回の前回はアプリ開発者の視点から紹介しました。今回は、インフラエンジニア視点から、Kubernetesを前提としたCI/CDの具体例について解説します。
Kubernetesを前提とした開発について
Kubernetesを利用する上で最も重要な準備の一つとして、CI/CD環境があります。Kubernetesにアプリケーションをデプロイするには、最低でも下記の手順を踏む必要があります。
- Dockerイメージのビルド
- 「Deployment」「ConfigMap」などのmanifestの組み立て(コンテナのimage tagや、「dev」「stg」「prod」など各環境に向けた変更)
- 各環境に合わせたconfigのデプロイ
これらを毎回手動で行うのは、現実的ではありません。そこで、これらの作業を自動化するために、CD環境が必要になります。
今回のプロジェクトではCI/CDツールとして「Concourse CI」を選択しました。選定した理由、他ツールとの比較に関しては連載第1回で解説しています。
Concourse CI
Concourse CIはPivotal社によるオープンソースソフトウェア(OSS)のCI/CDツールです。yamlを使ってパイプラインを記述し、コンテナベースで各タスクが実行されます。
基本的な機能に関しては、こちらのチュートリアルにまとまっているため、本連載では割愛します。ここでは、Kubernetes(コンテナ環境)で利用する上で最低限必要なCI/CDのフローと、連載第2回の「パイプラインの高速化」の項で解説したパイプラインを組むための具体的な方法を紹介します。
パイプラインの具体例
上記のパイプライン模式図を基にConcourse CI上へデプロイすると、下記サンプルのように表示されます。
パイプラインのサンプル
groups: - name: test jobs: - build-image - unit-test - lint - success-notify resource_types: - name: kubernetes type: docker-image source: repository: zlabjp/kubernetes-resource tag: "1.12" - name: slack-notification type: docker-image source: repository: cfcommunity/slack-notification-resource tag: latest - name: slack-alert type: docker-image source: repository: arbourd/concourse-slack-alert-resource - name: pull-request type: docker-image source: repository: teliaoss/github-pr-resource tag: latest resources: - name: repository type: pull-request source: repository: ((repository)) access_token: ((access-token)) - name: app-docker-image-base type: docker-image source: repository: asia.gcr.io/example-project/app/base username: _json_key password: ((gcp-service-account)) - name: app-docker-image type: docker-image source: repository: asia.gcr.io/example-project/app username: _json_key password: ((gcp-service-account)) - name: notify type: slack-alert source: url: ((slack-webhook)) - name: deploy-notify type: slack-notification source: url: ((slack-webhook)) jobs: - name: build-image plan: - get: repository trigger: true version: every - put: app-docker-image-base params: cache_from: - api-docker-image-base cache: true additional_tags: repository/.git/ORIG_HEAD build: repository dockerfile: repository/app/Dockerfile target_name: base on_failure: ## 失敗時の通知 - put: app-docker-image get_params: skip_download: true params: cache_from: - app-docker-image-base cache: true additional_tags: repository/.git/ORIG_HEAD build: repository dockerfile: repository/app/Dockerfile target_name: app on_failure: ## 失敗時の通知 - name: unit-test plan: - aggregate: - get: repository trigger: true passed: - build-image - get: app-docker-image - task: unit-test image: app-docker-image # unit-testの実行 on_failure: ## 失敗時の通知 on_success: ## 成功時の通知 - name: lint plan: - aggregate: - get: repository trigger: true passed: - build-image - get: app-docker-image - task: lint image: app-docker-image ## lintの実行 on_failure: ## 失敗時の通知 on_success: ## 成功時の通知 - name: success-notify plan: - get: repository trigger: true passed: - lint - unit-test - task: notify-msg ## 成功時の通知
パイプラインの構成
Concourse CIのパイプラインは大きく以下の3つの定義に分かれています。
- resource_types:
パイプラインで利用したいresourceを定義する - resources:
ジョブで利用するために、resourceの詳細を定義する - jobs:
実行されるジョブを定義する
このパイプライン全体の流れの概略は、下記のようになります。
- 各種resource_typesの定義
- resourcesの設定
- 各ジョブの実行
- アプリケーションのイメージのビルド
- unit-testの実行、lintの実行
- 成功の通知
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「コンテナって何? どう使える?」――ソフトウェア開発の課題を解決するコンテナ技術
「コンテナ技術」やコンテナ実行環境の「Docker」、大量のコンテナ管理や負荷分散を実現する「Kubernetes」について概要から本番活用の仕方まで解説する本連載。第1回は「コンテナ技術」や「Docker」が、現代のソフトウェア開発に求められるようになった理由を解説します。 - 「終わりなき開発」「永遠のリリース」が当たり前に――コンテナとマイクロサービスでエンジニアの役割はどう変わるのか
コンテナ、マイクロサービスはエンジニアの働き方や役割にどんな変化をもたらすのか。クラウドネイティブ開発やクラウドアーキテクチャ、データセンター運用などに詳しい、さくらインターネット テクノロジー・エバンジェリストの前佛雅人氏に聞いた。 - GoogleがフルマネージドCI/CDプラットフォーム「Cloud Build」を発表、GitHubとの提携も拡大
Googleは、フルマネージドCI/CD(継続的インテグレーション/継続的デリバリー)プラットフォーム「Google Cloud Build」を発表した。「GitHub」とCloud Buildの接続による新たな統合エクスペリエンスも提供している。