为什么我在kubernetes上没有默认的serviceAccount?

时间:2015-11-04 17:35:09

标签: kubernetes

我正在尝试让Kubernetes在运行CoreOS的一些本地计算机上运行。我松散地追随this guide。一切似乎都在运行,我可以通过kubectl连接到api。但是,当我尝试创建一个pod时,我收到此错误:

Pod "redis-master" is forbidden: Missing service account default/default: <nil> 

执行kubectl get serviceAccounts确认我没有任何ServiceAccounts:

NAME      SECRETS

根据documentation,每个命名空间都应该有一个默认的ServiceAccount。运行kubectl get namespace确认我有默认命名空间:

NAME      LABELS    STATUS
default   <none>    Active

我对Kubernetes和CoreOS来说是全新的,所以我确信有些东西我会忽略,但我不能为我的生活找出正在发生的事情。我很感激任何指针。

更新

kube-controller-manager似乎没有运行。当我尝试运行它时,我收到此消息:

I1104 21:09:49.262780   26292 plugins.go:69] No cloud provider specified.
I1104 21:09:49.262935   26292 nodecontroller.go:114] Sending events to api server.
E1104 21:09:49.263089   26292 controllermanager.go:217] Failed to start service controller: ServiceController should not be run without a cloudprovider.
W1104 21:09:49.629084   26292 request.go:302] field selector: v1 - secrets - type - kubernetes.io/service-account-token: need to check if this is versioned correctly.
W1104 21:09:49.629322   26292 request.go:302] field selector: v1 - serviceAccounts - metadata.name - default: need to check if this is versioned correctly.
W1104 21:09:49.636082   26292 request.go:302] field selector: v1 - serviceAccounts - metadata.name - default: need to check if this is versioned correctly.
W1104 21:09:49.638712   26292 request.go:302] field selector: v1 - secrets - type - kubernetes.io/service-account-token: need to check if this is versioned correctly.

由于我在本地运行,因此我没有云提供商。我试图定义--cloud-provider="",但仍然抱怨同样的错误。

2 个答案:

答案 0 :(得分:1)

每个命名空间的默认服务帐户由服务帐户控制器创建,该控制是一个循环,它是kube-controller-manager二进制文件的一部分。因此,验证二进制文件是否正在运行,并检查其日志中是否有任何暗示它无法创建服务帐户的内容,请确保将“--service-account-private-key-file = somefile”设置为具有以下内容的文件:一个有效的PEM密钥。

或者,如果您想在没有服务帐户的情况下取得一些进展,并稍后再回过头来,您可以通过从api-server的{{1}中删除“ServiceAccount”选项来禁用阻止您的pod的准入控制器标志。但是你可能希望稍后回来修复它。

答案 1 :(得分:0)

这对我有用

-disable-admission-plugins = ServiceAccount