CentOS上Kubernetes资源分配的关键策略与实践
在CentOS环境中部署Kubernetes(K8s)时,资源分配的核心目标是平衡资源利用率与业务稳定性,既要避免过度配置导致的成本浪费,又要防止资源不足引发的服务故障。以下是具体的资源分配框架与操作指南:
资源请求(requests)和限制(limits)是K8s资源分配的基石,直接影响Pod的调度与运行稳定性。
resources:
requests:
cpu: "1"
memory: "1Gi"
limits:
cpu: "2"
memory: "2Gi"
requests与limits的关系,K8s自动划分QoS等级,决定资源优先级:
requests == limits):优先级最高,适用于支付、数据库等核心服务,资源严格保障;requests < limits):允许借用闲置资源,适用于Web服务、API接口等普通业务;requests/limits):优先级最低,适用于日志处理、批处理等后台任务,随时可能被驱逐。在多租户或混合业务场景下,需通过集群级机制控制资源分配,避免单个用户/团队占用过多资源。
rq-test命名空间最多运行50个Pod、1核CPU、1Gi内存:apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-test
spec:
hard:
pods: "50"
requests.cpu: "1"
requests.memory: "1Gi"
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: "200Mi"
defaultRequest:
memory: "100Mi"
type: Container
通过自动伸缩机制,让集群根据业务需求动态调整资源,兼顾性能与成本。
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
requests和limits,适配长期运行的Pod资源需求变化(如数据分析任务)。需注意:VPA与HPA不建议同时作用于同一个Pod的CPU/内存资源。通过调度策略,将Pod分配到合适的节点,提高资源利用率与应用性能。
env=prod),确保关键服务运行在高性能节点上;affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: env
operator: In
values:
- prod
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: "kubernetes.io/hostname"
资源分配不是一次性工作,需通过监控持续调整,确保集群高效运行。
requests/limits或Pod副本数;清理未使用的资源(如终止闲置的Pod、删除无用的PVC)。通过以上策略,可在CentOS上构建一个高效、稳定的K8s集群,既能满足业务的动态需求,又能最大化利用资源,降低运营成本。