作者介绍:简历上没有一个精通的运维工程师。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
在Docker里面是是可以通过cgroup来限制容器的资源占用,并且是通过docker run 然后添加限制参数来实现的,但是k8s并没有直接这样的参数,它又是通过什么方式来限制呢?
在k8s的资源里面给我们添加request和limit2个配置,通过配置这个2个配置来实现资源的限制。
在 Kubernetes 配置文件中,requests
和 limits
是与资源管理相关的两个重要概念,它们都在 spec
部分的 containers
字段下定义。这两个设置用于控制 Pod 中容器可以使用的资源量,通常指的是 CPU 和内存资源。
以下是 requests
和 limits
在容器配置中的示例用法:
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi" # 请求内存:64 MiB
cpu: "250m" # 请求 CPU:250 毫核 (0.25 核)
limits:
memory: "128Mi" # 内存限制:128 MiB
cpu: "500m" # CPU 限制:500 毫核 (0.5 核)
requests
:定义了容器启动时最小的资源需求量。memory: "64Mi"
:此容器在创建时,至少需要 64MiB 的内存才能运行。cpu: "250m"
:此容器在创建时,至少需要 0.25 CPU 核心的处理能力。在 Kubernetes 中,1 CPU 等于云供应商的 1 vCPU/Core 或者物理 CPU 的 1 核心。limits
:定义了容器运行过程中可以使用的资源上限。memory: "128Mi"
:此容器可以使用的内存上限是 128MiB。如果容器尝试使用超过此限制的内存,它可能会被 OOMKilled(内存不足杀掉)。cpu: "500m"
:此容器可以使用的 CPU 处理能力上限是 0.5 核心。如果容器尝试使用更多的 CPU,它的 CPU 使用将会被限制,在必要时会被节流(降低 CPU 使用率),但是它不会被杀死。#通过这个命令可以看才服务器可用资源
#这里显示了当前节点的总资源和可用资源
[root@master01 ~]# kubectl describe node node01 |grep Capacity -A13
Capacity:
cpu: 2
ephemeral-storage: 19442Mi
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 3901352Ki
pods: 110
Allocatable:
cpu: 2
ephemeral-storage: 18347773103
hugepages-1Gi: 0
hugepages-2Mi: 0
memory: 3798952Ki
pods: 110