You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:18:26