开发指南

配置开发环境

以 Ubuntu 为例,配置一个 Kubernetes 的开发环境
1
apt-get install -y gcc make socat git build-essential
2
3
# 安装 Docker
4
sh -c 'echo"deb https://apt.dockerproject.org/repo ubuntu-$(lsb_release -cs) main"> /etc/apt/sources.list.d/docker.list'
5
curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
6
apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
7
apt-get update
8
apt-get -y install "docker-engine=1.13.1-0~ubuntu-$(lsb_release -cs)"
9
10
# 安装 etcd
11
ETCD_VER=v3.2.18
12
DOWNLOAD_URL="https://github.com/coreos/etcd/releases/download"
13
curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
14
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
15
sudo /bin/cp -f etcd-${ETCD_VER}-linux-amd64/{etcd,etcdctl} /usr/bin
16
rm -rf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz etcd-${ETCD_VER}-linux-amd64
17
18
# 安装 Go
19
curl -sL https://storage.googleapis.com/golang/go1.10.2.linux-amd64.tar.gz | tar -C /usr/local -zxf -
20
export GOPATH=/gopath
21
export PATH=$PATH:$GOPATH/bin:/usr/local/bin:/usr/local/go/bin/
22
23
# 下载 Kubernetes 代码
24
mkdir -p $GOPATH/src/k8s.io
25
git clone https://github.com/kubernetes/kubernetes $GOPATH/src/k8s.io/kubernetes
26
cd $GOPATH/src/k8s.io/kubernetes
27
28
# 启动一个本地集群
29
export KUBERNETES_PROVIDER=local
30
hack/local-up-cluster.sh
Copied!
打开另外一个终端,配置 kubectl 之后就可以开始使用了:
1
cd $GOPATH/src/k8s.io/kubernetes
2
export KUBECONFIG=/var/run/kubernetes/admin.kubeconfig
3
cluster/kubectl.sh
Copied!

单元测试

单元测试是 Kubernetes 开发中不可缺少的,一般在代码修改的同时还要更新或添加对应的单元测试。这些单元测试大都支持在不同的系统上直接运行,比如 OSX、Linux 等。
比如,加入修改了 pkg/kubelet/kuberuntime 的代码后,
1
# 可以加上 Go package 的全路径来测试
2
go test -v k8s.io/kubernetes/pkg/kubelet/kuberuntime
3
# 也可以用相对目录
4
go test -v ./pkg/kubelet/kuberuntime
Copied!

端到端测试

端到端(e2e)测试需要启动一个 Kubernetes 集群,仅支持在 Linux 系统上运行。
本地运行方法示例:
1
make WHAT='test/e2e/e2e.test'
2
make ginkgo
3
4
export KUBERNETES_PROVIDER=local
5
go run hack/e2e.go -v -test --test_args='--ginkgo.focus=Port\sforwarding'
6
go run hack/e2e.go -v -test --test_args='--ginkgo.focus=Feature:SecurityContext'
Copied!
注:Kubernetes 的每个 PR 都会自动运行一系列的 e2e 测试。

Node e2e 测试

Node e2e 测试需要启动 Kubelet,目前仅支持在 Linux 系统上运行。
1
export KUBERNETES_PROVIDER=local
2
make test-e2e-node FOCUS="InitContainer"
Copied!
注:Kubernetes 的每个 PR 都会自动运行 node e2e 测试。

有用的 git 命令

很多时候,我们需要把 Pull Request 拉取到本地来测试,比如拉取 Pull Request #365 的方法为
1
git fetch upstream pull/365/merge:branch-fix-1
2
git checkout branch-fix-1
Copied!
当然,也可以配置 .git/config 并运行 git fetch 拉取所有的 Pull Requests(注意 Kubernetes 的 Pull Requests 非常多,这个过程可能会很慢):
1
fetch = +refs/pull/*:refs/remotes/origin/pull/*
Copied!

其他参考

最近更新 2yr ago