网站建设预算方案,手机程序编程,泗洪企业网站建设,网页设计主页和子页怎么做资源配置范围管理#xff1a;LimitRange 在默认情况下#xff0c;Kubernetes不会对Pod加CPU和内存的限制#xff0c;这意味着Kubernetes系统中的任何Pod都可以使用其节点的所有可用的CPU和内存。 如果一个机器的Pod特别多#xff0c;我们又不愿意为每个Pod都配置上… 资源配置范围管理LimitRange 在默认情况下Kubernetes不会对Pod加CPU和内存的限制这意味着Kubernetes系统中的任何Pod都可以使用其节点的所有可用的CPU和内存。 如果一个机器的Pod特别多我们又不愿意为每个Pod都配置上Requests和Limits我们可以对集群内Requests和Limits的配置做一个全局限制常见的配置场景如下 1.集群中的诶个节点都有2GB内存集群管理员不希望任何Pod申请超过2GB的内存可以在系统管理功能中设置禁止Pod申请超过2GB内存。 2.集群由同一个组织中的两个团队共享分别为生产环境和开发环境。生产环境最多可以使用8GB诶存而开发环境最多可以使用512MB内存。集群管理员希望通过为这两个环境创建不同的namespace并为每个namespace都设置不同的限制来满足这个要求。 3.用户创建Pod时使用的资源可能会刚好比整个机器的上限稍小而恰好剩余的资源大小又不足以分配其他的Pod这样就显得有点浪费集群管理员希望将每个Pod都设置为必须至少使用集群平均值CPU和内存的20%这样集群就能够提供更好的资源一致性调度从而减少资源浪费。 下面我们举例说明 1.创建一个名为limit-example的Namespace
[rootk8s-master ~]# kubectl create namespace limit-example
namespace/limit-example created
[rootk8s-master ~]# kubectl get namespaces
NAME STATUS AGE
default Active 23d
kube-node-lease Active 23d
kube-public Active 23d
kube-system Active 23d
limit-example Active 7s2.为命名空间设置LimitRange
#1.创建limits.yaml文件
[rootk8s-master limit-example]# cat limits.yaml
apiVersion: v1
kind: LimitRange
metadata:name: mylimits
spec:limits:- max:cpu: 4memory: 2Gimin: cpu: 200mmemory: 6MimaxLimitRequestRatio:cpu: 3memory: 2type: Pod- default:cpu: 300mmemory: 200MidefaultRequest:cpu: 200mmemory: 100Mimax:cpu: 2memory: 1Gimin: cpu: 100mmemory: 3MimaxLimitRequestRatio:cpu: 5memory: 4type: Container
#2.创建该LimitRange
[rootk8s-master limit-example]# kubectl create -f limits.yaml --namespacelimit-example
#3.查看limit-example中的LimitRange
[rootk8s-master limit-example]# kubectl describe limits --namespacelimit-example
Name: mylimits
Namespace: limit- example
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
Pod cpu 200m 4 - - 3
Pod memory 6Mi 2Gi - - 2
Container cpu 100m 2 200m 300m 5
Container memory 3Mi 1Gi lOOMi 200Mi 4(1).不论是CPU还是内存在LimitRange中Pod和Container都可以设置Min、Max和Max Limit/Requests Ratio参数。Container还可以设置Default Request和Default Limit参数而Pod不能设置Default Request和Default Limit 参数。 (2).对Pod和Container的参数解释如下: Container的Min(100m和3Mi)是Pod中所有容器的Requests值下限 Container的Max(上面的2和lGi)是Pod中所有容器的Limits值上限 Container的Default Request(上面的200m和100Mi)是Pod中所有未指定Requests值的容器的默认Requests值 Container的Default Limit(上面的300m和200Mi)是Pod中所有未指定Limits值的容器的默认Limits值。 对于同一资源类型这4个参数必须满足以下关系Min≤Default Request≤Default Limit≤Max。 Pod的Min(上面的200m和6Mi)是Pod中所有容器的Requests值的总和下限 Pod的Max(上面的4和2Gi)是Pod中所有容器的Limits值的总和上限。 容器未指定Requests值或者Limits值时将使用Container的Default Request值或者Default Limit值。 Container的Max Limit/Requests Ratio(上面的5和4)限制了Pod中所有容器的Limits值与Requests值的比例上限 而Pod的Max Limit/Requests Ratio(上面的3和2)限制了Pod中所有容器的Limits值总和与Requests值总和的比例上限。 (3).如果设置了Container的Max那么对于该类资源而言整个集群中的所有容器都必须设置Limits否则无法成功创建。Pod内的容器未配置Limits时将使用Default Limit额值上面的300m CPU和200MiB内存如果也未配置Default则无法成功创建。
(4).如果设置了Container的Min,那么对于该类资源而言整个集群中的所有容器都必须设置Requests。如果创建Pod的容器时未配置该类资源的Requests,那么在创建过程中会报验证错误。Pod里容器的Requests在未配置时可以使用默认值defaultRequest(本例中的200m CPU 和100MiB内存)如果未配置而且没有使用默认值defaultRequest,那么默认等千该容器的Limits如果容器的Limits也未定义就会报错。
(5).对于任意一个Pod而言该Pod中所有容器的Requests总和都必须大于或等于6MiB而且所有容器的Limits总和都必须小于或等于lGiB;同样所有容器的CPURequests总和都必须大于或等于200m,而且所有容器的CPU Limits总和都必须小于或等于2 。
(6).Pod里任何容器的Limits与Requests的比例都不能超过Container的Max Limit/Requests Ratio;Pod里所有容器的Limits总和与Requests总和的比例都不能超过Pod的Max Limit/Requests Ratio。 3.创建Pod时触发LimitRange限制 我们来举例说明LimitRange生效时对容器的资源限制效果 命名空间中的LimitRange只会在Pod创建或者更新时执行检查 。 如果手动修改LimitRange为一个新的值那么这个新的值不会去检查或限制之前已经在该命名空间中创建好的Pod 如果在创建Pod时配置的资源值(CPU或者内存超出了LimitRange的限制那么该创建过程会报错在错误信息中会说明详细的错误原因。 我们现在先创建一个pod
[rootk8s-master limit-example]#kubectl run nginx --imagenginx --replicasl --namespacelimit-example
deployment nginx created 查看已创建的pod信息
[rootk8s-master limit-example]#kubectl get pods -- namespacelimit-example
[rootk8s-master limit-example]#kubectl get pods nginx- 2040093540-sBvzu --namespacel imi t-example -o yaml |grep resources -C 8resourceVersion : 57 selfLink: /api/vl/namespaces/limit-example/pods/nginx-2040093540-ivimuuid: 67b20 741 - f53b-lle5-b066 - 64510658e388
spec:containers:- image: nginximagePull Policy: Alwaysname: nginxresources:limiys:cpu: 300mmemory: 200Mirequests:cpu: 200mmemory: lOOMiterminationMessagePath: /dev/termination-logvolumeMouns: 由于该Pod未配置资源Requests和Limits, 所以使用了namespace limit-example中的默认CPU和内存定义的Requests和Limits值 我们在创建一个超出资源限制的Pod
[rootk8s-master limit-example]#cat invalid-pod.yaml:
apiVersion: v1
kind: Pod
metadata:name: invalid-pod
spec:containers:- name: kubernetes-serve-hostnameimage: gcr.io/google_containers/serve_hostnameresources:limits:cpu: 3 memory: 100Mi 创建该Pod, 可以看到系统报错并且提供的错误原因为超过资源限制 kubectl create -f invalid-pod.yaml --namespacelimit-example
Error from server:error when creating invalid-pod.yaml: Pod invalid-pod is forbidden: [Maximum cpu usage per Pod is 2 , but limit is 3,Maximum cpu usage per Container is 2 , but limit is 3.]