OpenShift Commons Gatheringで語られたOpenShiftに最適なCI/CDとは
レッドハット株式会社が開催したOpenShift Commons Gatheringでは、タイトル通りコンテナプラットフォームのOpenShiftを取り巻くエコシステムに関するセッションが行われた。特にCI/CDに関するセッションは複数行われていた。今回はその中からレッドハットのソリューションアーキテクトが行った「Cloud Native時代のCI/CD」というセッションを紹介する。プレゼンテーションを行ったのはレッドハット株式会社の北山晋吾氏だ。北山氏の肩書きは「クラウドソリューションアーキテクト」となっており、レッドハットがフォーカスするオープンハイブリッドクラウド戦略の中核であるOpenShiftに携わっているのは当然のことだ。その北山氏が、敢えてCI/CDについて解説するセッション(中身はOperator FrameworkとTekton、そしてArgoCDの解説)を担当したのは興味深い。すでにKubernetesと同様に、OpenShiftも「退屈」な時代に差し掛かっているのかもしれない。
北山氏が最初に「バリューストリームのプロセス」として解説したのが、開発から運用に至るプロセスの中身だ。以下の3つの段階に分けて説明した。
- デベロッパーがコードを書き、ビルドしてテスト&デバッグ
- 本番環境に実装する前にテスト環境に入れて結合テスト
- 本番環境に投入
このプロセスのポイントは、Gitによるコード管理とコンテナイメージによるパッケージとKubernetesの活用は、すでに前提となっている点だろう。
ローカルでの開発の後に行われるテスト環境での実装をCI(継続的インテグレーション)、本番環境への実装をCD(継続的デプロイメント)と分けて考えた場合に、北山氏が考えるそれぞれのプロセスのポイントが強調されている。それは開発であれば「どこでも同じ環境で開発できること」であり、CIであれば「ガバナンスの徹底」、そしてCDでは「失敗しないデプロイ」である。
ここでは従来型ツールとしてJenkins、クラウドネイティブなツールとしてTekton、ArgoCDが挙げられており、ここから本格的なクラウドネイティブなCI/CDに関する解説が始まった。北山氏は従来のツールでは設定がツール依存になってしまう欠点を挙げて、いわゆる「Jenkinsおじさん」問題が発生してしまうことを言及した。「Jenkinsおじさん」問題に関しては、PivotalのConcourseを取材した時の記事を参考にして欲しい。
参考:パイプラインベースのCI/CDツール、Concourseとは?
ここではクラウドネイティブ、つまりKubernetesに特化したCIとしては個別の設定ファイルを使うのではなく、Kubernetesを拡張するための仕様、Custom Resourceを使うべきというのが要点である。
このスライドでは、従来のCI/CDの場合開発者がパイプラインを設定することができず、運用担当者に依頼する形で、ビルド、テスト、デプロイなどが行われることを解説された。
そしてKubernetesに特化したCI/CDでは、Kubernetesの設定情報として利用されるCustom Resourceにパイプライン情報が保存されるために、「運用担当者への依頼」という行為そのものがなくなると解説した。
そしてKubernetesのマニフェストを使ったパイプラインの例を挙げ、Tektonが利用するTask、Stepなどのコンセプトを紹介する段となった。
このスライドではTektonがビルドとテスト、イメージのリポジトリーへのプッシュなどを行い、各環境(テスト、本番)への同期はArgoCDが行うという概要が示されている。
ここからはTektonとArgoCDの説明となるが、特にTektonの持つTaskやStep、Task Runなどの新しい用語については詳細な解説が行われた。
実際にTaskを組み合わせてパイプラインを設定し実行するまでを解説し、Custom ResourceとControllerによって実装されていることを解説した。
またRed Hat MarketplaceやOperatorHubと同様に、Tekton Hubとしてカタログ化することでデベロッパーが既存のノウハウを再利用できるように開発が進んでいることを紹介した。ちなみにTektonはJenkinsの開発元であるCloudBeesが創設し、The Linux Foundationのサブ組織として活動しているCD FoundationのFounding Projectである。
このスライドでは、CIにはTektonを用いるが、CDの部分には使わないということが解説された。その理由として開発環境、ステージング環境、本番環境の状態を検知してあるべき姿に変更するやり方(Pull型)がTektonではできず、Push型のデプロイになってしまうことが挙げられた。
このスライドではCDの部分をGitOps、つまりコマンドを使って環境を変更するのではなく、Gitに保存された設定情報を常に真実として環境を設定する方法論を採用していることが解説された。実際の環境とのあるべき設定情報の差異を、ツール側が検知した上で変更を加えるというのがポイントだ。
Intuitが開発し公開しているオープンソースプロジェクトのArgoCDは、最近特に注目されているプロジェクトと言えるだろう。ArgoCDはCNCFのサンドボックスとしても採用されているカオスエンジニアリングのソフトウェア、Litmus Chaosでも採用されているCDツールだ。
ここではGitOpsについても解説を行い、複数の環境をkubectlやocコマンドだけで管理するのは容易ではないことを解説する段となった。
そして、コマンドラインツールだけでは困難な管理のためのツールとして、KustomizeやHelm、OpenShift Templateなどが紹介された。ここでは設定ファイルであるYAMLファイルに環境ごとの設定をパッチとして書き換えるKustomize、KubernetesのパッケージマネージャーであるHelmを簡単に解説した。Helmについては以下の記事を参照されたい。
参考:KubernetesのパッケージマネージャーHelmとは?
そしてまだ計画中のソフトウェアであると念を押してから紹介されたのが、OpenShift GitOps Viewだ。
最後にまとめとして、「CIとCDを分離して自動化ツールに任せること」「独自のツールで実装するのではなくKubernetesの環境設定を利用することで複数の環境に合わせた実装ができること」などを説明して、セッションを終えた。
このセッションで分かるように、OpenShiftのエコシステムの中でもCI/CDやGitOps周辺は特に多くの新しい機能、プロジェクトが計画されている。ただ自動化されたとしても、運用側のノウハウをすべてデベロッパーが吸収して実行するというのはハードルが高いと思われる。すべての開発者に対していわゆるフルスタックエンジニアになれというのは難しいだろう。本番環境に新しいアプリケーションをデプロイすることだけが運用担当者の仕事ではないはずだ。
開発と運用の役割分担については、Microsoftなどが提案している、デベロッパーはコードを書くことに集中し、アプリケーションオペレーターという新しい役割のエンジニアがインフラストラクチャーオペレーターと協力して最適な実装を行うという方法論もある。これについてレッドハットがどのような意見を持っているのか、機会があれば質問してみたい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- レッドハットが「OpenShift Commons Gathering Japan 2021」を開催、キーパーソンが語るハイブリッドクラウドを実現するための3つのポイントとは
- CNDT 2022、ArgoCDとGitHub Actionsの導入でリリース時間を1/4に削減した事例を紹介
- Red Hatがセキュリティ強化と自動化がポイントのOpenShift 4.3をリリース
- CNDO 2021、CI/CDのTektonのロードマップをNTTComのエンジニアが振り返る
- CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは
- KubeCon China開催。DPDKとCI/CDのプレカンファレンスを紹介
- CNDT2020シリーズ:CAのインフラエンジニアが解説するKubernetesネイティブなCI/CD
- CNCFのWebinarからKubernetesのデプロイメントに冪等性を実現するwerfを紹介
- KubeCon+CloudNativeCon NA 2020 IntuitとMayaDataによるカオスエンジニアリングのセッション
- CNDO2021、Kubernetesの運用ツールOperatorを作るチュートリアルセッションを紹介