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

Kubernetes 配置 POD 资源配额(七)_nginx

分配超过节点的资源情况

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

Kubernetes 配置 POD 资源配额(七)_Pod_02