参加レポート: cdCon Japan 2023

さてさて。今年も残るところあとわずかですね~⛄🎅
OpenShift Advent Calendar 2023 の6日目は、OpenShiftの技術営業のフリをしている北山からお届けしますー。
今年も日々の提案ナレッジをお届けっ!!と思ったのですが、今回はちょうど cdCon Japan に参加する機会を頂いたので、現地レポートをお送りします。
ところで皆様は、 Open Source Summit Japan 2023 に参加されたことはありますでしょうか?? クラウドネイティブ界隈だとCNCFのKubeConが有名どころですが、Open Source SummitもLinux Foundationによって開催されているオープンソースの国際イベントの一つです。毎年欧州や北米と合わせ、日本でも開催されている貴重なイベントで、2023年はお台場(Ariake Central Tower Hall & Conference)で行われました。実は毎年、名だたる国産SI企業様と並んでRed Hatもスポンサーしてるんですよっ!?

その併設イベントとして、今年もcdCon Japanを始めとするいくつかのイベントが同じ場所で開催されました。  

  • Hyperledger Member Summit Tokyo : エンタープライズグレードのブロックチェーン技術に関するイベント
  • cdCon Japan : 継続的デリバリーに関するイベント
  • OpenSSF Day Japan : オープンソースセキュリティに関するイベント
  • Open Compliance Summit : コンプライアンスに関するイベント

今回紹介するcdConは、Linux Foundaionの傘下にあるContinuous Delivery Foundation(CDF)によって運営されているカンファレンスです。

Continuous Delivery Foundation(CDF)のプロジェクト

CDFは、継続的インテグレーションや継続的デリバリー(CI/CD)の発展に伴い、プロジェクト開発者やエンドユーザー、またベンダー間の中立的なコラボレーションを促進して、CI/CDの業界仕様を推進した団体です。
2023/12時点でCDFがホストしているオープンソースプロジェクトには、以下のものがあります。
詳細: Continuous Delivery Landscape

いつの間にか増えてきましたねぇ~。これらのプロジェクトの選定は、CDFの技術概要委員会(TOC)によって採択されています。
このプロジェクトを見ると「OpenShift GitOpsでも利用されているArgoCDはないの?」と思う方もいらっしゃるかもしれませんが、ArgoCDはCNCFに寄贈され、2022/12にGraduated Projectとして認定されています。
このようにオープンソースプロジェクトひとつとっても、CNCFやCDFなど、どこの団体に所属するのかといった議論だけでなく、cdConとは別にArgoConやFluxConというようにプロジェクト独自のカンファレンスを行う道もあります。それぞれプロジェクトのイロがありつつも、GitOpsはContinuous Deliveryには欠かせない技術要素としてcdConのセッションにもよくでてきます。
たとえば、Red HatのKevinのセッションでは、Quarkus製のレーシングゲームが紹介され、会場みんなでArgoCDを使用したリリースを体験しました。

cdCon Japan 2023の気になったセッション

さて。参加したセッションの中から気になった以下のセッションについて、簡単にメモ。

注1. 資料の利用規約を配慮し、今回は下記よりpdfを直接DLください。
注2. 本編のPipelineは「Tekton Pipelines」= CRD: Pipelinesを示します。

"Pipeline as Code" Journey

Date: Monday, December 4 • 16:10 - 16:40
Presenter: Jun Makishi & Kasuki Aizawa, NTT Communication
Agenda Link: https://sched.co/1TzRl
Presentaion: "Pipeline as Code" Journey

セッション概要

NTT Communicationさんの中で使われているTekonパイプラインを管理するために Pipeline as Code を実装されたお話です。
ここでは docomo business RINK というサービスを安定的にデプロイするための「パイプライン」を動的に提供するSREとしての取り組みを発表いただきました。

Journey 1 : Pipeline as Code the moderate way

ここまでは、SREチームが標準的なPipelineを提供することを前提とした運用。

  • Step#0: First development flow of Pipeline as Code
    SRE側で標準的なPipelineを作成し、プルリクエストでの変更によってパイプラインを管理。アプリケーション側でPipelineRunを実行。
  • Problem: Disturbing application team’s activity
    ただし、Pipelineの作成が失敗するとアプリケーション側でPipelineRunが実行できずスタックしてしまう。
  • Step#1: Pipeline end-to-end testing
    そのため、パイプライン実行確認専用のパイプラインテスト環境を作成。
  • Problem: Firefighting pipeline troubles
    異なるアプリケーションでは異なるパイプライン構築が必要であり、個別カスタマイズを要求されるとPipeline開発者に依存してしまう。
  • Step#2: Scaled pipeline with standardization
    パイプライン作成のスタンダード化やオンボーディングを各チームで実施。チームビルディングによって対応。

Journey 2: Pipeline as Code the hard way

