Kubernetes 设置图像缺少资源类型“部署”
Posted
技术标签:
【中文标题】Kubernetes 设置图像缺少资源类型“部署”【英文标题】:Kubernetes set image missing resource type 'deployment' 【发布时间】:2019-01-23 06:25:51 【问题描述】:我正在尝试使用以下命令更新 Kubernetes 中的映像:
kubectl set image deployment/ms-userservice ms-userservice=$DOCKER_REGISTRY_NAME/$BITBUCKET_REPO_SLUG:$BITBUCKET_COMMIT --insecure-skip-tls-verify
但是当我收到以下错误时:
error: the server doesn't have a resource type "deployment"
我检查了我是否在正确的命名空间中,并且具有该名称的 pod 存在并且正在运行。
我找不到与此错误有关的任何有意义的资源。
旁注:我正在通过 Bitbucket 和管道执行此操作,该管道还构建了我想要使用的图像。
有什么建议吗?
【问题讨论】:
kubectl get deploy
的输出是什么?
当我尝试运行 kubectl get deploy
时,我收到了类似的错误:error: the server doesn't have a resource type "deploy"
。我怀疑它与用户有关 - 错误消息没有太大帮助。
您有管理员角色吗? kubectl auth can-i get deploy
?
【参考方案1】:
我怀疑它与用户有关 - 错误消息没有太大帮助。
@TietjeDK 是正确的,它只是一个误导性的错误消息。这意味着正在发生两件事之一(或者可能两者都发生):kubectl
二进制文件比集群支持的版本范围更新(例如:对 v1.8 集群使用 v1.11 二进制文件)或前提是 JWT 签名错误。
你应该非常小心--insecure-skip-tls-verify
,不仅因为它的安全卫生很差,而且因为如果 kubeconfig 不正确——很可能是这里的情况——那么看到 x509 错误比看到 x509 错误更清楚尝试对无效的 JWT 进行故障排除。
让我相信它实际上是令牌的签名,而不是它的内容的指标是,如果它是内容,你会看到一个 RBAC 消息User "foo@example.com" cannot list deployments in $namespace namespace
,这意味着 apiserver 确实解压了 JWT 并找到了它的断言不足以进行操作。但是,如果您使用随机密钥签署 JWT,JWT 将不会解包,因为它将无法通过公钥验证并被彻底拒绝。
所以,tl;dr 是双重的:
-
修复 kubeconfig 以实际包含集群的正确证书颁发机构 (CA),因此不需要
--insecure-skip-tls-verify
在修复 kubeconfig 时,为 (User
| ServiceAccount
) 发出一个新令牌,该令牌来自旨在与之交互的集群
【讨论】:
【参考方案2】:我已通过将命名空间显式设置为参数来修复此错误,例如:
kubectl set image -n foonamespace deployment/ms-userservice.....
https://www.mankier.com/1/kubectl-set-image#--namespace
【讨论】:
以上是关于Kubernetes 设置图像缺少资源类型“部署”的主要内容,如果未能解决你的问题,请参考以下文章