先创建一个命令空间,我们在命名空间里面指定资源限制
# cat limit-namespaces.yaml
apiVersion: v1
kind: Namespace
metadata:
name: limit-namespace
创建命名空间
kubectl create -f limit-namespaces.yaml
查看命名空间是否创建完成
# kubectl get namespace limit-namespace
NAME STATUS AGE
limit-namespace Active 29m
以下是一个LimitRange对象的配置文件。该配置指定了默认的内存请求与默认的内存限额。我们选择的是对limit-namespace空间里面的进行资源限制
# cat limitRange.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: limiti-range-test
namespace: limit-namespace
spec:
limits:
- default:
memory: 1Gi
defaultRequest:
memory: 512Mi
type: Container
下面通过例子来解释default 和defaultRequest分别代表什么
# cat nginx-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-limit-test
namespace: limit-namespace
spec:
containers:
- name: nginx-limit-test
image: nginx:1.14.2
输出显示该Pod的容器的内存请求值是512MiB,内存限额值是1Gi。这些是由LimitRange指定的默认值。
# kubectl describe pods -n limit-namespace nginx-limit-test
...
Ready: True
Restart Count: 0
Limits:
memory: 1Gi
Requests:
memory: 512Mi
Environment: <none>
...
我们通过上面的例子可以看出来: default 是limit的限制 defaultRequest 是默认的request的请求
我们只做了他的limits限制
# cat nginx-test-limit.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-limit-test-2
namespace: limit-namespace
spec:
containers:
- name: nginx-limit-test
image: nginx:1.14.2
resources:
limits:
memory: 2Gi
输出显示该Pod的容器的内存请求值是2Gi,内存限额值是2Gi。
# kubectl describe pods -n limit-namespace nginx-limit-test-2
Restart Count: 0
Limits:
memory: 2Gi
Requests:
memory: 2Gi
Environment: <none>
输出显示该容器的内存请求值与它的限额值相等。 注意该容器并未被赋予默认的内存请求值512Mi。
# cat nginx-test-request.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-limit-test-3
namespace: limit-namespace
spec:
containers:
- name: nginx-limit-test
image: nginx:1.14.2
resources:
requests:
memory: 256Mi
测试结果如下:
# kubectl describe -n limit-namespace pods nginx-limit-test-3
Ready: True
Restart Count: 0
Limits:
memory: 1Gi
Requests:
memory: 256Mi
Environment: <none>
所以说如果我们单存的只限制了一个request,limit会继承我们默认设置的那个
创建的yaml文件如下,我们故意把request的值比limit大,看会发生什么
# cat nginx-test-request.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-limit-test-3
namespace: limit-namespace
spec:
containers:
- name: nginx-limit-test
image: nginx:1.14.2
resources:
requests:
memory: 2Gi
创建pod报错如下
# kubectl create -f nginx-test-request.yaml
The Pod "nginx-limit-test-3" is invalid: spec.containers[0].resources.requests: Invalid value: "2Gi": must be less than or equal to memory limit
提示request的值必须小于limit的值.