【问题标题】:Master not starting when running Kubernetes locally via Docker通过 Docker 在本地运行 Kubernetes 时 Master 未启动
【发布时间】:2016-01-20 15:07:09
【问题描述】:

我按照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

任何见解将不胜感激。

【问题讨论】:

  • 您能否尝试按照前面的文档(使用更新版本的 kubernetes)并查看是否仍然看到相同的错误? github.com/kubernetes/kubernetes/blob/master/docs/…
  • 我还打开了github.com/kubernetes/kubernetes/issues/16087 来更新文档。
  • 我再次尝试使用前面的文档,结果几乎相同。 “无法将 oom_score_adj 设置为 -900”警告现已消失,但我相信这是 GRUB_CMDLINE_LINUX 版本的文档建议设置的结果。
  • 您的输出让我感到困惑的是,当您显示docker ps 输出时,您看不到任何应该从与 hyperkube 捆绑的清单文件中启动的 pod。您可以将 docker exec 放入 kubelet 容器(原始输出中的 a98637c9d523)和 cat /etc/kubernetes/manifests 以查看它是否包含 pod 定义?
  • 罗伯特,我已将 /etc/kubernetes/manifests/master.json 的输出添加到问题中。 master.json 是该文件夹中唯一的文件。

标签: kubernetes


【解决方案1】:

可以先将 docker 版本降级到 1.7.2 吗?我用 docker 1.7.2 完成了你在上面所做的一切,一切正常。

$ curl 127.0.0.1:8080/

{
  "paths": [
    "/api",
    "/api/v1",
    "/api/v1beta3",
    "/healthz",
    "/healthz/ping",
    "/logs/",
    "/metrics",
    "/resetMetrics",
    "/swagger-ui/",
    "/swaggerapi/",
    "/ui/",
    "/version"
  ]
}

$ docker ps

CONTAINER ID        IMAGE                                        COMMAND                CREATED             STATUS              PORTS               NAMES
0141e596414c        gcr.io/google_containers/hyperkube:v0.21.2   "/hyperkube proxy --   15 minutes ago      Up 15 minutes                           nostalgic_nobel                                                                                          
10634ce798e9        gcr.io/google_containers/hyperkube:v0.21.2   "/hyperkube schedule   16 minutes ago      Up 16 minutes                           k8s_scheduler.b725e775_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_43562383            
5618a39eb11d        gcr.io/google_containers/hyperkube:v0.21.2   "/hyperkube apiserve   16 minutes ago      Up 16 minutes                           k8s_apiserver.70750283_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_e5d145be            
25f336102b26        gcr.io/google_containers/hyperkube:v0.21.2   "/hyperkube controll   16 minutes ago      Up 16 minutes                           k8s_controller-manager.aad1ee8f_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_fe538b9b   
7f1391840920        gcr.io/google_containers/pause:0.8.0         "/pause"               17 minutes ago      Up 17 minutes                           k8s_POD.e4cc795_k8s-master-127.0.0.1_default_9b44830745c166dfc6d027b0fc2df36d_26fd84fd                   
a11715435f45        gcr.io/google_containers/hyperkube:v0.21.2   "/hyperkube kubelet    17 minutes ago      Up 17 minutes                           jovial_hodgkin                                                                                           
a882a1a4b917        gcr.io/google_containers/etcd:2.0.9          "/usr/local/bin/etcd   18 minutes ago      Up 18 minutes                           adoring_hodgkin                                                                                          

docker 1.8.3 有几个已知问题,尤其是docker#17190。我们必须通过kubernetes#16052 解决此类问题。但是这些变化并不是针对 Kubernetes 1.0 版本精心挑选的。从您在上面发布的输出中,我注意到没有暂停容器。您也可以运行docker ps -a 来检查某些容器是否已死亡,然后将docker logs <dead-container> 的输出复制并粘贴到这里?

我将提交一个问题以确保 Kubernetes 1.1 版本与 docker 1.8.3 一起正常工作。谢谢!

【讨论】:

  • 我找不到 1.7.2 的标签,但 1.7.1 可以按预期工作。在 Kubernetes 1.1 发布之前,我将继续使用 1.7.1。
猜你喜欢
  • 1970-01-01
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 2021-06-26
  • 1970-01-01
  • 2018-04-19
相关资源
最近更新 更多