ラズパイk8sクラスタでsonobuoyを試してみる
はじめに
業務で新しくKubernetesクラスタを構築するタイミングがあり「sonobuoy」というツールを知ったので試してみました。
最近v1.23にアップグレードしたおうちラズパイクラスタで試してみたのですが、一部プラグインがうまく動作しなかったので、結局AKSを使って確認することになりました。
マネージドのクラスタでsonobuoyを使っても意味ないとの声が聞こえてきそうですが、今回はあくまで試してみることが目的なので、どのように結果が得られるのかを確認できればよいかなと思っています。
sonobuoyとは
Sonobuoyは、Kubernetesクラスタの状態を簡単に把握できる診断ツールのようです。
以下を確認できます
- Conformance Testing
- Workload Debugging
- Custom Tests and Data Collection
ちなみに日本語ではソノブイと発音するらしいです。
こちらの記事に記載ありました。
sonobuoyはプラグインという単位でテストを実行したり、データを収集したりできるようです。
とりあえず、公式ドキュメントを読みながらsonobuoyについて理解していこうと思います。
インストール
ここからはマスターノードで実施しています。
まずは最新リリースをダウンロードします。
※自分の環境にあったバイナリをダウンロードしてください。
$ wget -q --trust-server-names https://github.com/vmware-tanzu/sonobuoy/releases/download/v0.55.1/sonobuoy_0.55.1_linux_arm64.tar.gz -O sonobuoy_0.55.1_linux_arm64.tar.gz
$ tar -xvf sonobuoy_0.55.1_linux_arm64.tar.gz
x LICENSE
x sonobuoy
$ ls
LICENSE sonobuoy sonobuoy_0.55.1_linux_arm64.tar.gz
抽出したsonobuoyの実行可能ファイルをPATH配下に移動させます。
$ mv sonobuoy /usr/local/bin
$ which sonobuoy
/usr/local/bin/sonobuoy
ラズパイクラスタでの確認
今回sonobuoyを試す環境
❯❯❯ kubectl get no
NAME STATUS ROLES AGE VERSION
hkm01 Ready control-plane,master 357d v1.23.1
hkw01 Ready worker 357d v1.23.1
hkw02 Ready worker 357d v1.23.1
sonobuoyでテスト実施
--wait
フラグをつけることでsonobuoyの実行が完了または失敗するまでの待ち時間を設定できます。
指定した場合、デフォルトの待ち時間は1日となります。
$ sonobuoy run --wait
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy namespace= resource=namespaces
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy-serviceaccount namespace=sonobuoy resource=serviceaccounts
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterrolebindings
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterroles
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy-config-cm namespace=sonobuoy resource=configmaps
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy-plugins-cm namespace=sonobuoy resource=configmaps
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy namespace=sonobuoy resource=pods
time="2021-12-29T15:13:56Z" level=info msg="create request issued" name=sonobuoy-aggregator namespace=sonobuoy resource=services
15:14:16 PLUGIN NODE STATUS RESULT PROGRESS
15:14:16 systemd-logs hkm01 running
15:14:16 systemd-logs hkw01 running
15:14:16 systemd-logs hkw02 running
15:14:16 e2e global running
15:14:16
15:14:16 Sonobuoy is still running. Runs can take 60 minutes or more depending on cluster and plugin configuration.
...
15:16:16 systemd-logs hkm01 complete
15:16:16 systemd-logs hkw02 complete
15:17:16 systemd-logs hkw01 complete
...
15:21:36 e2e global failed
...
15:22:16 systemd-logs hkm01 complete passed
15:22:16 systemd-logs hkw01 complete passed
15:22:16 systemd-logs hkw02 complete passed
15:22:16 e2e global failed failed
15:22:16 Sonobuoy has completed. Use `sonobuoy retrieve` to get results.
e2eテストのステータスが失敗で終わっていますね。。
結果の確認
namespace内を見てみると、podとserviceが作成されていました。
❯❯❯ kubectl get all -n sonobuoy
NAME READY STATUS RESTARTS AGE
pod/sonobuoy 1/1 Running 0 24m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sonobuoy-aggregator ClusterIP 10.106.51.63 <none> 8080/TCP 24m
テスト結果を確認します。
sonobuoy results
コマンドを使用すると、最初にtarballからファイルを抽出しなくても、結果を確認できます。詳細については以下ページを参照してください。
$ sonobuoy retrieve
202112291514_sonobuoy_03a65fc1-53a0-47ce-b839-fdac96e38587.tar.gz
$sonobuoy results 202112291514_sonobuoy_03a65fc1-53a0-47ce-b839-fdac96e38587.tar.gz
Plugin: systemd-logs
Status: passed
Total: 3
Passed: 3
Failed: 0
Skipped: 0
Plugin: e2e
Status: failed
Total: 1
Passed: 0
Failed: 1
Skipped: 0
Failed tests:
Container e2e is in a terminated state (exit code 127) due to reason: Error:
「exit code 127」となり、テストが失敗していることがわかりました。もっと詳細を確認してみます。
❯❯❯ kubectl -n sonobuoy logs sonobuoy
time="2021-12-29T15:14:10Z" level=info msg="Scanning plugins in ./plugins.d (pwd: /)"
time="2021-12-29T15:14:10Z" level=info msg="Scanning plugins in /etc/sonobuoy/plugins.d (pwd: /)"
time="2021-12-29T15:14:10Z" level=info msg="Directory (/etc/sonobuoy/plugins.d) does not exist"
time="2021-12-29T15:14:10Z" level=info msg="Scanning plugins in ~/sonobuoy/plugins.d (pwd: /)"
time="2021-12-29T15:14:10Z" level=info msg="Directory (~/sonobuoy/plugins.d) does not exist"
time="2021-12-29T15:14:10Z" level=info msg="Filtering namespaces based on the following regex:.*"
time="2021-12-29T15:14:10Z" level=info msg="Namespace cassandra Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace default Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace dev Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace ingress-system Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace kube-node-lease Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace kube-public Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace kube-system Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace metallb-system Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace monitoring Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace prd Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace sonobuoy Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Namespace stg Matched=true"
time="2021-12-29T15:14:10Z" level=info msg="Starting server Expected Results: [{hkm01 systemd-logs} {hkw01 systemd-logs} {hkw02 systemd-logs} {global e2e}]"
time="2021-12-29T15:14:10Z" level=info msg="Starting annotation update routine"
time="2021-12-29T15:14:10Z" level=info msg="Starting aggregation server" address=0.0.0.0 port=8080
time="2021-12-29T15:14:10Z" level=info msg="Running plugin" plugin=systemd-logs
time="2021-12-29T15:14:10Z" level=info msg="Running plugin" plugin=e2e
time="2021-12-29T15:15:48Z" level=info msg="received request" client_cert="[systemd-logs]" method=PUT node=hkm01 plugin_name=systemd-logs url=/api/v1/results/by-node/hkm01/systemd-logs
time="2021-12-29T15:16:09Z" level=info msg="received request" client_cert="[systemd-logs]" method=PUT node=hkw02 plugin_name=systemd-logs url=/api/v1/results/by-node/hkw02/systemd-logs
time="2021-12-29T15:17:02Z" level=info msg="received request" client_cert="[systemd-logs]" method=PUT node=hkw01 plugin_name=systemd-logs url=/api/v1/results/by-node/hkw01/systemd-logs
time="2021-12-29T15:21:33Z" level=info msg="received internal aggregator result" node=global plugin_name=e2e
time="2021-12-29T15:21:33Z" level=info msg="Last update to annotations on exit"
time="2021-12-29T15:21:33Z" level=info msg="Shutting down aggregation server"
time="2021-12-29T15:21:33Z" level=info msg="Resources is not set explicitly implying query all resources, but skipping secrets for safety. Specify the value explicitly in Resources to gather this data."
time="2021-12-29T15:21:33Z" level=info msg="Collecting Node Configuration and Health..."
time="2021-12-29T15:21:33Z" level=info msg="Creating host results for hkm01 under /tmp/sonobuoy/03a65fc1-53a0-47ce-b839-fdac96e38587/hosts/hkm01\n"
time="2021-12-29T15:21:33Z" level=info msg="Creating host results for hkw01 under /tmp/sonobuoy/03a65fc1-53a0-47ce-b839-fdac96e38587/hosts/hkw01\n"
time="2021-12-29T15:21:33Z" level=info msg="Creating host results for hkw02 under /tmp/sonobuoy/03a65fc1-53a0-47ce-b839-fdac96e38587/hosts/hkw02\n"
time="2021-12-29T15:21:33Z" level=info msg="Running cluster queries"
W1229 15:21:33.617709 1 warnings.go:70] v1 ComponentStatus is deprecated in v1.19+
time="2021-12-29T15:21:35Z" level=info msg="Running ns query (cassandra)"
time="2021-12-29T15:21:35Z" level=info msg="Running ns query (default)"
time="2021-12-29T15:21:36Z" level=info msg="Running ns query (dev)"
time="2021-12-29T15:21:37Z" level=info msg="Running ns query (ingress-system)"
time="2021-12-29T15:21:38Z" level=info msg="Running ns query (kube-node-lease)"
time="2021-12-29T15:21:40Z" level=info msg="Running ns query (kube-public)"
time="2021-12-29T15:21:41Z" level=info msg="Running ns query (kube-system)"
time="2021-12-29T15:21:42Z" level=info msg="Running ns query (metallb-system)"
time="2021-12-29T15:21:44Z" level=info msg="Running ns query (monitoring)"
time="2021-12-29T15:21:45Z" level=info msg="Running ns query (prd)"
time="2021-12-29T15:21:46Z" level=info msg="Running ns query (sonobuoy)"
time="2021-12-29T15:21:48Z" level=info msg="Running ns query (stg)"
time="2021-12-29T15:21:49Z" level=info msg="Namespace cassandra Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace default Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace dev Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace ingress-system Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace kube-node-lease Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace kube-public Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace kube-system Matched=true"
time="2021-12-29T15:21:49Z" level=info msg="Namespace metallb-system Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace monitoring Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace prd Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Namespace sonobuoy Matched=true"
time="2021-12-29T15:21:49Z" level=info msg="Namespace stg Matched=false"
time="2021-12-29T15:21:49Z" level=info msg="Collecting Pod Logs by namespace (kube-system)"
time="2021-12-29T15:22:00Z" level=info msg="Collecting Pod Logs by namespace (sonobuoy)"
time="2021-12-29T15:22:00Z" level=info msg="Collecting Pod Logs by FieldSelectors []"
time="2021-12-29T15:22:00Z" level=info msg="Log lines after this point will not appear in the downloaded tarball."
time="2021-12-29T15:22:01Z" level=info msg="Results available at /tmp/sonobuoy/202112291514_sonobuoy_03a65fc1-53a0-47ce-b839-fdac96e38587.tar.gz"
time="2021-12-29T15:22:04Z" level=info msg="no-exit was specified, sonobuoy is now blocking"
logの確認では欲しい情報は得られませんでした。sonobuoy results
にオプションをつけて確認してみます。--mode
は出力形式を変更できます。有効なオプションとして、report
、detailed
、dump
を指定できます。デフォルトはreport
です。
$ sonobuoy results 202112291514_sonobuoy_03a65fc1-53a0-47ce-b839-fdac96e38587.tar.gz --plugin e2e --mode detailed -s | jq '.error, .pod.status'
"Container e2e is in a terminated state (exit code 127) due to reason: Error: "
{
"phase": "Running",
"conditions": [
{
"type": "Initialized",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2021-12-29T15:14:10Z"
},
{
"type": "Ready",
"status": "False",
"lastProbeTime": null,
"lastTransitionTime": "2021-12-29T15:14:10Z",
"reason": "ContainersNotReady",
"message": "containers with unready status: [e2e]"
},
{
"type": "ContainersReady",
"status": "False",
"lastProbeTime": null,
"lastTransitionTime": "2021-12-29T15:14:10Z",
"reason": "ContainersNotReady",
"message": "containers with unready status: [e2e]"
},
{
"type": "PodScheduled",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2021-12-29T15:14:10Z"
}
],
"hostIP": "192.168.13.103",
"podIP": "10.244.2.24",
"podIPs": [
{
"ip": "10.244.2.24"
}
],
"startTime": "2021-12-29T15:14:10Z",
"containerStatuses": [
{
"name": "e2e",
"state": {
"terminated": {
"exitCode": 127,
"reason": "Error",
"startedAt": "2021-12-29T15:16:28Z",
"finishedAt": "2021-12-29T15:16:28Z",
"containerID": "docker://44d56066a3fce59a374c77f6ee977a0f5078746165d29eecdf215fcb12efa6c2"
}
},
"lastState": {},
"ready": false,
"restartCount": 0,
"image": "k8s.gcr.io/conformance:v1.20.14",
"imageID": "docker-pullable://k8s.gcr.io/conformance@sha256:400c5376d4e515e40d3d434e9eed9214357333f9577c2134368f3a9e1cd3c9d8",
"containerID": "docker://44d56066a3fce59a374c77f6ee977a0f5078746165d29eecdf215fcb12efa6c2",
"started": false
},
{
"name": "sonobuoy-worker",
"state": {
"running": {
"startedAt": "2021-12-29T15:16:30Z"
}
},
"lastState": {},
"ready": true,
"restartCount": 0,
"image": "sonobuoy/sonobuoy:v0.55.1",
"imageID": "docker-pullable://sonobuoy/sonobuoy@sha256:9f0818cca26dd8e126bf6187b933f51557a6ac7de342e0fe6a789f55fc047eb9",
"containerID": "docker://d09706c34e011191a1c4675b8a80434578d74ce662be89bd51c9da2ca65319c5",
"started": true
}
],
"qosClass": "BestEffort"
}
詳細を確認してもわからなかったので一度sonobuoyを削除し、もう一度実行して起動中のpodのステータスを確認します。
$ sonobuoy delete --wait
INFO[0000] delete request issued kind=namespace namespace=sonobuoy
INFO[0000] delete request issued kind=clusterrolebindings
INFO[0000] delete request issued kind=clusterroles
Namespace "sonobuoy" has status {Phase:Terminating Conditions:[]}
Namespace "sonobuoy" has status {Phase:Terminating Conditions:[{Type:NamespaceDeletionDiscoveryFailure Status:False LastTransitionTime:2021-12-29 16:41:33 +0000 UTC Reason:ResourcesDiscovered Message:All resources successfully discovered} {Type:NamespaceDeletionGroupVersionParsingFailure Status:False LastTransitionTime:2021-12-29 16:41:33 +0000 UTC Reason:ParsedGroupVersions Message:All legacy kube types successfully parsed} {Type:NamespaceDeletionContentFailure Status:False LastTransitionTime:2021-12-29 16:41:33 +0000 UTC Reason:ContentDeleted Message:All content successfully deleted, may be waiting on finalization} {Type:NamespaceContentRemaining Status:True LastTransitionTime:2021-12-29 16:41:33 +0000 UTC Reason:SomeResourcesRemain Message:Some resources are remaining: pods. has 1 resource instances} {Type:NamespaceFinalizersRemaining Status:False LastTransitionTime:2021-12-29 16:41:33 +0000 UTC Reason:ContentHasNoFinalizers Message:All content-preserving finalizers finished}]}
Namespace "sonobuoy" has been deleted
Deleted all ClusterRoles and ClusterRoleBindings.
再度実行します。
$ sonobuoy run --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
# リソースの確認
❯❯❯ kubectl -n sonobuoy get all
NAME READY STATUS RESTARTS AGE
pod/sonobuoy 1/1 Running 0 34s
pod/sonobuoy-e2e-job-b81fa37e30b04850 1/2 Error 0 31s
pod/sonobuoy-systemd-logs-daemon-set-afebfddfa43f4f62-6jsc4 2/2 Running 0 31s
pod/sonobuoy-systemd-logs-daemon-set-afebfddfa43f4f62-8cwrp 2/2 Running 0 31s
pod/sonobuoy-systemd-logs-daemon-set-afebfddfa43f4f62-prpxz 2/2 Running 0 31s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sonobuoy-aggregator ClusterIP 10.98.138.113 <none> 8080/TCP 34s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/sonobuoy-systemd-logs-daemon-set-afebfddfa43f4f62 3 3 3 3 3 kubernetes.io/os=linux 31s
sonobuoy-e2e-job
のところでエラーになっているのでlogを確認します。
❯❯❯ kubectl -n sonobuoy logs sonobuoy-e2e-job-b81fa37e30b04850
error: a container name must be specified for pod sonobuoy-e2e-job-b81fa37e30b04850, choose one of: [e2e sonobuoy-worker]
❯❯❯ kubectl -n sonobuoy logs ls-b81fa37e30b04850 -c e2e
+ /gorunner
/run_e2e.sh: line 43: /gorunner: No such file or directory
+ ret=127
+ exit 127
run_e2e.sh
で呼び出しているgorunner
がうまく実行できていないようです。
今回使用しているラズパイクラスタはエミュレータ使ってx86_64のイメージを動作できるようにしているのですが、そこらへんの影響でうまくいっていない気がします。(あまり細かいことは知識が足らずわかりませんでした。)
$ docker run -it k8s.gcr.io/conformance:v1.20.14 /bin/bash
root@d730a2ab27ce:/usr/local/bin# ls /
bin dev gorunner kubernetes lib64 mnt proc run sbin sys usr
boot etc home lib media opt root run_e2e.sh srv tmp var
root@d730a2ab27ce:/usr/local/bin# /gorunner
bash: /gorunner: No such file or directory
root@d730a2ab27ce:/usr/local/bin# file /gorunner
/gorunner: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, stripped
root@d730a2ab27ce:/usr/local/bin# uname -a
Linux d730a2ab27ce 5.4.0-1045-raspi #49-Ubuntu SMP PREEMPT Wed Sep 29 17:49:16 UTC 2021 x86_64 GNU/Linux
いろいろと確認してみましたが、やはりコンテナがx86_64で動作しているのにARMのgorunner
を実行しようとしていることが問題なのでしょうか。
ちなみにsonobuoyのamdバイナリを取得して再度試してみましたが、上記と同じ結果でうまくいきませんでした。
ラズパイクラスタのE2Eテストは今回は一旦諦めます。また進展があったら追記したいと思います。
AKSでの確認
ラズパイクラスタでうまくいかなかったのですが、どのような結果が得れるのかを知りたかったのでAKSでも確認してみました。
手順はラズパイクラスの時と同じなので結果だけ記載します。
❯❯❯ sonobuoy run --wait
INFO[0001] create request issued name=sonobuoy namespace= resource=namespaces
INFO[0001] create request issued name=sonobuoy-serviceaccount namespace=sonobuoy resource=serviceaccounts
INFO[0001] create request issued name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterrolebindings
INFO[0001] create request issued name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterroles
INFO[0001] create request issued name=sonobuoy-config-cm namespace=sonobuoy resource=configmaps
INFO[0001] create request issued name=sonobuoy-plugins-cm namespace=sonobuoy resource=configmaps
INFO[0001] create request issued name=sonobuoy namespace=sonobuoy resource=pods
INFO[0001] create request issued name=sonobuoy-aggregator namespace=sonobuoy resource=services
20:19:15 PLUGIN NODE STATUS RESULT PROGRESS
20:19:15 systemd-logs aks-agentpool-89104932-vmss000000 complete
20:19:15 systemd-logs aks-agentpool-89104932-vmss000001 complete
20:19:15 e2e global running 4/337 (0 failures)
20:19:15
20:19:15 Sonobuoy is still running. Runs can take 60 minutes or more depending on cluster and plugin configuration.
20:19:35 e2e global running 11/337 (0 failures)
20:19:55 e2e global running 18/337 (0 failures)
20:20:35 e2e global running 21/337 (0 failures)
20:21:35 e2e global running 24/337 (0 failures)
...
...
21:48:35 e2e global running 312/337 (0 failures)
21:48:55 e2e global running 316/337 (0 failures)
21:49:15 e2e global running 319/337 (0 failures)
21:49:35 e2e global running 321/337 (0 failures)
21:49:55 e2e global running 331/337 (0 failures)
21:50:15 e2e global running 333/337 (0 failures)
...
21:50:55 systemd-logs aks-agentpool-89104932-vmss000000 complete passed
21:50:55 systemd-logs aks-agentpool-89104932-vmss000001 complete passed
21:50:55 e2e global complete passed 337/337 (0 failures)
21:50:55 Sonobuoy has completed. Use `sonobuoy retrieve` to get results.
完了するまでに1時間半ぐらいかかりました。結構長いですね。
どんなテストが実行されているかはテスト名からある程度推測できそうです。
実際のテスト内容についてですが、Goで書かれており以下から実装の詳細を確認できます。
❯❯❯ sonobuoy results 202201021118_sonobuoy_95d74bff-b3fb-484c-b5a6-4539b10a4a2e.tar.gz --plugin e2e --mode detailed | jq 'select(.status!="skipped").name' | head
"[sig-storage] Projected configMap updates should be reflected in volume [NodeConformance] [Conformance]"
"[sig-node] InitContainer [NodeConformance] should invoke init containers on a RestartNever pod [Conformance]"
"[sig-cli] Kubectl client Kubectl patch should add annotations for pods in rc [Conformance]"
"[sig-api-machinery] AdmissionWebhook [Privileged:ClusterAdmin] patching/updating a mutating webhook should work [Conformance]"
ちなみにデフォルトでは337項目のテストが実行されるようですが、全て合わせると5770項目もあるようです。CNCFの認定プログラムであるCertified Kubernetesに認定されるには全ての項目に合格する必要があるのでしょうか。大変ですね。。
❯❯❯ sonobuoy results 202201021118_sonobuoy_95d74bff-b3fb-484c-b5a6-4539b10a4a2e.tar.gz --plugin e2e --mode detailed | jq 'select(.status!="skipped").name' | wc -l
337
[~/w/k/sonobuoy] (01:05:35)
❯❯❯ sonobuoy results 202201021118_sonobuoy_95d74bff-b3fb-484c-b5a6-4539b10a4a2e.tar.gz --plugin e2e --mode detailed | jq .name | wc -l
5770
クイックモードで実行することも可能なようです。これはクラスターを作成したばかりで、ポッドを期待通りに実行できることを確認したい場合などに使用するようです。
❯❯❯ sonobuoy run --mode=quick
INFO[0001] create request issued name=sonobuoy namespace= resource=namespaces
INFO[0001] create request issued name=sonobuoy-serviceaccount namespace=sonobuoy resource=serviceaccounts
INFO[0001] create request issued name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterrolebindings
INFO[0001] create request issued name=sonobuoy-serviceaccount-sonobuoy namespace= resource=clusterroles
INFO[0001] create request issued name=sonobuoy-config-cm namespace=sonobuoy resource=configmaps
INFO[0001] create request issued name=sonobuoy-plugins-cm namespace=sonobuoy resource=configmaps
INFO[0001] create request issued name=sonobuoy namespace=sonobuoy resource=pods
INFO[0001] create request issued name=sonobuoy-aggregator namespace=sonobuoy resource=services
[~/W/k/sonobuoy] (01:13:44)
❯❯❯ sonobuoy status
PLUGIN STATUS RESULT COUNT PROGRESS
e2e running 1
systemd-logs running 2
Sonobuoy is still running. Runs can take 60 minutes or more depending on cluster and plugin configuration.
[~/W/k/sonobuoy] (01:13:52)
❯❯❯ sonobuoy results 202201020847_sonobuoy_c82b5cd4-52f5-4401-b3f2-90ec613d4483.tar.gz --plugin e2e --mode detailed | jq ' 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 run
のオプション
今回使用したオプションのみ記載
Flag | description |
---|---|
--context | kubeconfigのコンテキストを指定 |
--kube-conformance-image | E2Eプラグインのコンテナimageを上書きする |
--kubeconfig | kubeconfigファイルへのパスを指定 |
--kubernetes-version | kubernetesのバージョンを指定(デフォルトはautoでE2Eイメージのバージョンを使用) |
--mode | E2Eプラグインを動作させるモードを指定 |
--namespace | Sonobuoyを実行するためのnamespaceを指定 |
--wait | sonobuoyの実行が完了または失敗するまでのCLIが待つ時間を指定。デフォルトは1日。 |
まとめ
当初予定していたラズパイクラスタでsonobuoyのE2Eテストを試すことはできませんでしたが、なんとなくsonobuoyの使い方を理解できたのでよしとします。
時間があればどのようなテストを実行しているのかなども見てみようと思っています。
参考
Discussion