网站建设都包括哪些wordpress 4.0 打开慢
文章目录
- 1. 资源调度
 - 1.1 准备工作
 - 1.2 为什么需要 request 和 limit
 - 1.3 内存限制
 - 1.3.1 Brustable
 - 1.3.2 Guaranteed
 - 1.3.3 BestEffort
 - 1.3.4 当容器申请的资源超出 limit 和 request
 
- 1.4 CPU限制
 
1. 资源调度
1.1 准备工作
-  
Kubernetes 采用 request 和 limit 两种限制类型来对资源进行分配。
request(资源需求):即运行 Pod 的节点必须满足运行 Pod 的最基本需求才能运行 Pod 。
limit(资源限额):即运行 Pod 期间,可能内存使用量会增加,那最多能使用多少内存,这就是资源限额。 -  
资源类型:
- CPU 的单位是核心数,内存的单位是字节。 
- 一个容器申请 0.5 个CPU,就相当于申请 1 个CPU的一半,你也可以加个后缀 m 表示千分之一的概念。比如说 100m 的CPU,100豪 的 CPU 和 0.1 个 CPU 都是一样的。
 
 - memory 内存单位: 
- K、M、G、T、P、E #通常是以1000为换算标准的。
 - Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。
 
 - ephemeral-storage: 临时存储
 - extended-resource:gpu
 
 - CPU 的单位是核心数,内存的单位是字节。 
 
1.2 为什么需要 request 和 limit
-  
三类 QoS 及适应场景
- Guaranteed 敏感型、需要保障的业务
 - Burstable 次敏感型、需要弹性的业务
 - BestEffort 可容忍型业务
 
 -  
不同的 QoS 对调度的影响
- 调度器使用 request 进行调度
 - CPU 按照 request 划分权重
 - memory 划分 OOMScore
 - BestEffort 会被优先驱离
 
 
1.3 内存限制
官方文档:任务 | 配置 Pods 和容器 | 为容器和 Pod 分配内存资源
1.3.1 Brustable
- 创建 Pod
 
- 该 Pod 中的容器会申请 200M 的内容,并且内存最基本需求是50 MiB,最大不能超过 100MiB
 - 上下文冲突了,所以,在生效时一定会失败
 
[root@k8s-1 ~]# vim memory-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: memory-demo
spec:containers:- name: memory-demoimage: stressargs:- --vm- "1"- --vm-bytes- 200Mresources:requests:memory: 50Milimits:memory: 100Mi
 
- 生效后,发现 Pod 处于失败的状态
 
[root@k8s-1 ~]# kubectl apply -f memory-pod.yaml 
pod/memory-demo created
[root@k8s-1 ~]# kubectl get pod
 

- 查看 Pod 的状态,发现该 Pod 的 QoS 为 Brustable(弹性业务)
 
[root@k8s-1 ~]# kubectl describe pod memory-demo 
......
QoS Class:                   Burstable
......
 

- 查看 Pod 的运行日志
 
kubectl logs memory-demo
 

- 创建 Pod
 
- 该 Pod 限制最少需要 200豪 CPU 和 50MiB 内存,最多不能超过 1 个 CPU 和 100MiB 内存
 
[root@k8s-1 ~]# vim memory-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: memory-demo
spec:containers:- name: memory-demoimage: nginx#args:#- --vm#- "1"#- --vm-bytes#- 200Mresources:requests:cpu: 200mmemory: 50Milimits:cpu: 1memory: 100Mi
 
- 生效后,Pod 正常运行
 
[root@k8s-1 ~]# kubectl apply -f memory-pod.yaml 
pod/memory-demo created
[root@k8s-1 ~]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          15s
 
- 查看 Pod 的状态,发现它的 QoS 为 Brustable
 
[root@k8s-1 ~]# kubectl describe pod memory-demo 
 

1.3.2 Guaranteed
- 当运行重要业务时,使用 Guaranteed
 
- 创建 Pod
 
- 将该 Pod 的资源限制 limit 和 request 设置成一样的
 
[root@k8s-1 ~]# vim memory-pod.yaml 
 

- 生效后,查看 Pod 的运行状态和状态信息
 
- 发现 Pod 的 QoS 是 Guaranteed(敏感型、需要保障的业务)

 
1.3.3 BestEffort
- 创建 Pod
 
- limit 和 request 都不设置
 
[root@k8s-1 ~]# vim memory-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: memory-demo
spec:containers:- name: memory-demoimage: nginx#args:#- --vm#- "1"#- --vm-bytes#- 200M#resources:#  requests:#    cpu: 200m#    memory: 50Mi#  limits:#    cpu: 1#    memory: 100Mi
 
- 生效后,查看 Pod 的运行状态和状态信息
 
- 发现 Pod 的 QoS 为 BestEffort(可容忍型业务
) - 当资源不够时,为保证集群节点的运行状态,会驱离该 Pod,因为 BestEffort 的优先级很低
 
[root@k8s-1 ~]# kubectl get pod
NAME          READY   STATUS    RESTARTS   AGE
memory-demo   1/1     Running   0          16s
 
[root@k8s-1 ~]# kubectl describe pod memory-demo 
 

1.3.4 当容器申请的资源超出 limit 和 request
- 创建 Pod
 
- 该 Pod 申请 1G 的内存资源,但是限制其最多最少只能使用 500M 内存
 - 所以,在生效后,这个 Pod 一定是失败的
 
[root@k8s-1 ~]# vim memory-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: memory-demo
spec:containers:- name: memory-demoimage: stressargs:- --vm- "1"- --vm-bytes- 1Gi				//和 Guaranteed 不同的是,该 Pod 申请了资源。resources:requests:memory: 500Milimits:memory: 500Mi
 
- 生效后,发现 Pod 失败
 

1.4 CPU限制
官方文档: 任务 | 配置 Pods 和容器 | 为容器和 Pod 分配 CPU 资源
- 先查看主机的 CPU 信息
 
- 当前主机是 2 个 核
 
[root@k8s-1 ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             2
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 94
Model name:            Intel Core Processor (Skylake, IBRS)
Stepping:              3
CPU MHz:               2304.000
BogoMIPS:              4608.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
L3 cache:              16384K
NUMA node0 CPU(s):     0,1
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 arat umip spec_ctrl intel_stibp arch_capabilities
 
- 创建 Pod
 
- 该 Pod 申请 2 个 CPU,资源限制最少 5 个 CPU,最多不能超过 10 个 CPU
 
[root@k8s-1 ~]# cp memory-pod.yaml cpu.yaml
[root@k8s-1 ~]# vim cpu.yaml 
apiVersion: v1
kind: Pod
metadata:name: cpu-demo
spec:containers:- name: cpu-demoimage: stressresources:limits:cpu: "10"requests:cpu: "5"args:- -c- "2"
 
- 生效后,查看 Pod 运行状态和状态信息
 
- 发现 Pod 处于 Pending 状态
 - 调度器主要查看的是 request 的限制,request 设置最少不能低于 5 个 CPU,但是主机只有 2 个CPU,所以,调度失败
 
[root@k8s-1 ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
cpu-demo   0/1     Pending   0          5s
 
- 该 Pod 也一直被 kubelet 重启,但是,发现集群的 3 个节点都无法提高 5 个 CPU ,所以,Pod 自始至终都是 Pending 的状态
 
[root@k8s-1 ~]# kubectl describe pod cpu-demo 
 

