k8s之内存和cpu配置

介绍

资源请求(requests):即允许运行的最小资源,pod调度规则根据该值判断。

资源限制(limits):即允许运行的最大资源,limits不会影响pod调度规则,因此limits总和可以超过服务器提供的总资源数,服务运行超过该值会被kill重启。

另外:k8s仅会确保pod能够获得他们请求的cpu时间额度,他们能否获得额外的cpu时间,则取决于其他正在运行的作业对cpu资源的占用情况。例如,对于总数为1000m的cpu来说,容器a请求使用200m,容器b请求使用500m,在不超出它们各自的最大限额的前提下,余下的300m在双方都需要时会以2:5的方式进行配置。(限制cpu是限制其运行占用cpu时间)

名称空间资源配置

设置名称空间namespaces默认资源

名称空间设置是应用到名称空间下所有未定义资源配置的pod中,如果pod单独定义资源配置,则优先使用pod定义的配置。

1
2
3
4
5
6
7
8
# 查看名称空间
kubectl get ns

# 创建名称空间 default
kubectl create namespace default

# 查看名称空间资源配置信息
kubectl describe namespaces default

创建 limit-default.yaml:编辑以下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range
spec:
limits:
- default:
cpu: 0.25
memory: 2048Mi
defaultRequest:
cpu: 0.1
memory: 128Mi
type: Container

更新配置

1
2
3
4
5
6
7
8
# 应用配置
kubectl create -f limit-default.yaml --namespace=default

# 如果配置还有更改,使用以下命令更新
kubectl replace -f limit-default.yaml --namespace=default

# 查看名称空间限制
kubectl describe namespaces default

pod资源配置

pod资源配置有deployment 控制器定义的

1
2
3
4
5
# 查看 deployment 控制器
kubectl get deployment

# 修改 deployment 控制器
kubectl edit deployment nginx-deployment

以下为修改内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
spec:
containers:
- image: nginx:1.16
imagePullPolicy: IfNotPresent
lifecycle: {}
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources:
limits:
cpu: 500m
memory: 500Mi
requests:
cpu: 100m
memory: 128Mi

查看pod修改后的配置

1
kubectl get pod nginx-deployment-79788f59b6-nfvst --output=yaml --namespace=default

查看pod所在node节点资源配置

1
kubectl  describe  node node01

资源配置详解

配置示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
apiVersion: v1
kind: LimitRange
metadata:
name: mylimits
spec:
limits:
- max:
cpu: "4"
memory: 2Gi
min:
cpu: 200m
memory: 6Mi
maxLimitRequestRatio:
cpu: 3
memory: 2
type: Pod
- default:
cpu: 300m
memory: 200Mi
defaultRequest:
cpu: 200m
memory: 100Mi
max:
cpu: "2"
memory: 1Gi
min:
cpu: 100m
memory: 3Mi
maxLimitRequestRatio:
cpu: 5
memory: 4
type: Container

pod部分:

  1. max表示pod中所有容器资源的Limit值和的上限,也就是整个pod资源的最大Limit,如果pod定义中的Limit值大于LimitRange中的值,则pod无法成功创建。
  2. min表示pod中所有容器资源请求总和的下限,也就是所有容器request的资源总和不能小于min中的值,否则pod无法成功创建。
  3. maxLimitRequestRatio表示pod中所有容器资源请求的Limit值和request值比值的上限,例如该podcpuLimit值为3,而request为0.5,此时比值为6,创建pod将会失败。

container部分

  1. container的部分,maxminmaxLimitRequestRatio的含义和pod中的类似,只不过是针对单个的容器而言。下面说明几个情况:

如果container设置了maxpod中的容器必须设置limit,如果未设置,则使用defaultlimt的值,如果defaultlimit也没有设置,则无法成功创建

如果设置了containermin,创建容器的时候必须设置request的值,如果没有设置,则使用defaultrequest,如果没有defaultrequest,则默认等于容器的limit值,如果limit也没有,启动就会报错

  1. defaultrequestdefaultlimit则是默认值,注意:pod级别没有这两项设置

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!