Ubuntu服务器构建Kubernetes失败,求源码构建调试运行方案
从源码构建、调试并运行Kubernetes的完整解决方案
一、解决当前遇到的错误
1. 处理go mod提示错误
无需手动执行go mod vendor,K8s项目的构建脚本已集成依赖管理逻辑,直接通过指定GOFLAGS参数跳过vendor目录检查即可:
sudo GOFLAGS="-mod=readonly" ./hack/local-up-cluster.sh
若不想每次都加参数,可先设置环境变量:
export GOFLAGS="-mod=readonly" sudo -E ./hack/local-up-cluster.sh
2. 解决No such file or directory错误
go mod vendor会过滤部分示例目录,而K8s构建脚本依赖这些目录。解决步骤:
- 清理错误生成的vendor目录:
rm -rf vendor
- 使用K8s官方提供的脚本同步依赖,确保所有必要目录完整:
./hack/update-vendor.sh
二、完整源码构建与集群启动流程
1. 前置准备
- 安装匹配版本的Go(K8s 1.29+要求Go 1.21+,需对应源码版本选择)
- 安装依赖工具:
make、gcc、git、etcd(如Ubuntu可用apt install make gcc git etcd) - 克隆源码到指定目录:
git clone https://github.com/kubernetes/kubernetes.git $GOPATH/src/k8s.io/kubernetes cd $GOPATH/src/k8s.io/kubernetes
2. 构建启动本地集群
- 同步依赖(首次运行或依赖变更时执行):
./hack/update-vendor.sh
- 启动集群:
export GOFLAGS="-mod=readonly" sudo -E ./hack/local-up-cluster.sh
集群启动完成后,脚本会输出kubeconfig配置命令,执行该命令即可用kubectl访问集群:
export KUBECONFIG=/var/run/kubernetes/admin.kubeconfig
3. 验证集群状态
kubectl get nodes kubectl run test-nginx --image=nginx kubectl get pods
三、源码调试方法
1. 调试单个组件(如kube-apiserver)
停止已运行的组件后,用delve启动调试:
dlv debug ./cmd/kube-apiserver -- --kubeconfig=/var/run/kubernetes/admin.kubeconfig
在delve控制台设置断点并运行:
b pkg/apiserver/apiserver.go:123 # 替换为实际要调试的代码行 continue
2. 调试整个集群
修改hack/local-up-cluster.sh脚本中组件的启动命令,添加delve调试参数。例如修改kube-apiserver的启动行:
dlv exec ./kube-apiserver --listen=:2345 --headless=true --api-version=2 -- --kubeconfig=${KUBE_CONFIG_PATH} <其他原有参数>
重新启动集群后,用GoLand或VS Code等IDE连接到localhost:2345进行远程调试。
内容的提问来源于stack exchange,提问作者Chris G.
相关产品推荐
相关产品推荐

