预备知识
在Kubernetes中,资源配额(Resource
Quota)是一种机制,用于限制命名空间中的资源使用量。通过资源配额,可以限制Pod、CPU、内存、存储等资源的使用量,以防止资源过度使用或滥用。
资源配额的详细解释及用法如下:
资源配额的解释:
创建资源配额的方法:
kubectl create quota
命令可以创建资源配额。kubectl create -f
命令将其应用到Kubernetes集群中。资源配额的规格:
spec.hard
字段定义了资源配额的限制,可以设置Pod的数量、CPU的使用量、内存的使用量、存储的使用量等。spec.hard.pods
字段可以设置Pod的最大数量,spec.hard.cpu
字段可以设置CPU的最大使用量,spec.hard.memory
字段可以设置内存的最大使用量,spec.hard.persistentvolumeclaims
字段可以设置存储卷的最大使用量。应用资源配额的方法:
kubectl apply -f
命令将其应用到Kubernetes集群中。kubectl create quota
命令创建资源配额,并指定命名空间和资源配额的规格。查看资源配额的方法:
kubectl describe quota
命令可以查看资源配额的详细信息。kubectl get quota
命令可以查看资源配额的摘要信息。示例:
下面是一个资源配额的示例YAML文件:
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-example
spec:
hard:
pods: "10"
cpu: "4"
memory: 4Gi
persistentvolumeclaims: "5"
该资源配额将限制命名空间中的Pod数量不超过10个,CPU使用量不超过4个单位,内存使用量不超过4GiB,PVC不超过5。
使用kubectl命令将资源配额应用到命名空间中:
kubectl apply -f my-quota.yaml -n <namespace>
其中,
是要应用资源配额的命名空间。
kubectl describe quota/my-quota -n <namespace>
其中,
是资源配额所在的命名空间。
通过资源配额,可以限制命名空间中的Pod数量、CPU使用量、内存使用量、存储使用量等。请注意,资源配额只对新创建的资源对象生效,对于已经存在的资源对象不会进行限制。如果已经存在的资源对象超出了资源配额的限制,将不会被驱逐,但是新的资源对象创建可能会被拒绝。
Pod资源配额(Pod Resource
Quota)是一种Kubernetes机制,用于限制命名空间中Pod的资源使用量。它可以限制Pod的数量、CPU的使用量、内存的使用量、存储的使用量等,以防止资源过度使用或滥用。
Pod资源配额的用法如下:
apiVersion: v1
kind: ResourceQuota
metadata:
name: pod-quota
spec:
hard:
pods: "10"
cpu: "4"
memory: 4Gi
storage: 100Gi
在上述示例中,定义了一个名为pod-quota
的Pod资源配额,限制了该命名空间中的Pod数量不超过10个,CPU使用量不超过4个单位,内存使用量不超过4GiB,存储使用量不超过100GiB。
kubectl apply -f pod-quota.yaml -n <namespace>
其中,
是要应用Pod资源配额的命名空间。
kubectl describe quota/pod-quota -n <namespace>
其中,
是Pod资源配额所在的命名空间。
通过Pod资源配额,可以限制命名空间中Pod的数量、CPU使用量、内存使用量、存储使用量等。请注意,Pod资源配额只对新创建的Pod生效,对于已经存在的Pod不会进行限制。如果已经存在的Pod超出了资源配额的限制,将不会被驱逐,但是新的Pod创建可能会被拒绝。
cat > quota.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: frontend
labels:
name: frontend
spec:
containers:
- name: app
image: nginx
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "100m"
EOF
kubectl create -f quota.yml
kubectl describe -f quota.yml | grep -A 5 Limits
kubectl delete -f quota.yml
下面是每一句命令的详细解释:
1. `cat > quota.yml <<EOF`:这是一个Linux命令,用于将后续的输入重定向到一个文件。在这里,它将输入重定向到名为`quota.yml`的文件。
2. `apiVersion: v1`:这是YAML文件的第一行,指定了Kubernetes API的版本。
3. `kind: Pod`:这行指定了要创建的资源类型是Pod。
4. `metadata:`:这行表示下面的内容是关于Pod的元数据,如名称和标签。
5. `name: frontend`:这行指定了Pod的名称为`frontend`。
6. `labels:`:这行表示下面的内容是关于Pod的标签。
7. `name: frontend`:这行指定了Pod的标签为`frontend`。
8. `spec:`:这行表示下面的内容是关于Pod规格的定义。
9. `containers:`:这行表示下面的内容是关于容器的定义。
10. `- name: app`:这行指定了容器的名称为`app`。
11. `image: nginx`:这行指定了容器使用的镜像为`nginx`。
12. `imagePullPolicy: IfNotPresent`:这行指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。
13. `resources:`:这行表示下面的内容是关于容器资源的定义。
14. `requests:`:这行表示下面的内容是关于容器资源请求的定义。
15. `memory: "64Mi"`:这行指定了容器的内存请求为64MiB。
16. `cpu: "100m"`:这行指定了容器的CPU请求为100毫核。
17. `limits:`:这行表示下面的内容是关于容器资源限制的定义。
18. `memory: "128Mi"`:这行指定了容器的内存限制为128MiB。
19. `cpu: "100m"`:这行指定了容器的CPU限制为100毫核。
20. `EOF`:这是一个Linux命令,用于结束输入重定向。
21. `kubectl create -f quota.yml`:这个命令使用kubectl工具将上述YAML文件中定义的Pod创建到Kubernetes集群中。
22. `kubectl describe -f quota.yml | grep -A 5 Limits`:这个命令使用kubectl工具描述指定的Pod,并通过grep命令过滤出与资源限制相关的信息。
23. `kubectl delete -f quota.yml`:这个命令使用kubectl工具将上述YAML文件中定义的Pod从Kubernetes集群中删除。
Namespace资源配额(Namespace Resource
Quota)是一种Kubernetes机制,用于限制命名空间中的资源使用量。它可以限制命名空间中的Pod数量、CPU使用量、内存使用量、存储使用量等,以防止资源过度使用或滥用。
创建Namespace资源配额的方法如下:
apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
spec:
hard:
pods: "10"
cpu: "4"
memory: 4Gi
storage: 100Gi
在上述示例中,定义了一个名为namespace-quota
的Namespace资源配额,限制了该命名空间中的Pod数量不超过10个,CPU使用量不超过4个单位,内存使用量不超过4GiB,存储使用量不超过100GiB。
kubectl apply -f namespace-quota.yaml -n <namespace>
其中,
是要应用Namespace资源配额的命名空间。
kubectl describe quota/namespace-quota -n <namespace>
其中,
是Namespace资源配额所在的命名空间。
通过Namespace资源配额,可以限制命名空间中的Pod数量、CPU使用量、内存使用量、存储使用量等。请注意,Namespace资源配额只对新创建的资源对象生效,对于已经存在的资源对象不会进行限制。如果已经存在的资源对象超出了资源配额的限制,将不会被驱逐,但是新的资源对象创建可能会被拒绝。
kubectl create namespace test
cat > nmquota.yml <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
name: myquota
namespace: test
spec:
hard:
pods: "1"
requests.cpu: "1"
requests.memory: "1"
limits.cpu: "2"
limits.memory: "2Gi"
EOF
kubectl create -f nmquota.yml
cat > nmpod.yml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: frontend
namespace: test
spec:
containers:
- name: app
image: nginx
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "64Mi"
cpu: "15000m"
limits:
memory: "128Mi"
cpu: "15000m"
EOF
kubectl create -f nmpod.yml
以下是每个命令的详细解释:
1. `kubectl create namespace test`:这个命令用于创建名为`test`的命名空间。
2. `cat > nmquota.yml <<EOF`:这是一个Linux命令,用于将后续的输入重定向到一个文件。在这里,它将输入重定向到名为`nmquota.yml`的文件。
3. `apiVersion: v1`:这是YAML文件的第一行,指定了Kubernetes API的版本。
4. `kind: ResourceQuota`:这行指定了要创建的资源类型是ResourceQuota。
5. `metadata:`:这行表示下面的内容是关于ResourceQuota的元数据,如名称和命名空间。
6. `name: myquota`:这行指定了ResourceQuota的名称为`myquota`。
7. `namespace: test`:这行指定了ResourceQuota所属的命名空间为`test`。
8. `spec:`:这行表示下面的内容是关于ResourceQuota规格的定义。
9. `hard:`:这行表示下面的内容是关于ResourceQuota的硬限制定义。
10. `pods: "1"`:这行指定了该命名空间中最多可以创建1个Pod。
11. `requests.cpu: "1"`:这行指定了该命名空间中所有Pod的CPU请求之和不能超过1核。
12. `requests.memory: "1"`:这行指定了该命名空间中所有Pod的内存请求之和不能超过1字节。
13. `limits.cpu: "2"`:这行指定了该命名空间中所有Pod的CPU限制之和不能超过2核。
14. `limits.memory: "2Gi"`:这行指定了该命名空间中所有Pod的内存限制之和不能超过2GiB。
15. `EOF`:这是一个Linux命令,用于结束输入重定向。
16. `kubectl create -f nmquota.yml`:这个命令使用kubectl工具将上述YAML文件中定义的ResourceQuota创建到Kubernetes集群中。
17. `cat > nmpod.yml <<EOF`:这是一个Linux命令,用于将后续的输入重定向到一个文件。在这里,它将输入重定向到名为`nmpod.yml`的文件。
18. `apiVersion: v1`:这是YAML文件的第一行,指定了Kubernetes API的版本。
19. `kind: Pod`:这行指定了要创建的资源类型是Pod。
20. `metadata:`:这行表示下面的内容是关于Pod的元数据,如名称和命名空间。
21. `name: frontend`:这行指定了Pod的名称为`frontend`。
22. `namespace: test`:这行指定了Pod所属的命名空间为`test`。
23. `spec:`:这行表示下面的内容是关于Pod规格的定义。
24. `containers:`:这行表示下面的内容是关于容器的定义。
25. `- name: app`:这行指定了容器的名称为`app`。
26. `image: nginx`:这行指定了容器使用的镜像为`nginx`。
27. `imagePullPolicy: IfNotPresent`:这行指定了镜像拉取策略,如果本地已经存在该镜像,则不再拉取。
28. `resources:`:这行表示下面的内容是关于容器资源的定义。
29. `requests:`:这行表示下面的内容是关于容器资源请求的定义。
30. `memory: "64Mi"`:这行指定了容器的内存请求为64MiB。
31. `cpu: "15000m"`:这行指定了容器的CPU请求为15000毫核。
32. `limits:`:这行表示下面的内容是关于容器资源限制的定义。
33. `memory: "128Mi"`:这行指定了容器的内存限制为128MiB。
34. `cpu: "15000m"`:这行指定了容器的CPU限制为15000毫核。
35. `EOF`:这是一个Linux命令,用于结束输入重定向。
36. `kubectl create -f nmpod.yml`:这个命令使用kubectl工具将上述YAML文件中定义的Pod创建到Kubernetes集群中。
以上是今天要讲的内容,学到了资源配额:Pod资源配额,namespace资源配额。