vm.gowatana.jp

NEOにほんごVMware(仮)

Sonobuoy で TCE Kubernetes クラスタの簡易動作確認をしてみる。(Quick Mode)

Tanzu Community Edition(TCE)で作成した Kubernetes クラスタで、Sonobuoy を利用して、簡易的な動作確認を実施してみます。

Sonobuoy は Kubernetes の診断ツールで、クラスタが CNCF(Cloud Native Computing Foundation)の仕様への適合性確認や、CIS Benchmark のテストを実施できます。

 

Sonobuoy テスト項目が多く、デフォルトで実行(sonobuoy run)してみるとテストが完了するまでに数時間かかったりします。そこで、とりあえず Sonobuoy を使いはじめてみるべく Quick モードでテストを実行してみます。

今回の内容です。

 

今回の環境

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.1    dev
$ 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 をインストールします。

$ 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 ネームスペースにリソースが作成されます。

f:id:gowatana:20220130175636p:plain

 

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 コンテナは残ります。

f:id:gowatana:20220130175816p:plain

 

これは、「sonobuoy delete」で削除します。

$ sonobuoy delete

 

ちなみに、Tanzu Mission Control の Cluster Inspections 機能でも Sonobuoy を利用しています。その 3つのモードのうち「Lite」は、テスト結果を確認してみると、Sonobuoy での Quick モードを実行しているようです。

docs.vmware.com

 

おまけ: Tanzu CLI からの実行(2022/06/24)

最近の TCE だと、tanzu コマンドで Sonobuoy が使用できます。Tanzu CLI には、conformance というプラグインとしてインストールされています。

「sonobuoy run ~」のかわりに、「tanzu conformance run ~」といった感じで実行します。

 

以上、Sonobuoy で簡易テストを実行してみる話でした。