阅读量:2
CentOS 下 Kubernetes 资源分配实践指南
一 核心概念与 QoS
- 资源模型:为每个容器设置requests(调度所需的最小资源)与limits(允许使用的最大资源),调度器依据 requests 选择节点,kubelet 依据 limits 做运行时约束。CPU 为可压缩资源,内存为不可压缩资源。
- QoS 等级:
- Guaranteed:CPU 与内存的 requests 与 limits 均设置且相等,节点资源紧张时最不易被驱逐。
- Burstable:至少有一种资源设置了 requests(常见为 CPU 或内存),稳定性与弹性介于 Guaranteed 与 BestEffort 之间。
- BestEffort:未设置任何 requests/limits,资源紧张时优先被驱逐。
- 建议:生产关键负载尽量使用 Guaranteed;通用服务使用 Burstable 并合理设置 requests;批处理/尽力而为任务可用 BestEffort。
二 在 Pod 与容器上设置资源
- 最小可用示例(为容器设置 requests/limits,避免无约束导致节点资源被抢占):
apiVersion: v1
kind: Pod
metadata:
name: demo
spec:
containers:
- name: app
image: nginx:1.25
resources:
requests:
cpu: "250m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"
- 命名空间默认与约束(避免“漏配”与资源滥用):
# 默认请求/限制(未显式设置时使用)
apiVersion: v1
kind: LimitRange
metadata:
name: default-lr
namespace: default
spec:
limits:
- default:
cpu: "200m"
memory: "256Mi"
defaultRequest:
cpu: "100m"
memory: "128Mi"
type: Container
# 命名空间总配额(防止团队/项目超额)
apiVersion: v1
kind: ResourceQuota
metadata:
name: ns-quota
namespace: default
spec:
hard:
pods: "20"
requests.cpu: "4"
requests.memory: "8Gi"
limits.cpu: "8"
limits.memory: "16Gi"
- 验证命令:
- 查看节点资源与已分配量:
kubectl describe node - 查看命名空间配额:
kubectl get resourcequota -n-o yaml - 查看 Pod 资源字段:
kubectl get pod-o yaml
- 查看节点资源与已分配量:
三 调度与拓扑优化
- 节点亲和/反亲和(将负载调度到更合适的节点,或避免单点拥塞):
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disk
operator: In
values: ["ssd"]
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values: ["nginx"]
topologyKey: kubernetes.io/hostname
- 拓扑分布约束(如 maxSkew)可进一步提升容错与资源分布均衡。
- 建议:对延迟敏感服务优先选择高性能磁盘/网卡节点;有状态服务通过反亲和分散到不同节点。
四 弹性伸缩与集群规模
- Pod 水平伸缩(HPA,基于指标自动扩缩副本数):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-nginx
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
- 集群自动扩缩(Cluster Autoscaler):当节点资源不足时自动新增节点,需与云厂商或本地扩容器集成。
- 前提:部署 Metrics Server,否则
kubectl top与 HPA 指标不可用。
五 监控 容量规划与 GPU 特殊资源
- 监控与告警:部署 Prometheus + Grafana 观测节点/Pod 的 CPU、内存、网络、磁盘 IO;结合日志(如 EFK/ELK)定位异常。
- 容量规划与驱逐阈值:
- 节点可分配资源 = 节点总资源 − 系统预留(kube-reserved、system-reserved、eviction-threshold)。
- 合理设置 kubelet 的 eviction-hard/memory.available、cpu.cfs_quota_period 等,避免节点 OOM 与抖动。
- 定期用
kubectl top nodes与kubectl describe node校准 requests/limits 与实际使用。
- GPU 等特殊资源:
- 部署 NVIDIA Device Plugin 后,可在 Pod 中按扩展资源申请:
resources.limits: { nvidia.com/gpu: "1" }。 - 结合节点污点与容忍度(Taints/Tolerations)实现 GPU 专属节点池。
- 部署 NVIDIA Device Plugin 后,可在 Pod 中按扩展资源申请:
以上就是关于“centos下k8s资源如何分配”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm