我按照Running Kubernetes locally via Docker的指导,无法让master正常启动。
第一步:运行 etcd
docker run --net=host -d gcr.io/google_containers/etcd:2.0.9 /usr/local/bin/etcd --addr=127.0.0.1:4001 --bind-addr=0.0.0.0:4001 --data-dir=/var/etcd/data
etcd 容器似乎正常启动。 docker logs 看不到任何错误,我最终得到一个 etcd 进程在 4001 上监听。
第二步:运行master
docker run --net=host -d -v /var/run/docker.sock:/var/run/docker.sock gcr.io/google_containers/hyperkube:v0.21.2 /hyperkube kubelet --api_servers=http://localhost:8080 --v=2 --address=0.0.0.0 --enable_server --hostname_override=127.0.0.1 --config=/etc/kubernetes/manifests
我相信这就是我的问题开始的地方。以下是docker logs 的输出:
W1021 13:23:04.093281 1 server.go:259] 无法将 oom_score_adj 设置为 -900:写入 /proc/self/oom_score_adj:权限被拒绝
W1021 13:23:04.093426 1 server.go:462] 无法加载 kubeconfig 文件 /var/lib/kubelet/kubeconfig:stat /var/lib/kubelet/kubeconfig:没有这样的文件或目录。改为尝试身份验证路径。
W1021 13:23:04.093445 1 server.go:424] 无法加载 kubernetes 身份验证路径 /var/lib/kubelet/kubernetes_auth:stat /var/lib/kubelet/kubernetes_auth:没有这样的文件或目录。继续使用默认值。
I1021 13:23:04.093503 1 server.go:271] 使用根目录:/var/lib/kubelet
I1021 13:23:04.093519 1 plugins.go:69] 未指定云提供商。
I1021 13:23:04.093526 1 server.go:290] 成功初始化云提供商:“”来自配置文件:“”
I1021 13:23:05.126191 1 docker.go:289] 在 unix:///var/run/docker.sock 上连接到 docker
I1021 13:23:05.126396 1 server.go:651] 添加清单文件:/etc/kubernetes/manifests
I1021 13:23:05.126409 1 file.go:47] 观看路径“/etc/kubernetes/manifests”
I1021 13:23:05.126416 1 server.go:661] 观看 apiserver
E1021 13:23:05.127148 1 reflector.go:136] 无法列出 *api.Pod:获取 http://localhost:8080/api/v1/pods?fieldSelector=spec.nodeName%3D127.0.0.1:拨打 tcp 127.0.0.1:8080:连接被拒绝
E1021 13:23:05.127295 1 reflector.go:136] 无法列出 *api.Service:获取 http://localhost:8080/api/v1/services:拨打 tcp 127.0.0.1:8080:连接被拒绝
E1021 13:23:05.127336 1 reflector.go:136] 无法列出 *api.Node: 获取 http://localhost:8080/api/v1/nodes?fieldSelector=metadata.name%3D127.0.0.1: dial tcp 127.0.0.1:8080:连接被拒绝
I1021 13:23:05.343848 1 plugins.go:56] 注册凭据提供程序:.dockercfg
W1021 13:23:05.394268 1 container_manager_linux.go:96] 容器 /docker-daemon 的内存限制 0 太小,将其重置为 157286400
I1021 13:23:05.394284 1 container_manager_linux.go:100] 使用内存限制配置仅资源容器 /docker-daemon:157286400
I1021 13:23:05.395019 1 plugins.go:180] 加载卷插件“kubernetes.io/aws-ebs”
I1021 13:23:05.395040 1 plugins.go:180] 加载卷插件“kubernetes.io/empty-dir”
I1021 13:23:05.395052 1 plugins.go:180] 加载的卷插件“空”
I1021 13:23:05.395068 1 plugins.go:180] 加载卷插件“kubernetes.io/gce-pd”
I1021 13:23:05.395080 1 plugins.go:180] 加载卷插件“gce-pd”
I1021 13:23:05.395098 1 plugins.go:180] 加载卷插件“kubernetes.io/git-repo”
I1021 13:23:05.395112 1 plugins.go:180] 加载卷插件“git”
I1021 13:23:05.395124 1 plugins.go:180] 加载卷插件“kubernetes.io/host-path”
I1021 13:23:05.395136 1 plugins.go:180] 加载卷插件“kubernetes.io/nfs”
I1021 13:23:05.395147 1 plugins.go:180] 加载卷插件“kubernetes.io/secret”
I1021 13:23:05.395156 1 plugins.go:180] 加载卷插件“kubernetes.io/iscsi”
I1021 13:23:05.395166 1 plugins.go:180] 加载卷插件“kubernetes.io/glusterfs”
I1021 13:23:05.395178 1 plugins.go:180] 加载卷插件“kubernetes.io/persistent-claim”
I1021 13:23:05.395194 1 plugins.go:180] 加载卷插件“kubernetes.io/rbd”
I1021 13:23:05.395274 1 server.go:623] 启动 kubelet
I1021 13:23:05.395296 1 server.go:63] 开始监听 0.0.0.0:10250
I1021 13:23:05.395507 1 server.go:82] 开始在 0.0.0.0:10255 上以只读方式侦听
第三步:运行服务代理
docker run -d --net=host --privileged gcr.io/google_containers/hyperkube:v0.21.2 /hyperkube proxy --master=http://127.0.0.1:8080 --v=2
此步骤的 docker 日志包含与我在第二步中看到的类似的错误。
I1021 13:32:03.177004 1 server.go:88] 在仅资源容器“/kube-proxy”中运行
I1021 13:32:03.177432 1 proxier.go:121] 将代理 IP 设置为 192.168.19.200 并初始化 iptables
E1021 13:32:03.195731 1 api.go:108] 无法加载服务:获取 http://127.0.0.1:8080/api/v1/services:拨打 tcp 127.0.0.1:8080:连接被拒绝
E1021 13:32:03.195924 1 api.go:180] 无法加载端点:获取 http://127.0.0.1:8080/api/v1/endpoints:拨打 tcp 127.0.0.1:8080:连接被拒绝
docker ps 输出:
容器 ID 图像命令创建状态端口名称
576d15c22537 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube proxy --m" 大约一小时前 Up 大约一小时 high_pasteur
a98637c9d523 gcr.io/google_containers/hyperkube:v0.21.2 "/hyperkube kubelet -" 大约 1 小时前 Up 34 minutesdrink_jones
618afb1de613 gcr.io/google_containers/etcd:2.0.9 "/usr/local/bin/etcd " 2 小时前 2 小时前 high_yonath
第二步日志中的第一个错误让我相信该错误可能与 iptables 有关。
iptables -L 输出:
链输入(策略接受)
目标 prot opt 源目标
Chain FORWARD(政策接受)
目标 prot opt 源目标
DOCKER all -- 任何地方的任何地方
接受所有——任何地方任何地方 ctstate RELATED,ESTABLISHED
接受所有——任何地方的任何地方
接受所有——任何地方的任何地方
链输出(策略接受)
目标 prot opt 源目标
链 DOCKER (1 参考)
目标 prot opt 源目标
docker exec -ti a98637c9d523 cat /etc/kubernetes/manifests/master.json 输出:
{
"apiVersion": "v1",
“种类”:“豆荚”,
“元数据”:{“名称”:“k8s-master”},
“规格”:{
“hostNetwork”:是的,
“容器”:[
{
“名称”:“控制器经理”,
“图片”:“gcr.io/google_containers/hyperkube:v1.0.6”,
“命令”: [
"/hyperkube",
“控制器经理”,
"--master=127.0.0.1:8080",
“--v=2”
]
},
{
"名称": "apiserver",
“图片”:“gcr.io/google_containers/hyperkube:v1.0.6”,
“命令”: [
"/hyperkube",
"apiserver",
"--portal-net=10.0.0.1/24",
"--地址=127.0.0.1",
"--etcd-servers=http://127.0.0.1:4001",
"--cluster-name=kubernetes",
“--v=2”
]
},
{
“名称”:“调度程序”,
“图片”:“gcr.io/google_containers/hyperkube:v1.0.6”,
“命令”: [
"/hyperkube",
“调度器”,
"--master=127.0.0.1:8080",
“--v=2”
]
}
]
}
}
Docker 版本 1.8.3
内核版本 4.2.3
任何见解将不胜感激。