project.management.cattle.io not found
本文永久链接: https://www.xtplayer.cn/rancher/project-management-cattle-io-not-found/
问题背景
有时候可能会在 rancher server 中看到很多如下的错误提示:
2019/07/16 06:33:23 [ERROR] NamespaceController default [resourceQuotaSyncController] failed with : project.management.cattle.io "cluster-vp4z8/project-zj5k9" not found, [resourceQuotaUsedLimitController] failed with : project.management.cattle.io "cluster-vp4z8/project-zj5k9" not found |
出现问题时,尝试通过在 local 集群或者单 rancher 容器中运行以下命令去查询集群 ID 、项目 ID、命名空间 ID。
kubectl get cluster --all-namespaces |
对比查询结果,均不存在错误提示中的 集群 ID、项目 ID、命名空间 ID。
问题分析
新的集群第一次导入时,会自动给 K8S 和 rancher 相关的命名空间添加 annotations:
field.cattle.io/projectId
和 labels:field.cattle.io/projectId
,rancher 通过这两个参数来控制和更新命名空间。找一个命名空间查看其 yaml 配置,比如:
kubectl get ns kube-system -oyaml
apiVersion: v1
kind: Namespace
metadata:
annotations:
field.cattle.io/projectId: local:p-zkhr5
lifecycle.cattle.io/create.namespace-auth: "true"
creationTimestamp: "2019-03-24T05:56:17Z"
finalizers:
- controller.cattle.io/namespace-auth
labels:
field.cattle.io/projectId: p-zkhr5
name: kube-system
resourceVersion: "383933986"
selfLink: /api/v1/namespaces/kube-system
uid: 8a3306c1-4df9-11e9-906a-00163e145e40
spec:
finalizers:
- kubernetes
status:
phase: Active可以看到 labels 和 annotations 中带有与 集群 ID 和项目 ID 相关的参数。
截止
rancher v2.4.6 、v2.3.9
,重复导入的 K8S 集群,原集群中的命名空间不会自动移动到 Rancher projects 下。访问 Rancher UI ,在集群|项目/命名空间
下可以看到命名空间都是在 全部 下。重复导入的 K8S 集群,因为不会自动把命名空间移动到 Rancher projects 下,所以命名空间 yaml 配置的参数没有自动更新,
resourceQuotaSyncController
是根据这两个参数来控制命名空间,因此在 Rancher server 中看到了最开始的错误日志。
解决方法
要解决这个问题,只需要让命名空间更新 labels 和 annotations 两个参数即可。
- 把如下图的命名空间移动到 system 项目下。
- 把 default 命名空间移动到 default 项目下。
- 其他的命名空间,根据实际的规划来移动到对应的项目下。