Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Envtest Binaries Managerを使ってみた話 / About Envtest Binaries Manager

Envtest Binaries Managerを使ってみた話 / About Envtest Binaries Manager

Kubernetes Meetup Tokyo #42 で LT しました。
https://k8sjp.connpass.com/event/214286/

hhiroshell

June 24, 2021
Tweet

More Decks by hhiroshell

Other Decks in Technology

Transcript

  1. Kubernetes Meetup Tokyo
    Envtest Binaries Managerを使ってみた話
    @hhiroshell
    1

    View Slide

  2. Kubernetes Meetup Tokyo
    宣伝
    しっかり感染対策して遊舎⼯房に⾏きましょう
    2
    遊舎⼯房さんの店舗はこちら→
    ↓現在の@hhiroshellのキーボード #crkbd
    ⾃⼰紹介
    @hhiroshell
    早川 博
    (はやかわ ひろし)
    • Cloud Nativeなインフラを開発
    するエンジニア。
    Yahoo Japan Corporation 所属
    • エンジニアコミュニティ
    「Cloud Native Developers JP」
    オーガナイザー
    • Developers Summit 2018
    Japan Container Days 12.18
    CloudNative Days Tokyo 2019 / 2020
    登壇
    • ⾃作キーボード沼

    View Slide

  3. Kubernetes Meetup Tokyo
    Envtest Binaries Manager is 何
    • カスタムコントローラーのテストで使うツール
    • テスト⽤のControl Planeバイナリ(API Server + etcd)を便利に管理
    • 2021年6⽉8⽇⽣まれ(リリースタグが付いた)
    • https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest
    3

    View Slide

  4. Kubernetes Meetup Tokyo
    その前に…Envtestとは
    • controller-runtimeに含まれるテストユーティリティのパッケージ
    • API Serverと組み合わせてカスタムコントローラーの結合テスト⾏う
    ことができる
    • kubebuilderでscaffoldするとEnvtest前提のテストが出⼒されたりする。
    なので結構よく使われているのでは
    4
    【参考】Envtestのgodoc: https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/envtest

    View Slide

  5. Kubernetes Meetup Tokyo
    Envtestによるカスタムコントローラーのテスト
    • テストを実⾏する環境上にControl Planeバイナリが必要
    5
    API Server & etcd
    Control Planeバイナリ
    起動 (goroutine)
    watch & edit
    起動 (Envtest経由でバイナリ実⾏)
    環境変数 KUBEBUILDER_ASSETS で指定されたパス
    hoge_controller.go
    suite_test.go
    hoge_controller_test.go
    controllerの振る舞いをテスト
    • hogeリソースを作ったら、配下にfugaリソースが作られる
    • fugaリソースを消したら、hogeリソースを元に再作成される...etc

    View Slide

  6. Kubernetes Meetup Tokyo
    Control Planeバイナリを⽤意するのは⼤変
    • kubebuilderのドキュメントではこれを⼿動で実施 (curl, tar)
    • setup-envtest.sh で多少省⼒化できたが以下のような不便さがあった
    – 使えるk8sバージョンを調べるのが⼿間
    – バージョンを切り替えて使ったり管理するのが⼤変
    6
    1. 使いたいk8sバージョンのバイナリをダウンロード/展開する
    2. Envtestにバイナリの場所を指⽰する(環境変数で指定)
    3. テストを実⾏する

    View Slide

  7. Kubernetes Meetup Tokyo
    Envtest Binary Managerならとても簡単!
    • 簡単なコマンドでControl Planeバイナリを⼿に⼊れられる
    • 簡単なコマンドで複数バージョンのバイナリを切り替えられる
    • 簡単なコマンドでバイナリのパスの環境変数を設定できる
    • Windows環境でもOK
    • つまりとても便利
    7

    View Slide

  8. Kubernetes Meetup Tokyo 8
    Envtest Binaries Manager クイックスタート 1/2
    $ go install sigs.k8s.io/controller-runtime/tools/[email protected]
    • Envtest Binaries Managerのインストール
    $ setup-envtest use
    • 最新版のControl Planeバイナリをダウンロード
    $ setup-envtest list
    • ダウンロード済み/ダウンロード可能なControl Planeバイナリの⼀覧
    $ setup-envtest use 1.21.x
    • バージョンを指定してControl Planeバイナリをダウンロード

    View Slide

  9. Kubernetes Meetup Tokyo 9
    Envtest Binaries Manager クイックスタート 2/2
    $ source <(setup-envtest use -i -p env 1.21.x)
    # export KUBEBUILDER_ASSETS='/Users/hhiroshell/Library/Application Support/io.kubebuilder.envtest/k8s/1.21.2-darwin-amd64'
    • Control Planeバイナリのパスを環境変数に設定(envtestが使えるよう
    にする)

    View Slide

  10. Kubernetes Meetup Tokyo
    おまけ
    • EnvtestによるテストのGitHub Action(中⾝にEnvtest Binaries Managerを利⽤)
    – https://github.com/marketplace/actions/envtest-action
    10

    View Slide

  11. Kubernetes Meetup Tokyo
    まとめ
    • Envtest Binaries Managerはカスタムコントローラーのテストのときに
    使うツールです
    • テスト⽤のControl Planeバイナリを便利に導⼊・管理できます
    11

    View Slide

  12. Kubernetes Meetup Tokyo
    Fin.
    12

    View Slide

  13. Kubernetes Meetup Tokyo
    Appendix.
    参考リンク集
    13

    View Slide

  14. Kubernetes Meetup Tokyo
    【参考リンク】
    • Envtest Binalies Manager
    – https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest
    – https://github.com/kubernetes-sigs/controller-runtime/pull/1488
    • kubebuilderのドキュメント
    – https://book.kubebuilder.io/cronjob-tutorial/writing-tests.html
    – https://book.kubebuilder.io/reference/envtest.html
    • controller-runtimeのenvtestパッケージ
    – https://pkg.go.dev/sigs.k8s.io/controller-runtime/pkg/envtest
    • setup-envtest.sh(Envtest Binaries Managerの前⾝)
    – https://github.com/kubernetes-sigs/controller-runtime/blob/v0.8.3/hack/setup-envtest.sh
    14

    View Slide