网站建设公司怎么做好,电子商务网站设计怎么做,wordpress卡死,手机搭建电脑做的网站文章目录 1. 资源调度1.1 准备工作1.2 为什么需要 request 和 limit1.3 内存限制1.3.1 Brustable1.3.2 Guaranteed1.3.3 BestEffort1.3.4 当容器申请的资源超出 limit 和 request 1.4 CPU限制 1. 资源调度
1.1 准备工作 Kubernetes 采用 request 和 limit 两种限制类型来对资源… 文章目录 1. 资源调度1.1 准备工作1.2 为什么需要 request 和 limit1.3 内存限制1.3.1 Brustable1.3.2 Guaranteed1.3.3 BestEffort1.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 的CPU100豪 的 CPU 和 0.1 个 CPU 都是一样的。 memory 内存单位 K、M、G、T、P、E #通常是以1000为换算标准的。Ki、Mi、Gi、Ti、Pi、Ei #通常是以1024为换算标准的。 ephemeral-storage: 临时存储extended-resourcegpu
1.2 为什么需要 request 和 limit 三类 QoS 及适应场景 Guaranteed 敏感型、需要保障的业务Burstable 次敏感型、需要弹性的业务BestEffort 可容忍型业务 不同的 QoS 对调度的影响 调度器使用 request 进行调度CPU 按照 request 划分权重memory 划分 OOMScoreBestEffort 会被优先驱离
1.3 内存限制
官方文档任务 | 配置 Pods 和容器 | 为容器和 Pod 分配内存资源
1.3.1 Brustable
创建 Pod
该 Pod 中的容器会申请 200M 的内容并且内存最基本需求是50 MiB最大不能超过 100MiB上下文冲突了所以在生效时一定会失败
[rootk8s-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 处于失败的状态
[rootk8s-1 ~]# kubectl apply -f memory-pod.yaml
pod/memory-demo created
[rootk8s-1 ~]# kubectl get pod查看 Pod 的状态发现该 Pod 的 QoS 为 Brustable弹性业务
[rootk8s-1 ~]# kubectl describe pod memory-demo
......
QoS Class: Burstable
......查看 Pod 的运行日志
kubectl logs memory-demo创建 Pod
该 Pod 限制最少需要 200豪 CPU 和 50MiB 内存最多不能超过 1 个 CPU 和 100MiB 内存
[rootk8s-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 正常运行
[rootk8s-1 ~]# kubectl apply -f memory-pod.yaml
pod/memory-demo created
[rootk8s-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 1/1 Running 0 15s查看 Pod 的状态发现它的 QoS 为 Brustable
[rootk8s-1 ~]# kubectl describe pod memory-demo 1.3.2 Guaranteed
当运行重要业务时使用 Guaranteed
创建 Pod
将该 Pod 的资源限制 limit 和 request 设置成一样的
[rootk8s-1 ~]# vim memory-pod.yaml 生效后查看 Pod 的运行状态和状态信息
发现 Pod 的 QoS 是 Guaranteed敏感型、需要保障的业务
1.3.3 BestEffort
创建 Pod
limit 和 request 都不设置
[rootk8s-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 的优先级很低
[rootk8s-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
memory-demo 1/1 Running 0 16s[rootk8s-1 ~]# kubectl describe pod memory-demo 1.3.4 当容器申请的资源超出 limit 和 request
创建 Pod
该 Pod 申请 1G 的内存资源但是限制其最多最少只能使用 500M 内存所以在生效后这个 Pod 一定是失败的
[rootk8s-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 个 核
[rootk8s-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
[rootk8s-1 ~]# cp memory-pod.yaml cpu.yaml
[rootk8s-1 ~]# vim cpu.yaml
apiVersion: v1
kind: Pod
metadata:name: cpu-demo
spec:containers:- name: cpu-demoimage: stressresources:limits:cpu: 10requests:cpu: 5args:- -c- 2生效后查看 Pod 运行状态和状态信息
发现 Pod 处于 Pending 状态调度器主要查看的是 request 的限制request 设置最少不能低于 5 个 CPU但是主机只有 2 个CPU所以调度失败
[rootk8s-1 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
cpu-demo 0/1 Pending 0 5s该 Pod 也一直被 kubelet 重启但是发现集群的 3 个节点都无法提高 5 个 CPU 所以Pod 自始至终都是 Pending 的状态
[rootk8s-1 ~]# kubectl describe pod cpu-demo