博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k8s的资源分配
阅读量:6671 次
发布时间:2019-06-25

本文共 4065 字,大约阅读时间需要 13 分钟。

限制每个实例

在创建一个replicationcontroller(以下简称rc)时,我们可以在创建文件中指定pod的资源配额,如下面的json: {    "kind": "ReplicationController",    "apiVersion": "v1",    "metadata": {        "name": "eatcpu",        "creationTimestamp": null    },    "spec": {        "replicas": 2,        "selector": {            "name": "huang"        },        "template": {            "metadata": {                "name": "cpu",                "labels": {                    "name": "huang"                }            },            "spec": {                "containers": [                    {                        "name": "eatcpucontainer",                        "image": "registry.hub.abc.com.cn/eatcpu:v1.1",                        "resources": {                        "request": {                                "cpu": "1.0",                                "memory": "1.0Gi"                            },                            "limits": {                                "cpu": "1.2",                                "memory": "1.1Gi"                            }                        },                        "command": [                            "/deadloop",                            "-max_procs=4"                        ]                    }                ]            }        }    },    "status": {        "replicas": 0    }}

当然实际上json不用写这么复杂,关键是:

"resources": {             "limits": {                      "cpu": "1.0",                      "memory": "1.0Gi"            },            "limits": {                    "cpu": "1.2",                    "memory": "1.1Gi"              }         },

这句的意思是给这个rc的每个pod分配cpu额度的最低要求是1.0(即1个CPU核心),内存的最低要求是1.0Gi,对CPU的限制是不能超过1.2个核心,内存则是1.1Gi。

当我们执行create命令的时候,若scheduler组件检查各个nodes发现没有满足1个空闲cpu核心和1Gi空闲内存的机器,那么这个pod就不能被创建,若rc要创建3个pod,整个集群只能满足创建2个,那么第三个pod会被放入队列中,等待集群有足够资源时再创建出来。

另外,若pod在运行过程中持续地消耗内存,超过了1.1G,pod会被销毁并重启,但当cpu消耗超过配额时,k8s不会做出相应的措施。

k8s1.3左右的版本增加了horizontalAutoScale特性,当CPU在一定时间内高于一个阈值时,会出发控制器对其进行水平扩容。

整个名称空间下的资源配额

利用k8s搭建部署服务,并在正式的场合使用时,几乎是肯定要引入一个“用户”概念的。可以使用namespace来实现用户的隔离。并使用quota为每个用户指定配额。

注:这里差不多是翻译github上,引用的几个yaml也出自于彼处,有兴趣的可以直接去看官文。

k8s下默认的namespace是default,我们可以手动添加一个:

$ kubectl create -f namespace.yaml$ kubectl get namespacesNAME            LABELS             STATUSdefault         
Activequota-example
Active

接着我们创建一个quota,quota可以指定某个namespace有多少的资源配额,包括cpu,内存,persistentvolumeclaims(据说是内存),pod数量,rc数量等等。

如下创建一个:

$ kubectl create -f quota.yaml --namespace=quota-example$ kubectl describe quota quota --namespace=quota-exampleName:                   quotaNamespace:              quota-exampleResource                Used    Hard--------                ----    ----cpu                     0       20memory                  0       1Gipersistentvolumeclaims  0       10pods                    0       10replicationcontrollers  0       20resourcequotas          1       1secrets                 1       10services                0       5

创建了quota后我们每次创建一个rc(也即pods)都要指定它的资源配额,否则即便创建成功,容器也不能run起来。

指定配额的方法见标题1,但是那是对一个集群中的pod统一制定,我们也可以统一指定该namespace下的所有pods的配额,即创建一个:

$ kubectl create -f limits.yaml --namespace=quota-examplelimitranges/limits$ kubectl describe limits limits --namespace=quota-exampleName:           limitsNamespace:      quota-exampleType            Resource        Min     Max     Default----            --------        ---     ---     ---Container       memory          -       -       512MiContainer       cpu             -       -       100m

现在我们可以正常地run一个rc了,并且,在容器成功跑起来后,我们可以统一地看到该namespace下的资源使用情况:

kubectl describe quota quota --namespace=quota-exampleName:                   quotaNamespace:              defaultResource                Used            Hard--------                ----            ----cpu                     100m            20memory                  536870912       1Gipersistentvolumeclaims  0               10pods                    1               10replicationcontrollers  1               20resourcequotas          1               1secrets                 1               10services                0               5

转载地址:http://kmlxo.baihongyu.com/

你可能感兴趣的文章