我希望我的GKE集群中的内核数量保持在3个以下。如果K8s复制控制器和pod的CPU限制从100m减少到最多50m,这将变得更加可行。不然光K8s豆荚就占了一个核心的70%。
我决定不增加节点的 CPU 功率。在我看来,这在概念上是错误的,因为 CPU 限制被定义为以内核为单位进行测量。相反,我做了以下工作:
这是大量的工作,可能很脆弱。K8s未来版本的任何进一步变化,或GKE配置的变化,都可能会打破它。
那么,有没有更好的办法呢?
正如@Tim Hockin所说,附加组件的默认配置适用于典型的集群。但可以通过更改资源限制规范来微调。
在调整加载项大小之前,请记住,您也可以禁用不必要的加载项。这可能会因插件、其版本、kubernetes版本和提供商的不同而有所不同。谷歌有一个页面,涵盖了一些选项,同样的概念也可以用于其他提供商
作为@Tim Hockin回答中所链接问题的解决方案,第一个被接受的方法是使用插件大小调整器。它基本上找到了最佳的限制和要求,修补了Deployment/Pod/DemonSet,并重新创建了相关的Pod以匹配新的限制,但比手动完成所有这些工作要少。
但是,实现此目的的另一种更强大的方法是使用Vertical Pod Autoscaler@Tim如Smart答案中所述。VPA 完成了插件调整器的功能,但它有很多好处:
更新后的模板将是:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: <addon-name>-vpa
namespace: kube-system
spec:
targetRef:
apiVersion: "apps/v1"
kind: <addon-kind (Deployment/DaemonSet/Pod)>
name: <addon-name>
updatePolicy:
updateMode: "Auto"
检查当前集群中使用的插件很重要,因为它们可能因提供商(AWS、Google等)及其kubernetes实施版本而异
确保您的集群中安装了VPA插件(大多数kubernetes服务都将其作为一个易于检查的选项)
更新策略可以是初始(仅在创建新pod时应用新限制)、重新创建(强制pod超出规格而死亡并应用于新pod)、关闭(创建建议但不应用)或自动(当前匹配重新创建,将来可以更改)
@Tim Smart answer example上唯一的区别是当前api版本是< code > auto scaling . k8s . io/v1 ,targets的当前api版本是< code>apps/v1,以及一些提供者的较新版本使用FluentBit代替Fluentd。他的答案可能更适合早期的kubernetes版本
例如,如果您使用的是Google Kubernetes Engine,那么目前一些“最重”的需求插件是:
通过在其上应用 VPA,我的插件资源需求从 1.6 下降到 0.4。
更改默认命名空间的 LimitRange spec.limits.defaultRequest.cpu
应该是更改新 Pod 默认值的合法解决方案。请注意,LimitRange 对象是命名空间的,因此如果您使用额外的命名空间,您可能需要考虑它们的合理默认值是什么。
正如你所指出的,这不会影响现有对象或 kube-system 命名空间中的对象。
kube-system 命名空间中的对象大多根据经验调整大小 - 基于观测值。更改这些可能会产生不利影响,但如果群集非常小,则可能不会。
我们有一个开放的问题(https://github.com/kubernetes/kubernetes/issues/13048)来根据总集群大小调整库贝系统请求,但还没有实现。我们还有另一个开放的问题(https://github.com/kubernetes/kubernetes/issues/13695)可能对一些库贝系统资源使用较低的QoS,但同样-还没有实现。
其中,我认为#13048是实现你所要求的正确方法。就目前而言,对“有更好的方法吗”的回答是令人遗憾的“没有”。我们为中等规模的集群选择了默认值——对于非常小的集群,您可能需要做您正在做的事情。
我发现在GKE集群上减少系统资源请求的最好方法之一是使用垂直自动缩放器。
以下是我用过的VPA定义:
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
namespace: kube-system
name: kube-dns-vpa
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: Deployment
name: kube-dns
updatePolicy:
updateMode: "Auto"
---
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
namespace: kube-system
name: heapster-vpa
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: Deployment
name: heapster-v1.6.0-beta.1
updatePolicy:
updateMode: "Initial"
---
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
namespace: kube-system
name: metadata-agent-vpa
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: DaemonSet
name: metadata-agent
updatePolicy:
updateMode: "Initial"
---
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
namespace: kube-system
name: metrics-server-vpa
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: Deployment
name: metrics-server-v0.3.1
updatePolicy:
updateMode: "Initial"
---
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
namespace: kube-system
name: fluentd-vpa
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: DaemonSet
name: fluentd-gcp-v3.1.1
updatePolicy:
updateMode: "Initial"
---
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
namespace: kube-system
name: kube-proxy-vpa
spec:
targetRef:
apiVersion: "extensions/v1beta1"
kind: DaemonSet
name: kube-proxy
updatePolicy:
updateMode: "Initial"
下面是它对kube-dns
部署所做操作的屏幕截图。
我有以下REST资源: 返回公司列表 返回公司状态 返回公司中的所有部门 返回员工工作的部门 返回部门状态 资源具有关联的权限令牌。当客户端引用不存在的公司时,我检查他们是否有权访问。如果是,则返回,否则返回 到目前为止还不错。当客户端引用不存在的资源时,就会出现问题。因为部门不存在,所以我无法弄清楚它与什么公司和权限令牌关联。 看来我们又回到了传统的可用性/安全性权衡: 通过假设每个人都有权知道
7.2.2.Android系统资源 我们的程序都有自己的资源,Android系统也同样。Android系统中内置了许多图标、图像、音频等等各种资源文件。回想下,应用程序的资源文件都在/res/目录之下,要在XML中引用它们,只需填上地址即可;而引用系统资源,则需要为地址加一个前缀android:,比如@android:drawable/ic_menu_preferences。在Java中引用的话,
把这部分的log摘取出来. 以org.nutz.resource下的log为准 2015-03-30 10:49:49,383 org.nutz.resource.Scans.<init>(Scans.java:484) DEBUG - Locations for Scans: [JarResourceLocation [jarPath=D:\nutzbook\apache-tomcat-8.0.
Current Usage # resource_getrusage.py import resource import time RESOURCES = [ ('ru_utime', 'User time'), ('ru_stime', 'System time'), ('ru_maxrss', 'Max. Resident Set Size'), ('ru_i
CPU资源设置 默认情况下,所有容器获得CPU周期的比例相同。可以通过改变容器的CPU加权占有率相对于其他正在运行容器的加权占有率的比例来调整。 修改1024的比例,使用-c或--cpu-sharesflag的权重设置为2或更高。 该比例只适用在CPU密集型进程运行时。当在一个容器中的任务处于空闲状态,其他容器可以使用剩余空闲CPU时间。实际CPU时间将根据在系统上运行的容器的数目而变化。 例如,
我是火花操作员的新手,我不知道如何在YAML文件中设置资源请求和限制,例如在我的情况下,我有驱动程序pod的内存请求512m,但限制呢,它是无界的? 规格:驱动程序:核心:1核心限制:200m内存:512m标签:版本:2.4.5服务帐户:火花
Qt4 资源系统是与平台无关的,它被用来存储应用程序可执行文件运行时使用的二进制 文件(比如图标文件、翻译文件等)。它也是 Qt 的核心机制之一。当你的应用程序总是使 用一些特定的文件集合时,它会非常有用,并且能够保证文件不易丢失。 Qt4 资源系统的运转需要 qmake、rcc((Qt's resource compiler)以及 QFile 的紧密 配合。 8.6.1 Qt 资源系统的改进 Q