K8S conformance test问题记录

K8S conformance test步骤与提交可以参考这里, 本文主要记录相关问题

私有云环境测试镜像准备

在隔离的私有云环境跑测试,需要将K8S conformance test需要的镜像提前准备好并存储到私有镜像仓库中

1. 获取所有测试镜像
sonobuoy images --kubernetes-version v1.19.3 > images   #我这里是v1.19.3版本k8s,可以替换

2. 在非离线环境中下载镜像包
for i in `cat images`; do docker pull $i ;done
docker save `cat image | tr "\n" " "` -o images.tar

3. 在离线环境加载镜像包
docker load -i images.tar

4. 生成e2e repo配置,并将所有配置都替换为私有镜像仓库地址
sonobuoy gen default-image-config > repo.yaml

5. push镜像
sonobuoy images push --e2e-repo-config repo.yaml

使用私有镜像仓库测试

开始测试
registry_url=xx
sonobuoy run --mode=certified-conformance --sonobuoy-image $registry_url/sonobuoy:v0.20.0 --kube-conformance-image $registry_url/conformance:v1.19.3 --systemd-logs-image $registry_url/systemd-logs:v0.3 --e2e-repo-config repo.yaml

sonobuoy status --json | jq 可以查看状态

失败用例排查

对于失败的用例只能查看e2e日志结合起来分析问题

检出结果
outfile=$(sonobuoy retrieve) && mkdir ./results; tar xzf $outfile -C ./results
查看失败用例
sonobuoy e2e 202012250222_sonobuoy_427ee6d7-ab87-4e85-ba71-1d0754828c92.tar.gz

根据失败用例查看日志分析results/plugins/e2e/results/global/e2e.log

小技巧: 可以跑单个用例查看结果验证,例如下面单独测试"KubeletManagedEtcHosts should test kubelet managed /etc/hosts file"

sonobuoy run  --e2e-focus="KubeletManagedEtcHosts should test kubelet managed /etc/hosts file" --sonobuoy-image $registry_url/sonobuoy:v0.20.0 --kube-conformance-image $registry_url/conformance:v1.19.3 --systemd-logs-image $registry_url/systemd-logs:v0.3 --e2e-repo-config repo.yaml

这次测试有3个test case失败如下

    "failures": [
      "[sig-network] Networking Granular Checks: Pods should function for node-pod communication: udp [LinuxOnly] [NodeConformance] [Conformance]",
      "[sig-network] Networking Granular Checks: Pods should function for node-pod communication: http [LinuxOnly] [NodeConformance] [Conformance]",
      "[k8s.io] KubeletManagedEtcHosts should test kubelet managed /etc/hosts file [LinuxOnly] [NodeConformance] [Conformance]"
    ]

分析日志与失败代码test/e2e/framework/exec_util.go 可以看到是apiserver 403拒绝

最后通过修改apiserver参数 –enable-admission-plugins 去掉 DenyEscalatingExec 解决,具体参数说明看这里

单独跑这3个测试通过后可以全部测试一遍,后面就可以提交了