我正在尝试让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=""
,但仍然抱怨同样的错误。
答案 0 :(得分:1)
每个命名空间的默认服务帐户由服务帐户控制器创建,该控制是一个循环,它是kube-controller-manager二进制文件的一部分。因此,验证二进制文件是否正在运行,并检查其日志中是否有任何暗示它无法创建服务帐户的内容,请确保将“--service-account-private-key-file = somefile”设置为具有以下内容的文件:一个有效的PEM密钥。
或者,如果您想在没有服务帐户的情况下取得一些进展,并稍后再回过头来,您可以通过从api-server的{{1}中删除“ServiceAccount”选项来禁用阻止您的pod的准入控制器标志。但是你可能希望稍后回来修复它。
答案 1 :(得分:0)
这对我有用
-disable-admission-plugins = ServiceAccount