Member-only story
Ginkgo、Gomega、Operator Runtimeを使ったKubernetesのオペレータのテスト
10 min readAug 17, 2020
私は最近、Kubenetes Operator を本番環境で行った経験について書きましたが、その大部分はもちろんテストです。この記事では、テストの話をもう少し深く掘り下げます。
Prescaled CronJobオペレータを参照ください: https://github.com/microsoft/k8s-cronjob-prescaler.
始めに
本当に良い記事が載っています。自力で実行するのに役立つGinkgoのドキュメントもあります。まずは以下の2つのガイドを読んでみてください。
- https://medium.com/boldly-going/unit-testing-in-go-with-ginkgo-part-1-ce6ff06eb17f
- https://onsi.github.io/ginkgo/#getting-started-writing-your-first-test
Ginkgoを使ってオペレーターをテストすることに焦点を当てます。
Writing your Tests
私たちのテストは基本的に Kubernetes のオペレータにオブジェクトを送信して、戻ってきたものが正しいかどうかをチェックしているので、Kubernetes のマネージャーとクライアントが必要です。私たちのBeforeSuite メソッドでは次のようになります。
k8sManager, err = ctrl.NewManager(cfg, ctrl.Options{Scheme: scheme.Scheme,MetricsBindAddress: metricsAddr,})k8sManager.Start(ctrl.SetupSignalHandler())k8sClient = k8sManager.GetClient()
では、リソースを作成してk8sで実行してみましょう。以下のコードは Describe / Context / It ブロックを示しており、ここでは *some* オブジェクトを Kubernetes に送信しています。これはポッド、デプロイメント、または独自の CRD のいずれかです。
var _ = Describe("PrescaledCronJob Controller", func() {Context("Cronjob Autogeneration", func() {It("Should create cronjob correctly", func() {