给kubernetes社区贡献代码时,经常需要写e2e测试,本地测试通过后再提PR效率更高,也专业一点。
前提条件
- 本地完成kubernetes代码编译(可以参看文末refs)
- 8GB以上内存
本地搭建kubernetes开发测试环境
社区推荐minikube和kind,个人觉得kind目前最适合kubernetes开发测试,很方便在自己的开发机快速创建kubernetes集群。
- 安装kind
brew install kind
- 填写kind配置文件, kind使用kubeadm创建k8s集群,如果有定制化参数可以按照kubeadmConfig。
cat kubernetes-v1.29.2.yaml
# this config file contains all config fields with comments
# NOTE: this is not a particularly useful config file
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
## patch the generated kubeadm config with some extra settings
#kubeadmConfigPatches:
#- |
# apiVersion: kubelet.config.k8s.io/v1beta1
# kind: KubeletConfiguration
# evictionHard:dd
# nodefs.available: "0%"
## patch it further using a JSON 6902 patch
#kubeadmConfigPatchesJSON6902:
#- group: kubeadm.k8s.io
# version: v1beta3
# kind: ClusterConfiguration
# patch: |
# - op: add
# path: /apiServer/certSANs/-
# value: my-hostname
# 1 control plane node and 3 workers
networking:
ipFamily: ipv4
nodes:
# the control plane node config
- role: control-plane
image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
# the three workers
- role: worker
image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
- role: worker
image: kindest/node:v1.29.2@sha256:51a1434a5397193442f0be2a297b488b6c919ce8a3931be0ce822606ea5ca245
可以通过nodes配置控制节点、woker节点副本数量,以及使用的镜像。可用的镜像从releases-node 查找
- 创建集群
kind create cluster --config kubernetes-v1.29.2.yaml --name kubernetes-v1.29.2
- 查看集群
$ kind get clusters
$ kubernetes-customize-v1.29
kubernetes-v1.29.2 # 刚才创建的集群
- 集群切换
# 切换到 kubernetes-v1.29.2
kind get clusters # 查看所有集群
kind export kubeconfig --name kubernetes-v1.29.2 # 导出 kubernetes-v1.29.2 的 kubeconfig
kubectl cluster-info # 查看 kubernetes-v1.29.2 的集群信息
# 切换到 kubernetes-customize-v1.29
kind export kubeconfig --name kubernetes-customize-v1.29 # 导出 kubernetes-customize-v1.29 的 kubeconfig
kubectl cluster-info # 查看 kubernetes-customize-v1.29 的集群信息
使用kind运行自己编译过的kubernetes集群
- 使用kind构建kubernetes镜像
修复一个bug后,使用kind构建自定义镜像,搭建测试集群
$ kind build node-image --image="kindest/node-custom-customize:v1.29" /Users/zhangzhifei/work/go/src/github.com/kubernetes
- 修改镜像配置,然后通过kind创建即可
% cat kubernetes-customize-v1.29.yaml
# this config file contains all config fields with comments
# NOTE: this is not a particularly useful config file
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
## patch the generated kubeadm config with some extra settings
#kubeadmConfigPatches:
#- |
# apiVersion: kubelet.config.k8s.io/v1beta1
# kind: KubeletConfiguration
# evictionHard:dd
# nodefs.available: "0%"
## patch it further using a JSON 6902 patch
#kubeadmConfigPatchesJSON6902:
#- group: kubeadm.k8s.io
# version: v1beta3
# kind: ClusterConfiguration
# patch: |
# - op: add
# path: /apiServer/certSANs/-
# value: my-hostname
# 1 control plane node and 3 workers
networking:
ipFamily: ipv4
nodes:
# the control plane node config
- role: control-plane
image: kindest/node-custom-customize:v1.29
# the three workers
- role: worker
image: kindest/node-custom-customize:v1.29
- 创建集群
% kind create cluster --config kubernetes-customize-v1.29.yaml --name kubernetes-customize-v1.29
% kind get clusters
kubernetes-customize-v1.29
kubernetes-v1.29.2 # 刚才创建的集群
详细配置请看官网:https://kind.sigs.k8s.io/docs/user/quick-start/#installation
Kubernetes End-to-End (e2e) 测试
- 编译e2e.test
make WHAT="test/e2e/e2e.test"
- 运行e2e测试用例
~/work/go/src/github.com/kubernetes/_output/bin/e2e.test -context kind-kubernetes-customize-v1.29-fore2e -ginkgo.focus="\[sig-network\].*Conformance" -num-nodes 2
-
返回如下,说明流程跑通
image.png
refs:
- https://github.com/kubernetes-sigs/kind/issues/1181
- https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/conformance-tests.md#running-conformance-tests
- https://medium.com/programming-kubernetes/testing-kubernetes-controllers-with-the-e2e-framework-fac232843dc6
- https://github.com/kubernetes/community/blob/master/contributors/devel/development.md#building-kubernetes-on-a-local-osshell-environment
- https://kind.sigs.k8s.io/docs/user/quick-start/
网友评论