3、Pod使用进阶
Pod使用进阶
目录
[toc]
1、Pod 资源配置
实际上上面几个步骤就是影响一个 Pod 生命周期的大的部分,但是还有一些细节也会在 Pod 的启动过程进行设置,比如在容器启动之前还会为当前的容器设置分配的 CPU、内存等资源。我们知道我们可以通过 CGroup 来对容器的资源进行限制,同样的,在 Pod 中我们也可以直接配置某个容器的使用的 CPU 或者内存的上限。那么 Pod 是如何来使用和控制这些资源的分配的呢?
首先对于 CPU,我们知道计算机里 CPU 的资源是按**“时间片”**
的方式来进行分配的,系统里的每一个操作都需要 CPU 的处理,所以,哪个任务要是申请的 CPU 时间片越多,那 么它得到的 CPU 资源就越多,这个很容器理解。
CPU 资源是以 CPU 单位度量的,Kubernetes 中的而一个 CPU 等同于:
- 1 个 AWS vCPU
- 1 个 GCP 核心
- 1 个 Azure vCore
- 裸机上具有超线程能力的英特尔处理器上的 1 个超线程
小数值也是可以使用的,一个请求 0.5 CPU 的容器会获得请求 1 个 CPU 的容器的 CPU 的一半。我们也可以使用后缀m 表示毫,例如 100m CPU、 100 milliCPU 和 0.1 CPU 都相同,需要注意精度不能超过 1m。
然后还需要了解下 CGroup 里面对于 CPU 资源的单位换算:
100m CPU、 100 milliCPU 和 0.1 CPU 都相同
1 CPU = 1000 millicpu(1 Core = 1000m)
0.5 CPU = 500 millicpu (0.5 Core = 500m)
CPU 请求只能使用绝对数量,而不是相对数量。0.1 在单核、双核或 48 核计算机上的 CPU 数量值是一样的。
Kubernetes 集群中的每一个节点可以通过操作系统的命令来确认本节点的 CPU 内核数量,然后将这个数量乘以 1000,得到的就是节点总 CPU 总毫数。比如一个节点有四核,那么该节点的 CPU 总毫量为 4000m,如果你要使用一半的 CPU,则你要求的是 4000 * 0.5 = 2000m 。在 Pod 里面我们可以通过下面的两个参数来限制和请求 CPU 资源:
- spec.containers[].resources.limits.cpu:CPU 上限值,可以短暂超过,容器也不会被停止
- spec.containers[].resources.requests.cpu:CPU 请求值,Kubernetes 调度算法里的依据值,可以超过
这里需要明白的是,如果 resources.requests.cpu 设置的值大于集群里每个节点的最大可用 CPU 核心数,那么这个Pod 将无法调度,因为没有节点能满足它。
到这里应该明白了,requests 是用于集群调度使用的资源,而 limits 才是真正的用于资源限制的配置。如果你需要保证的你应用优先级很高,也就是资源吃紧的情况下最后再杀掉你的 Pod,那么可以将 requests 和 limits 的值设置成一致,在后面服务质量章节的时候会具体讲解。
注意:并不会实际吃掉这么多资源的:
💘 实战:pod资源限制-2022.12.11(成功测试)
- 实验环境
1、win10,vmwrokstation虚机;
2、k8s集群:3台centos7.6 1810虚机,2个master节点,1个node节点
k8s version:v1.20
CONTAINER-RUNTIME:containerd:v1.6.10
-
实验软件(无)
-
比如,现在我们定义一个 Pod,给容器的配置如下的资源:
vim pod-resource-demo1.yaml
# pod-resource-demo1.yaml
apiVersion: v1
kind: Pod
metadata:
name: resource-demo1
spec:
containers:
- name: resource-demo1
image: nginx
ports:
- containerPort: 80
resources: #这个是给调度器使用的;
requests:
memory: 50Mi
cpu: 50m
limits:
memory: 100Mi
cpu: 100m