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 设置图像缺少资源类型“部署”的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes软件包管理器Helm

kubernetes软件包管理器Helm

Kubernetes 清理 pod、服务、部署等

k8s容器资源限制,资源监控

k8s容器资源限制,资源监控

可运行的 JAR 缺少图像/文件(资源)