ここからは、SREチームがPipeline Template生成ツール管理し、各アプリケーションチーム側でPipelineを生成する運用。

  • Problem: One-size-fill-all Pipeline
    すべてのアプリケーションチームが標準Pipelineに異なるパラメーターを入れると、パラメーターが多すぎる
  • Step#3: Composable pipeline
    テンプレートとして CUE Lang を使い、Pipelineそのものを生成できる「Composable pipeline」の仕組みを構築
  • Pipeline generation at glance
    「Composable pipeline」の仕組みによって、Pipeline生成の役割はアプリケーションチーム側に移譲。
    アプリケーションチームは必要なタスクを選ぶだけで、それに応じたPipelineを生成できる。
  • Implementing packages with tests
    SREチームは「Composable pipeline」の仕組みをテストするために、期待するマニフェストと、CUEによって生成されたマニフェストを比較してテスト。
  • Problem: unstable packages
    一つの環境でテストしていたため、異なるKubernetesバージョンやクラウドAPIによるテストカバレッジが少なかった。
  • Step#4: Pipeline package testing Golangによるテストツールを作成し、異なるKubernetes APIのテストができる用にテストカバレッジを増強。
  • Demo
    最後にDEMOの実施。近日Demoコードを公開予定!!

Conclusion

CUE Langだとメンテナンスできる人も限られるため、今後はCUEではなくYAMLで対応できるように検討。TektonもカスタムOperatorで拡張していくことを検討。

My impressions

"Pipeline as Code"という概念は知っていたものの、実際にTekton Pipelinesを使ってプロジェクトを回している話は初めてだったので、個人的に色々学ぶことができました。またマニフェスト生成方法に関しても、普段はKustomizeやHelm Chartに慣れてしまっていましたが、CUE Langを使っていたのが興味深かったです。
すでに「Composable pipeline」の仕組みである、Adaptersが以下に公開されていたので、ソースコードをいくつかのぞいて見てました。(あくまで見たただけで、すいませんwww)
いくつかのAdapters(Task生成用かな?)からPipelineの中でやりたいTaskを選んで、CUEでコンパイルをすればPipelineが生成されるのかな?と妄想。
https://github.com/qmonus/official-cloud-native-adapters/tree/main/docs/cicd

例: official-cloud-native-adapters/pipeline/scan/trivyGcp.cue

package trivyGcp

import (
    "strings"
    "qmonus.net/adapter/official/pipeline:utils"
    "qmonus.net/adapter/official/pipeline/tasks:trivyImageScanGcp"
)

DesignPattern: {
    name: "imageScan:trivyGcp"

    pipelineParameters: {
        image:        string | *""
        shouldNotify: bool | *false
    }

    let _imageName = strings.ToLower(pipelineParameters.image)

    _scanTask: string

    if pipelineParameters.image != "" {
        _scanTask: {
            utils.#concatkebab
            input: [_imageName, "image-scan-gcp"]
        }.out
    }
    if pipelineParameters.image == "" {
        _scanTask: "image-scan-gcp"
    }
…

社内ツールだけではもったいないと思ってしまうほどちゃんとドキュメント化もされていたので、SREのオンボーディングの取り組みが素晴らしいなぁと思った次第です。
Tektonの中にも Pipeline as Code の仕組みがありTektonHubからPipelines生成ができるので、今後はこうしたツールに置き換わるのかなー。とも期待。
cdCon含め、それぞれの業界標準や規則、ガバナンスを確認するCI/CDパイプラインが整ってくると、日本のExcel $ 目grep 文化も減るのにな~。と改めて感じたところでした。
おしまい。

さいごに

色々宣伝を。。。

Pipelines with Tekton

今回紹介したTektonのスキルテストが開始されました。是非CDFでもGraduatedプロジェクト認定されている「Tekton」をこれから使っていく方は是非挑戦してみてください。

https://cd.foundation/blog/2023/12/03/new-skillcred-pipelines-with-tekton/

CNCF Annual Survey

毎年CNCFから提供されるAnnual Surveyですが、日本の回答率が毎年そんなに多くないようです。是非この機会に回答を~。
https://www.research.net/r/S5BY23R

Kubernetesマイクロサービス開発の実践

なんとなんと、LINEヤフー株式会社 黒帯の早川さんが執筆した書籍が2023/12/19に発売されます🎉🎉🎉
既存アプリを、Kubernetesにリフトしていくぞ!!という方向けのノウハウがギッシリ詰まった必読図書です。

https://amzn.asia/d/9vD3LGe

Kubernetes CI/CDパイプラインの実装

Tekton & Argo の使い方や仕組みを執筆しました!! なお、だいぶまえ(藁
是非Tekton & Argo(GitOps)の勉強などにご活用ください!!

https://www.amazon.co.jp/dp/4295012750

Re: おしまい。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。