我试图在我的机器上使用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服务器,控制器pipe理器…)会立即退出。
控制器pipe理器容器(已退出)日志
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=""
选项,但它仍然不能正常工作。
将–cloud-provider添加到该命令不会解决您看到的“无法启动服务控制器”错误消息。
从技术上讲,命令是启动kubelet – 也有相同的标志 – 但不是抱怨的组件。
在这个例子中,它提供了一个简单的方法来启动一个k8s集群 – 这在某种程度上是以可configuration性为代价的。 启动controller-manager(正在投诉的组件)的实际清单位于hyperkube docker容器中的/ etc / kubernetes / manifest 中,并且不容易被覆盖。
现在所有的说法,你所看到的错误(无法启动服务控制器)实际上不应该是致命的,它会继续超过这一点(因为云提供商+服务控制器不是严格要求)。 很可能还有别的东西在这里。 会build议看看是否有任何额外的日志超过这一点,和/或检查kubelet日志也。
是的,我不能看到通过该标志的方法。 请注意,您需要将标志传递给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来解决这个问题。 请随意订阅并添加有关该问题的更多信息。