Tanzu Community Edition(TCE)で作成した Kubernetes クラスタで、Sonobuoy を利用して、簡易的な動作確認を実施してみます。
Sonobuoy は Kubernetes の診断ツールで、クラスタが CNCF(Cloud Native Computing Foundation)の仕様への適合性確認や、CIS Benchmark のテストを実施できます。
- Sonobuoy の Documentation
https://sonobuoy.io/docs/main/
Sonobuoy テスト項目が多く、デフォルトで実行(sonobuoy run)してみるとテストが完了するまでに数時間かかったりします。そこで、とりあえず Sonobuoy を使いはじめてみるべく Quick モードでテストを実行してみます。
今回の内容です。
- 今回の環境
- Sonobuoy のインストール
- Sonobuoy の Quick モード実行
- テスト結果の確認
- Sonobuoy の削除
- おまけ: Tanzu CLI からの実行(2022/06/24)
今回の環境
Tanzu Community Edition(TCE)の、Workload クラスタに実行してみます。
下記のように環境構築しています。
Sonobuoy は、TCE のブートストラップ マシンから実行してみます。
ブートストラップ マシンは、Linux(VMware Photon OS 4.0)です。
$ cat /etc/photon-release VMware Photon OS 4.0 PHOTON_BUILD_NUMBER=1526e30ba
Workload クラスタに接続できるように、コンテキストを設定してあります。
$ tanzu cluster list NAME NAMESPACE STATUS CONTROLPLANE WORKERS KUBERNETES ROLES PLAN wlc-01 default running 1/1 1/1 v1.21.2+vmware.1dev $ tanzu cluster kubeconfig get wlc-01 --admin Credentials of cluster 'wlc-01' have been saved You can now access the cluster by running 'kubectl config use-context wlc-01-admin@wlc-01' $ kubectl config use-context wlc-01-admin@wlc-01 Switched to context "wlc-01-admin@wlc-01". $ kubectl get nodes NAME STATUS ROLES AGE VERSION wlc-01-control-plane-bf2w4 Ready control-plane,master 101m v1.21.2+vmware.1 wlc-01-md-0-5b46cbdc58-zrttr Ready <none> 97m v1.21.2+vmware.1
Sonobuoy とは関係しませんが、テスト結果の確認などで利用できるので jq コマンドをインストールしてあります。
$ rpm -q jq jq-1.6-2.ph4.x86_64
Sonobuoy のインストール
Sonobuoy は、GitHub からダウンロードして、インストールしておきます。
2022年1月時点での最新版は、v0.56.0 です。
- Sonobuoy v0.56.0 のリリース ノートとダウンロードのサイト
https://github.com/vmware-tanzu/sonobuoy/releases/tag/v0.56.0
Sonobuoy をインストールします。
$ curl -OL https://github.com/vmware-tanzu/sonobuoy/releases/download/v0.56.0/sonobuoy_0.56.0_linux_amd64.tar.gz $ mkdir work $ tar zxvf sonobuoy_0.56.0_linux_amd64.tar.gz -C work/ LICENSE sonobuoy $ mkdir $HOME/bin $ install work/sonobuoy $HOME/bin/ $ export PATH=$HOME/bin:$PATH $ echo 'export PATH=$HOME/bin:$PATH' >> $HOME/.bash_profile
Sonobuoy が実行できることを確認しておきます。
$ sonobuoy version --short v0.56.0
Sonobuoy v0.56.0 では、モードの一覧を表示するオプションが追加されました。
$ sonobuoy modes Mode: certified-conformance Description: Certified conformance mode runs the entire conformance suite, even disruptive tests. This is typically run in a dev environment to earn the CNCF Certified Kubernetes status. E2E_FOCUS: \[Conformance\] E2E_SKIP: E2E_PARALLEL: false Mode: conformance-lite Description: An unofficial mode of running the e2e tests which removes some of the longest running tests so that your tests can complete in the fastest time possible while maximizing coverage. E2E_FOCUS: \[Conformance\] E2E_SKIP: Serial|Slow|Disruptive|\[sig-apps\] StatefulSet Basic StatefulSet functionality \[StatefulSetBasic\] should have a working scale subresource \[Conformance\]|\[sig-network\] EndpointSlice sho... (truncated) ... E2E_PARALLEL: true Mode: non-disruptive-conformance Description: Non-destructive conformance mode runs all of the conformance tests except those that would disrupt other cluster operations (e.g. tests that may cause nodes to be restarted or impact clus... (truncated) ... E2E_FOCUS: \[Conformance\] E2E_SKIP: \[Disruptive\]|NoExecuteTaintManager E2E_PARALLEL: false Mode: quick Description: Quick mode runs a single test to create and destroy a pod. Fastest way to check basic cluster operation. E2E_FOCUS: Pods should be submitted and removed E2E_SKIP: E2E_PARALLEL: false
Sonobuoy の Quick モード実行
Sonobuoy を、Quick モードで実行します。「--wait」オプションで、テスト完了までプロンプトが戻らなくなります。
$ sonobuoy run --mode=quick --wait
実際に実行すると、下記のように sonobuoy ネームスペースと、テストで使用するリソースが作成されます。
$ sonobuoy run --mode=quick --wait INFO[0000] create request issued name=sonobuoy namespace= resource=namespaces INFO[0000] create request issued name=sonobuoy-serviceaccount namespace=sonobuoy resource=serviceaccounts INFO[0000] create request issued name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterrolebindings INFO[0000] create request issued name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterroles INFO[0000] create request issued name=sonobuoy-config-cm namespace=sonobuoy resource=configmaps INFO[0000] create request issued name=sonobuoy-plugins-cm namespace=sonobuoy resource=configmaps INFO[0000] create request issued name=sonobuoy namespace=sonobuoy resource=pods INFO[0000] create request issued name=sonobuoy-aggregator namespace=sonobuoy resource=services
「--wait」オプションなしで実行した場合はバックグラウンドで実行されるので、「sonobuoy status」で進捗を確認します。
$ sonobuoy status PLUGIN STATUS RESULT COUNT PROGRESS e2e complete 1 1/1 (0 failures) systemd-logs complete 1 systemd-logs running 1 Sonobuoy is still running. Runs can take 60 minutes or more depending on cluster and plugin configuration.
テスト中は、自動的に Sonobuoy ネームスペースにリソースが作成されます。
STATUS が「complete」になったら、テスト完了です。
$ sonobuoy status PLUGIN STATUS RESULT COUNT PROGRESS e2e complete passed 1 1/1 (0 failures) systemd-logs complete passed 2 Sonobuoy plugins have completed. Preparing results for download.
テスト結果の確認
テストの結果をダウンロードします。「sonobuoy retrieve」で、.tar.gz 形式のファイルがダウンロードされます。
$ RESULTS=$(sonobuoy retrieve) $ echo $RESULTS 202201300830_sonobuoy_f1b42960-94e1-4d2f-a7fc-06a1dc9bb9b9.tar.gz $ ls -lh $RESULTS -rw-r----- 1 demo-01 users 38M Jan 30 08:34 202201300830_sonobuoy_f1b42960-94e1-4d2f-a7fc-06a1dc9bb9b9.tar.gz
ダウンロードした .tar.gz ファイル($RESULTS)を指定して、テストの結果を確認します。Passed: 1、 Failed: 0 なので、テストは成功しています。ただし Quick モードでは、ほとんどのテストが Skip されています。
ちなみに、リソース不足な検証環境だと、クラスタの構成には問題がなくても、タイミング都合でテストが失敗することがありますが。その場合は sonobuoy delete で削除してからリトライすると PASS できたりします。
$ sonobuoy results $RESULTS Plugin: e2e Status: passed Total: 5771 Passed: 1 Failed: 0 Skipped: 5770 Plugin: systemd-logs Status: passed Total: 2 Passed: 2 Failed: 0 Skipped: 0
Quick モードで実行されたテストは、「--mode detailed」でも確認できます。出力が膨大なので、jq コマンドでフィルタしました。Pod の作成と削除だけテストしているようです。(Pods should be submitted and removed)
$ sonobuoy results $RESULTS --mode detailed --plugin e2e | jq -r '. | select (.status != "skipped")' { "name": "[sig-node] Pods should be submitted and removed [NodeConformance] [Conformance]", "status": "passed", "meta": { "path": "e2e|junit_01.xml|Kubernetes e2e suite" } }
Sonobuoy の削除
テスト実行後も、sonobuoy コンテナは残ります。
これは、「sonobuoy delete」で削除します。
$ sonobuoy delete
ちなみに、Tanzu Mission Control の Cluster Inspections 機能でも Sonobuoy を利用しています。その 3つのモードのうち「Lite」は、テスト結果を確認してみると、Sonobuoy での Quick モードを実行しているようです。
おまけ: Tanzu CLI からの実行(2022/06/24)
最近の TCE だと、tanzu コマンドで Sonobuoy が使用できます。Tanzu CLI には、conformance というプラグインとしてインストールされています。
「sonobuoy run ~」のかわりに、「tanzu conformance run ~」といった感じで実行します。
以上、Sonobuoy で簡易テストを実行してみる話でした。