一、基于命名空间的资源限制¶
通常情况下,出于稳定性和安全性考虑,应该对每个 Namespace 不受控制的资源进行限制,比如 Pod 和 ReplicaSet,防止异常创建导致集群故障。
1.1 环境准备¶
创建测试应用
[root@k8s-master01 ]# kubectl create deploy test-01 --image=registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.14.2
验证,观察到已创建成功
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
test-01-584fc4ff48-75wnv 1/1 Running 0 31s
1.2 演示不配命名空间限制的危害¶
1、在 Pod 内设置内核参数
[root@k8s-master01 ]# kubectl edit deploy test-01
...
...
# 在第46行内容添加如下内容
46 securityContext:
47 sysctls:
48 - name: net.core.somaxconn
49 value: "1024"
...
...
2、设置完成后,一直会创建pod,如果不加阻止,会让集群出现卡死现象
[root@k8s-master01 ~]# kgp | grep test-01 | wc -l
215
3、复原环境
[root@k8s-master01 ]# kubectl edit deploy test-01
...
...
# 删除如下内容
46 securityContext:
47 sysctls:
48 - name: net.core.somaxconn
49 value: "1024"
...
...
删除多余生成的pod
[root@k8s-master01 ~]# k delete po -l app=test-01
[root@k8s-master01 ~]# kgp
NAME READY STATUS RESTARTS AGE
test-01-584fc4ff48-b54p7 1/1 Running 0 41s
1.3 演示配命名空间限制¶
1、给default命名空间添加命名空间限制
[root@k8s-master01 ~]# vim default-resourcequota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: default-quota
spec:
hard:
count/pods: "100"
count/replicasets.apps: 200
相关参数说明:
- count/pods: 限制当前命名空间内的pod总数
- count/replicasets.apps:限制当前命名空间内 rs的总数
2、应用
[root@k8s-master01 ~]# kaf default-resourcequota.yaml
查看resourcequota
[root@k8s-master01 ~]# kg resourcequota
NAME AGE REQUEST LIMIT
default-quota 3m15s count/pods: 1/100, count/replicasets.apps: 2/200
3、在 Pod 内设置内核参数
[root@k8s-master01 ]# kubectl edit deploy test-01
...
...
# 在第46行内容添加如下内容
46 securityContext:
47 sysctls:
48 - name: net.core.somaxconn
49 value: "1024"
...
...
4、设置完成后,一直会创建pod,观察到最多只能创建100
[root@k8s-master01 ~]# kg resourcequota
NAME AGE REQUEST LIMIT
default-quota 5m3s count/pods: 100/100, count/replicasets.apps: 2/200
5、复原环境
[root@k8s-master01 ]# kubectl delete deploy test-01