k8s之POD资源限制和健康监测

写在前面

本文一起看下POD的资源限制配置和健康监测的相关内容。

在这里插入图片描述

1:资源限制

如果是不对POD设置资源限制的话,若任由其占用系统资源,可能会造成非常严重的后果,所以我们需要根据具体情况来设置资源限制,如使用多少内存,多少CPU,多少IOPS等,实现这些限制使用的是cgroup技术,而配置这些限制使用到属性是resources。在看具体的例子之前需要先来看下cpu资源的表示方法,cpu标识的最小单位是0.001m,这里的m是milli的意思,1000m就代表使用一个cpu,500m就代表0.5cpu,具体配置cpu限制的话使用XmX这种,后者是直接指定使用CPU的个数。如下yaml:

apiVersion: v1
kind: Pod
metadata:
  name: ngx-pod-resources

spec:
  containers:
  - image: nginx:alpine
    name: ngx

    resources:
      requests:
        cpu: 10m
        memory: 100Mi
      limits:
        cpu: 20m
        memory: 200Mi

通过requests配置初始时需要0.01cpu,100MB内存,通过limits配置最多只能申请0.02cpu,200MB内存,如果超过最大限制则会被强制停止。配置了资源限制后,k8s会根据每个Node的剩余资源情况来将POD分配到合适的Node上,尽量的将Node的资源榨取干净。这个过程有些类似于俄罗斯方块,每个方块是分配到某Node上的POD,如下图:

在这里插入图片描述

如果我们申请的资源集群中所有的Node都无法满足会发生什么呢?比如定义如下申请10个CPU的yaml:

dongyunqi@mongodaddy:~/k8s$ cat appy-10-cpu.yml 
apiVersion: v1
kind: Pod
metadata:
  name: ngx-pod-resources

spec:
  tolerations:
  - key: node-role.kubernetes.io/master
    effect: NoSchedule
    operator: Exists
  containers:
  - image: nginx:alpine
    name: ngx

    resources:
      requests:
        cpu: 10
        memory: 100Mi
      limits:
        cpu: 20
        memory: 200Mi

apply后查看:

dongyunqi@mongodaddy:~/k8s$ kubectl get pod | egrep 'NAME|ngx-pod-resources'
NAME                           READY   STATUS    RESTARTS   AGE
ngx-pod-resources              0/1     Pending   0
### 使用Prometheus监控Kubernetes中的CPU内存并计算资源限制 #### 配置Prometheus以监控特定命名空间内的Pods 为了实现对特定命名空间下的Pod进行CPU内存使用的监控,可以在`prometheus.yml`文件中定义相应的job来抓取这些数据。例如: ```yaml scrape_configs: - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace] action: keep regex: default|kube-system # 只保留defaultkube-system两个命名空间的数据 ``` 此配置会告诉Prometheus仅收集来自`default``kube-system`这两个命名空间下pods的指标信息[^4]。 #### 查询CPU内存使用情况 一旦Prometheus开始正常工作并与Kubernetes集成之后,可以利用PrometheuQL查询语句获取所需的信息。对于查看某个容器在过去一段时间内的平均CPU利用率(单位为core),可采用如下表达式: ```promql rate(container_cpu_usage_seconds_total{container!="",image!=""}[5m]) ``` 而要获得同一时间段内该容器所消耗的最大RAM量,则应执行下面这条命令: ```promql max_over_time(container_memory_working_set_bytes{container!="",image!=""}[5m]) ``` 以上两条指令均需替换其中的大括号部分以匹配实际环境中待监测的目标对象名称、标签或其他属性条件[^1]。 #### 计算合理的资源请求与限制值 当掌握了各个应用组件的历史性能表现后,便可以根据业务需求设定适当的服务级别目标(SLO),进而推导出最优资源配置方案。通常建议预留一定比例的安全边际作为缓冲区以防突发流量冲击造成系统过载;同时也要注意避免过度分配而导致硬件成本浪费。一般而言,长期负载峰值加上约20%-30%余量即是一个较为理想的初始估算范围。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值