我有一个运行Kubernetes 1.6.1的3个节点的集群,每个节点有2个CPU和4G RAM。
我通过替换传递给容器的环境变量值,通过更新pod模板哈希来不断地使用相同的Docker标记重新部署我的应用程序。
sed "s/THIS_STRING_IS_REPLACED_DURING_BUILD/$(date)/g" nginx-deployment.yml | kubectl replace -f -
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
env:
- name: FOR_GODS_SAKE_PLEASE_REDEPLOY
value: 'THIS_STRING_IS_REPLACED_DURING_BUILD'
如果我这样做了几百次,我再也无法重新部署 - 新的pod正处于Pending状态。
kubectl get events
生成以下内容:
Events:
FirstSeen LastSeen Count From SubObjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
1h 50s 379 default-scheduler Warning
FailedScheduling No nodes are available that match all of the following predicates:: Insufficient pods (3).
与此同时,我可以在每个Kube节点上看到大约200个已退出的nginx容器。
查看kube-controller-manager日志我可以看到PodGC正在尝试删除一些pod,但找不到它们。
I0516 12:53:41.137311 1 gc_controller.go:175] Found unscheduled terminating Pod nginx-deployment-2927112463-qczvv not assigned to any Node. Deleting.
I0516 12:53:41.137320 1 gc_controller.go:62] PodGC is force deleting Pod: default:nginx-deployment-2927112463-qczvv
E0516 12:53:41.190592 1 gc_controller.go:177] pods "nginx-deployment-2927112463-qczvv" not found
I0516 12:53:41.195020 1 gc_controller.go:175] Found unscheduled terminating Pod nginx-deployment-3265736979-jrpzb not assigned to any Node. Deleting.
I0516 12:53:41.195048 1 gc_controller.go:62] PodGC is force deleting Pod: default:nginx-deployment-3265736979-jrpzb
E0516 12:53:41.238307 1 gc_controller.go:177] pods "nginx-deployment-3265736979-jrpzb" not found
我能做些什么来阻止这种情况发生吗?
答案 0 :(得分:1)
Kubernetes允许您调整kubelet的垃圾收集标志。这可以通过更改标记--maximum-dead-containers
或--maximum-dead-containers-per-container
来完成。在这里阅读更多关于它的文章:
答案 1 :(得分:0)
我认为你的节点已经耗尽了所有资源。调度程序找不到任何节点来安排pod。由于pod未安排到任何节点,因此PodGC无法删除您的pod。
我认为你应该仔细检查为什么你的资源已经耗尽。