不确定为什么会发生这种情况,但尽管Kubernetes集群中附加的部署已被删除了很长时间(长达82天),但我们仍在Kubernetes集群中看到带有活动Pod的旧副本集。我们的部署中spec.replicas
的最大值设置为2,但是在这些部署中我们看到多达6/8个活动吊舱。
我们当前正在运行k8s版本1.14.6。下面也是一个示例部署
{
"kind": "Deployment",
"apiVersion": "extensions/v1beta1",
"metadata": {
"name": "xxxxxxxxxxxxxxxx",
"namespace": "default",
"annotations": {
"deployment.kubernetes.io/revision": "15",
}
},
"spec": {
"replicas": 2,
"selector": {
"matchLabels": {
"app": "xxxxxxxx"
}
},
"template": {
"spec": {
"containers": [
{
"name": "xxxxxxxx",
"image": "xxxxxxxx",
"ports": [
{
"containerPort": 80,
"protocol": "TCP"
}
],
"resources": {},
"imagePullPolicy": "Always"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"securityContext": {},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": 1,
"maxSurge": 1
}
},
"minReadySeconds": 10,
"revisionHistoryLimit": 2147483647,
"progressDeadlineSeconds": 2147483647
},
"status": {
"observedGeneration": 15,
"replicas": 2,
"updatedReplicas": 2,
"readyReplicas": 2,
"availableReplicas": 2,
"conditions": [
{
"type": "Available",
"status": "True",
"reason": "MinimumReplicasAvailable",
"message": "Deployment has minimum availability."
}
]
}
}
答案 0 :(得分:0)
标签可能有问题。您的广告连播规范中未定义标签。
答案 1 :(得分:0)
对标签选择器的更改会使现有的容器脱离ReplicaSet的范围,因此,如果更改标签和标签选择器,则容器不再受ReplicaSet的“控制”。
如果运行kubectl get pods <pod_name> -o yaml
,其中<pod_name>
是由ReplicaSet创建的pod,您将看到所有者引用。
但是,如果更改标签并运行相同的命令,则所有者引用将不再可见,因为它超出了ReplicaSet范围。
此外,如果您创建裸豆荚,并且它们恰好具有与ReplicaSet相同的标签,则它们将被ReplicaSet获取。之所以发生这种情况,是因为RS不仅限于由其模板创建的Pod,它还可以获取与选择器匹配的Pod,并在超出RS清单中指定的所需数量时终止它们。
如果在RS之前用相同的标签创建一个裸容器,RS将对该容器进行计数,并仅部署所需数量的容器以实现所需的副本数。
通过将kubectl delete
与--cascade=false
选项一起使用,您也可以删除ReplicaSet而不影响其任何Pod。