Kubernetes Meetup Tokyo #42 で LT しました。 https://k8sjp.connpass.com/event/214286/
Kubernetes Meetup TokyoEnvtest Binaries Managerを使ってみた話@hhiroshell1
View Slide
Kubernetes Meetup Tokyo宣伝しっかり感染対策して遊舎⼯房に⾏きましょう2遊舎⼯房さんの店舗はこちら→↓現在の@hhiroshellのキーボード #crkbd⾃⼰紹介@hhiroshell早川 博(はやかわ ひろし)• Cloud Nativeなインフラを開発するエンジニア。Yahoo Japan Corporation 所属• エンジニアコミュニティ「Cloud Native Developers JP」オーガナイザー• Developers Summit 2018Japan Container Days 12.18CloudNative Days Tokyo 2019 / 2020登壇• ⾃作キーボード沼
Kubernetes Meetup TokyoEnvtest Binaries Manager is 何• カスタムコントローラーのテストで使うツール• テスト⽤のControl Planeバイナリ(API Server + etcd)を便利に管理• 2021年6⽉8⽇⽣まれ(リリースタグが付いた)• https://github.com/kubernetes-sigs/controller-runtime/tree/master/tools/setup-envtest3
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
Kubernetes Meetup TokyoEnvtestによるカスタムコントローラーのテスト• テストを実⾏する環境上にControl Planeバイナリが必要5API Server & etcdControl Planeバイナリ起動 (goroutine)watch & edit起動 (Envtest経由でバイナリ実⾏)環境変数 KUBEBUILDER_ASSETS で指定されたパスhoge_controller.gosuite_test.gohoge_controller_test.gocontrollerの振る舞いをテスト• hogeリソースを作ったら、配下にfugaリソースが作られる• fugaリソースを消したら、hogeリソースを元に再作成される...etc
Kubernetes Meetup TokyoControl Planeバイナリを⽤意するのは⼤変• kubebuilderのドキュメントではこれを⼿動で実施 (curl, tar)• setup-envtest.sh で多少省⼒化できたが以下のような不便さがあった– 使えるk8sバージョンを調べるのが⼿間– バージョンを切り替えて使ったり管理するのが⼤変61. 使いたいk8sバージョンのバイナリをダウンロード/展開する2. Envtestにバイナリの場所を指⽰する(環境変数で指定)3. テストを実⾏する
Kubernetes Meetup TokyoEnvtest Binary Managerならとても簡単!• 簡単なコマンドでControl Planeバイナリを⼿に⼊れられる• 簡単なコマンドで複数バージョンのバイナリを切り替えられる• 簡単なコマンドでバイナリのパスの環境変数を設定できる• Windows環境でもOK• つまりとても便利7
Kubernetes Meetup Tokyo 8Envtest 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バイナリをダウンロード
Kubernetes Meetup Tokyo 9Envtest 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が使えるようにする)
Kubernetes Meetup Tokyoおまけ• EnvtestによるテストのGitHub Action(中⾝にEnvtest Binaries Managerを利⽤)– https://github.com/marketplace/actions/envtest-action10
Kubernetes Meetup Tokyoまとめ• Envtest Binaries Managerはカスタムコントローラーのテストのときに使うツールです• テスト⽤のControl Planeバイナリを便利に導⼊・管理できます11
Kubernetes Meetup TokyoFin.12
Kubernetes Meetup TokyoAppendix.参考リンク集13
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.sh14