如果没有云提供商,则不应运行 ServiceController

如果没有云提供商,则不应运行 ServiceController

我正在尝试在我的计算机上使用 Docker 本地运行 Kubernetes(Hyperkube):

我运行此命令来运行 kubelet 容器:

docker run \
    --volume=/:/rootfs:ro \
    --volume=/sys:/sys:ro \
    --volume=/var/lib/docker/:/var/lib/docker:rw \
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
    --volume=/var/run:/var/run:rw \
    --net=host \
    --pid=host \
    --privileged=true \
    --name=kubelet \
    -d \
    gcr.io/google_containers/hyperkube-amd64:${K8S_VERSION} \
    /hyperkube kubelet \
        --containerized \
        --hostname-override="127.0.0.1" \
        --address="0.0.0.0" \
        --api-servers=http://localhost:8080 \
        --config=/etc/kubernetes/manifests \
        --cluster-dns=10.0.0.10 \
        --cluster-domain=cluster.local \
        --allow-privileged=true --v=2

运行所有其他 Kubernetes 组件。但有些组件(api 服务器、控制器管理器……)会立即退出。

控制器管理器容器(退出)日志

I0425 13:47:27.265926       1 plugins.go:71] No cloud provider specified.
I0425 13:47:27.266077       1 replication_controller.go:208] Starting RC Manager
I0425 13:47:27.266208       1 nodecontroller.go:143] Sending events to api server.
E0425 13:47:27.273153       1 nodecontroller.go:229] Error monitoring node status: Get http://127.0.0.1:8080/api/v1/nodes: dial tcp 127.0.0.1:8080: connection refused
E0425 13:55:55.950012       1 controllermanager.go:216] Failed to start service controller: ServiceController should not be run without a cloudprovider.

我尝试使用--cloud-provider=""上面的运行命令中的选项,但它仍然不起作用。

答案1

在该命令中添加 --cloud-provider 无法解决您看到的“无法启动服务控制器”错误消息。

从技术上讲,该命令正在启动 kubelet(它也具有相同的标志),但不是发出抱怨的组件。

在此示例中,它提供了一种启动 k8s 集群的简单方法 - 在某种程度上牺牲了可配置性。启动控制器管理器(出现问题的组件)的实际清单位于 /etc/kubernetes/manifests在 hyperkube docker 容器中——并且不容易被覆盖。

综上所述,您看到的错误(启动服务控制器失败)实际上不应该是致命的,它会继续超过这一点(因为云提供商 + 服务控制器不是严格要求的)。很可能这里发生了其他事情。建议查看该点之后是否还有其他日志,和/或检查 kubelet 日志。

答案2

是的,我看不出传递该标志的方法。请注意,您需要在此处将标志传递给 kube-controller-manager:https://github.com/kubernetes/kubernetes/blob/6c195a4923421f756bf13b2a3b2147c4b242aeed/cluster/images/hyperkube/static-pods/master.json#L16。将其传递给 kubelet 将不会产生任何效果。

我已经提交https://github.com/kubernetes/kubernetes/issues/27085修复此问题。请随时订阅并添加有关该问题的更多信息。

相关内容