Rob*_*cok 6 google-cloud-platform kubernetes google-kubernetes-engine
我正在GKE上运行一个集群,有时我会进入挂起状态.现在我只使用两个节点并允许群集自动缩放.其中一个节点具有NotReady状态,只是停留在其中.因此,由于CPU不足,我的一半pod正在等待.
我从一开始就部署了一个具有相当高的CPU使用率的pod.当我将其缩放到2时,我注意到CPU使用率为1.0; 在我将部署扩展到3个副本的那一刻,我希望第三个处于Pending状态,直到集群添加另一个节点,然后在那里安排它.
相反,节点切换到NotReady状态,其上的所有pod现在都处于Pending状态.但是,节点没有重启或任何东西 - 它只是不被Kubernetes使用.然后GKE认为有足够的资源,因为VM有0 CPU使用率,并且不会扩展到3.我无法从控制台手动SSH到实例 - 它被卡在加载循环中.
我可以手动删除实例然后它开始工作 - 但我不认为这是完全管理的想法.
我注意到的一件事 - 不确定是否相关:在GCE控制台中,当我查看VM实例时,实例组和负载均衡器(这是nginx入口点周围的服务)正在使用Ready节点,但NotReady节点仅由实例组使用 - 而不是负载平衡器.
此外,kubectl get events有一条线:
Warning CreatingLoadBalancerFailed {service-controller } Error creating load balancer (will retry): Failed to create load balancer for service default/proxy-service: failed to ensure static IP 104.199.xx.xx: error creating gce static IP address: googleapi: Error 400: Invalid value for field 'resource.address': '104.199.xx.xx'. Specified IP address is already reserved., invalid
Run Code Online (Sandbox Code Playgroud)
我loadBalancerIP: 104.199.xx.xx在代理服务的定义中指定了以确保在每次重新启动时服务获得相同(保留)的静态IP.
有关如何防止这种情况发生的任何想法?因此,如果一个节点卡在NotReady状态,它至少会重新启动 - 但理想情况下不会进入这样的状态开始?
谢谢.
小智 8
我要做的第一件事是为这些pod定义资源和限制.
资源告诉集群您认为该pod将使用多少内存和CPU.这样做是为了帮助调度程序找到运行这些pod的最佳位置.
限制在这里至关重要:它们设置为防止您的pod损坏节点的稳定性.由于资源不足,最好让一个由OOM杀死的pod而不是一个使节点停机的pod.
例如,在这种情况下,你说要为你的pod想要200m CPU(20%),但如果它有机会超过300(30%),你希望调度程序杀掉它并开始一个新的.
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
resources:
limits:
cpu: 300m
memory: 200Mi
requests:
cpu: 200m
memory: 100Mi
Run Code Online (Sandbox Code Playgroud)
你可以在这里阅读更多:http://kubernetes.io/docs/admin/limitrange/
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |