k8s~为pod增加节点的资源约束
CPU单位
CPU资源以CPU中心数为单位进行衡量的。在Kubernetes中,一个CPU相当于:
1 AWS vCPU
1 GCP Core
1 Azure vCore
一个超线程(在运用超线程的裸金属Intel处理器上)
恳求0.5 CPU的容器所保证的CPU核数是恳求节点上的1个CPU的一半。你能够用后缀m表明milli。例如100m CPU
、100millicpu``和0.1 CPU
都是相同的。精度不允许超越1m。
不指定CPU约束
假如没有为容器指定CPU约束,则会呈现以下状况之一:
* 容器对它能够运用的CPU资源没有上限。容器能够运用它运转的节点上可用的一切CPU资源。
* 容器在具有默许CPU约束的命名空间中运转,容器会主动分配默许约束。集群办理员能够运用LimitRange指定CPU约束的默许值。
CPU恳求和约束的意图
经过装备集群中运转的CPU恳求和容器的约束,能够有用地运用集群节点上可用的CPU资源。经过将Pod的CPU恳求保持在较低的水平,能够很好地调度Pod。将CPU约束设置为大于CPU恳求,你能够完结两件事:
- Pod能够运用CPU资源进行突发活动。
- 在突发活动期间,Pod能够运用的CPU资源数量被约束在某个合理的数量内。
在 Kubernetes 中,能够经过设置 CPU 和内存的约束来操控每个 Pod 或容器的资源运用。这样能够保证资源的合理分配,防止某些运用占用过多资源而影响整个集群的安稳性。
1. 装备 CPU 和内存的 Limit
在 Kubernetes 的 Pod 或 Deployment 界说中,能够经过 resources
字段来设置 CPU 和内存的恳求(requests)和约束(limits)。以下是一个示例 YAML 文件:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: my-container
image: my-image:latest
resources:
requests:
memory: 512Mi # 恳求的内存量
cpu: 500m # 恳求的 CPU 中心数
limits:
memory: 1Gi # 约束的内存量
cpu: 1 # 约束的 CPU 中心数
2. 字段解说
- requests:表明容器启动时所需的最低资源量。Kubernetes 会依据这些恳求来调度 Pod。
- limits:表明容器能够运用的最大资源量。假如容器超越了这个约束,Kubernetes 会采纳办法,例如约束 CPU 运用或停止容器。
3. 单位阐明
-
CPU:
- 能够用整数表明中心数(例如
1
表明一个中心)。 - 也能够用毫中心(m)表明,如
500m
表明半个中心。
- 能够用整数表明中心数(例如
-
Memory:
- 能够运用字节(B)、千字节(Ki)、兆字节(Mi)、吉字节(Gi)等单位。例如:
512Mi
表明 512 兆字节。
- 能够运用字节(B)、千字节(Ki)、兆字节(Mi)、吉字节(Gi)等单位。例如:
4. 示例运用
以下是一个更杂乱的 Deployment 示例,包括多个容器的资源装备:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app-container
image: my-app-image:latest
resources:
requests:
memory: 256Mi
cpu: 250m
limits:
memory: 512Mi
cpu: 1
- name: sidecar-container
image: my-sidecar-image:latest
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "500m"
5. 注意事项
- 合理装备:依据运用的实践需求合理装备资源恳求和约束,防止过高或过低的设置。
- 监控与调整:运用监控东西(如 Prometheus、Grafana)调查 Pod 的资源运用状况,并依据需要进行调整。
- 测验与验证:在出产环境前进行充沛的测验,以保证装备能够满意性能需求。
经过以上装备,你能够有用办理 Kubernetes 中的 CPU 和内存资源,保证运用的安稳运转。