kubernetes 命名控制器在再次变为false时无法更新NamesAccepted,

qlvxas9a  于 6个月前  发布在  Kubernetes
关注(0)|答案(2)|浏览(61)

发生了什么?
naming控制器无法在修复SingularConflict问题后更新NamesAccepted条件。
这段代码在这里 -
kubernetes/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/status/naming_controller.go
第249行到第251行的56d7898
| ifequality.Semantic.DeepEqual(inCustomResourceDefinition.Spec.Names, inCustomResourceDefinition.Status.AcceptedNames) { |
| returnnil |
| } |
Spec.Names等于Status.AcceptedNames时返回nil。理想情况下,它还应该检查NamesAccepted条件是否不为真,然后触发协调。如果this修复没问题,我可以打开PR。
你期望发生什么?
一旦从卡片名称中删除重复名称,naming控制器应将NamesAccepted条件更新为True
我们如何尽可能精确地重现它?

  1. 创建一个具有不同pluralsingular名称的CRD。
cat <<EOF | kubectl create -f -
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: bugs.crds-k8s.io
spec:
conversion:
strategy: None
group: crds-k8s.io
names:
kind: Bug
listKind: BugList
plural: bugs
singular: bug
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
type: object
x-kubernetes-preserve-unknown-fields: true
served: true
storage: true
subresources:
status: {}
EOF
  1. 确保CRD条件健康,且status.acceptedNamesspec.names相同。
kubectl get crds bugs.crds-k8s.io -o jsonpath='{.status.conditions[?(@.type=="NamesAccepted")]}' | jq
{
  "lastTransitionTime": "2023-11-16T06:38:12Z",
  "message": "no conflicts found",
  "reason": "NoConflicts",
  "status": "True",
  "type": "NamesAccepted"
}
  1. 通过使单数名称等于复数来更新CRD规范。
cat <<EOF | kubectl replace -f -
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: bugs.crds-k8s.io
spec:
conversion:
strategy: None
group: crds-k8s.io
names:
kind: Bug
listKind: BugList
plural: bugs
singular: bugs
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
type: object
x-kubernetes-preserve-unknown-fields: true
served: true
storage: true
subresources:
status: {}
EOF
  1. 检查CRD条件NamesAccepted现在失败,但status.acceptedNames不等于spec.names,这是预期的。
kubectl get crds bugs.crds-k8s.io -o jsonpath='{.status.conditions[?(@.type=="NamesAccepted")]}' | jq
{
  "lastTransitionTime": "2023-11-16T06:51:29Z",
  "message": "\"bugs\" is already in use",
  "reason": "SingularConflict",
  "status": "False",
  "type": "NamesAccepted"
}
  1. 通过使单数名称不等于复数名称来修复CRD。
cat <<EOF | kubectl replace -f -
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: bugs.crds-k8s.io
spec:
conversion:
strategy: None
group: crds-k8s.io
names:
kind: Bug
listKind: BugList
plural: bugs
singular: bug
scope: Namespaced
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
type: object
x-kubernetes-preserve-unknown-fields: true
served: true
storage: true
subresources:
status: {}
EOF
  1. 检查即使问题已修复,CRD条件NamesAccepted仍然失败。
kubectl get crds bugs.crds-k8s.io -o jsonpath='{.status.conditions[?(@.type=="NamesAccepted")]}' | jq
{
  "lastTransitionTime": "2023-11-16T06:51:29Z",
  "message": "\"bugs\" is already in use",
  "reason": "SingularConflict",
  "status": "False",
  "type": "NamesAccepted"
}

我们需要知道其他什么吗?

  • 无响应*

Kubernetes版本
根据代码,似乎受到影响的是master分支
云提供商
操作系统版本

# On Linux:
$ cat /etc/os-release
# paste output here
$ uname -a
# paste output here

# On Windows:
C:\> wmic os get Caption, Version, BuildNumber, OSArchitecture
# paste output here

安装工具
容器运行时(CRI)和版本(如适用)
相关插件(CNI,CSI等)和版本(如适用)

wrrgggsh

wrrgggsh2#

有趣的边缘情况:)
/triage accepted
/assign @alexzielenski
Alex,你能看一下这个提议的补丁吗?

相关问题