Pod 容器资源配额
配置容器配额
容器中的进程会占用宿主机的资源,如 CPU,内存占用,如果在生产环境不对某些容器做资源限制,那么可能会吃掉宿主机大量的资源,导致其他的容器无法正常运行,对于这种情况 kubernetes 提供了对 cpu 和内存的配额机制
[root@k8s-master ~]# kubectl explain pod.spec.containers.resources
KIND: Pod
VERSION: v1
RESOURCE: resources <Object>
FIELDS:
limits <map[string]string> //最大限制
requests <map[string]string> //最小限制
limits: 用于限制运行时容器的最大占用资源,当容器占用的资源超过limits设置时,就会被终止,并进行重启
requests: 用于设置容器的最小资源,如果环境资源不够,容器无法启动imits是最多给容器分多少资源,requests 是最少给容器分多少资源,如果 request 最小的资源节点还不能供给,那么容器将无法启动,如果容器使用的资源超过了 limits,容器将会被终止并进行重启目前 pod 资源只能对容使用的CPU、内存资源进行配额限制 cpu 的单位为 core 数,可以为整数和小数内存的单位是 Gi、Mi、G、M等形式
配置节点充足的资源给容器
1.编写 yaml 文件
apiVersion: v1
kind: Pod
metadata:
name: pod-resources
namespace: dev
labels:
app: base
spec:
containers:
- name: nginx-port
image: nginx:1.18
resources: #定义资源配置
limits: #最大资源限制
cpu: "2" #cpu限制在2核
memory: "10Gi" #内存限制在10G
requests: #最小资源限制
cpu: "1" #cpu限制在1核
memory: "10Mi" #内存限制在10M
2.创建pod
[root@k8s-master ~]# kubectl create -f pod-resources.yaml
pod/pod-resources created
3.查看pod是否创建成功
[root@k8s-master ~]# kubectl get pod/pod-resources -n dev
NAME READY STATUS RESTARTS AGE
pod-resources 1/1 Running 0 2m54s
4.查看资源限制是否生效
[root@k8s-master ~]# kubectl describe pod/pod-resources -n dev
分配超过节点的资源情况
1.修改最小限制为10G,即至少分配给容器10G内存
[root@k8s-master ~]# vim pod-resources.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-resources
namespace: dev
labels:
app: base
spec:
containers:
- name: nginx-port
image: nginx:1.18
resources:
limits:
cpu: "2"
memory: "10Gi"
requests:
cpu: "1"
memory: "10Gi" #最少分配给容器10G内存
2.创建资源
[root@k8s-master ~]# kubectl apply -f pod-resources.yaml
pod/pod-resources created
3.已经是启动不起来了
[root@k8s-master ~]# kubectl get pod/pod-resources -n dev
NAME READY STATUS RESTARTS AGE
pod-resources 0/1 Pending 0 66s
#内存设置的过高也会出现OutOfmemory
[root@k8s-master ~]# kubectl get pod/pod-resources -n dev
NAME READY STATUS RESTARTS AGE
pod-resources 0/1 OutOfmemory 0 7s
4.查看详细输出信息
[root@k8s-master ~]# kubectl describe pod/pod-resources -n dev