首页主机资讯k8s在centos上的资源分配如何

k8s在centos上的资源分配如何

时间2025-09-30 23:22:03发布访客分类主机资讯浏览330
导读:K8s在CentOS上的资源分配实践指南 在CentOS系统上部署Kubernetes(K8s)集群后,资源分配是保障应用性能、集群稳定的核心环节,主要涉及节点资源准备、Pod资源请求与限制、QoS级别划分、调度策略优化及特殊资源(如GPU...

K8s在CentOS上的资源分配实践指南

在CentOS系统上部署Kubernetes(K8s)集群后,资源分配是保障应用性能、集群稳定的核心环节,主要涉及节点资源准备Pod资源请求与限制QoS级别划分调度策略优化特殊资源(如GPU)管理五大维度。

一、节点资源准备:系统级配置

在CentOS节点上部署K8s前,需完成以下基础配置,确保资源分配的基础环境合规:

  • 关闭Swap分区:K8s要求节点禁用Swap以避免内存资源过度占用(Swap会影响Pod的内存限制执行)。执行swapoff -a临时关闭,注释/etc/fstab中的Swap行永久生效。
  • 禁用SELinux:SELinux会限制容器对节点资源的访问,需修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled,并重启系统。
  • 关闭防火墙:避免防火墙拦截K8s组件间的通信(如kubelet与kube-apiserver),执行systemctl stop firewalld & & systemctl disable firewalld
  • 配置静态网络:编辑/etc/sysconfig/network-scripts/ifcfg-ens33(网卡名以实际为准),设置固定IP、网关、DNS,确保节点间网络互通。
  • 安装必要工具:安装Docker(或其他CRI兼容容器运行时,如Containerd)作为容器引擎,安装kubeletkubeadmkubectl用于集群管理。

二、Pod资源分配:核心参数(Requests与Limits)

Pod是K8s资源分配的最小单位,通过requests(请求)和limits(限制)两个参数控制资源使用:

  • requests:容器启动时申请的最小资源量,K8s调度器会优先将Pod调度到“剩余资源≥Pod requests”的节点,确保Pod能获得足够的资源启动。
  • limits:容器运行时允许使用的最大资源量,当容器尝试突破limits时,Kubelet会采取限制措施(如CPU节流)或驱逐Pod(内存超出)。

示例配置(以Nginx Pod为例):

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:alpine
    resources:
      requests:
        memory: "64Mi"   请求64MB内存
        cpu: "250m"      请求0.25核CPU(1核=1000m)
      limits:
        memory: "128Mi"  限制最大128MB内存
        cpu: "500m"      限制最大0.5核CPU

配置原则

  • requests:基于应用实际基准测试的平均资源消耗,略低10%-20%(如应用平均使用350m CPU,设置为300m),避免因requests过高导致节点资源浪费。
  • limits:高于应用峰值资源消耗(如峰值使用800m CPU,设置为1000m),防止应用因突发流量被误杀,同时避免占用过多节点资源。

三、QoS级别:资源优先级划分

K8s根据Pod的requests与limits关系,将Pod划分为三个QoS(服务质量)级别,影响资源紧张时的驱逐顺序:

  • Guaranteedrequests == limits(且CPU为整数,如cpu: "1"),优先级最高,仅在节点资源完全耗尽时才会被驱逐。适用于关键业务(如数据库)。
  • Burstablerequests != limits(或CPU为小数,如cpu: "0.5"),优先级中等,当节点资源紧张时,会优先驱逐Burstable Pod(但高于BestEffort)。适用于大多数普通应用(如Web服务)。
  • BestEffort:未设置requests/limits,优先级最低,当节点资源不足时,会最先被驱逐。适用于无状态、可容忍中断的应用(如测试任务)。

示例

 Guaranteed(requests == limits,且CPU为整数)
resources:
  requests:
    cpu: "1"
    memory: "1Gi"
  limits:
    cpu: "1"
    memory: "1Gi"

 Burstable(requests != limits)
resources:
  requests:
    cpu: "0.5"
    memory: "512Mi"
  limits:
    cpu: "1"
    memory: "1Gi"

 BestEffort(未设置requests/limits)
resources: {
}
    

四、调度策略优化:精准分配资源

K8s调度器通过节点亲和性污点/容忍度拓扑感知调度等策略,实现资源的精准分配:

  • 节点亲和性(Node Affinity):将Pod调度到带有特定标签的节点(如disk=ssd),提升I/O密集型应用的性能。
    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: disk
              operator: In
              values:
              - ssd
    
  • 污点(Taints)与容忍度(Tolerations):通过给节点打污点(如kubectl taint nodes node1 key=value:NoSchedule),限制普通Pod调度到该节点;若Pod需调度到污点节点,需配置对应的容忍度。适用于维护节点(如升级内核)或专用节点(如GPU节点)。
  • 拓扑感知调度(Topology-Aware Scheduling):利用K8s的CPU Manager功能,根据节点的NUMA拓扑结构分配CPU,减少CPU跨NUMA访问的延迟(适用于CPU密集型应用)。需在kubelet配置中启用--cpu-manager-policy=static

五、特殊资源管理:GPU资源分配

若需在CentOS节点上运行GPU应用(如深度学习训练),需安装NVIDIA Device Plugin并配置GPU资源:

  • 安装NVIDIA Device Plugin:通过DaemonSet部署插件,自动发现节点上的GPU设备并注册到K8s集群。
    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.13.0/nvidia-device-plugin.yml
    
  • 配置Pod使用GPU:在Pod的resources.limits中指定GPU数量(如nvidia.com/gpu: 1)。
    resources:
      limits:
        nvidia.com/gpu: 1   请求1个GPU
    

注意:GPU资源为集群级资源,需确保节点有足够的GPU可用(通过kubectl describe node < node-name> 查看GPU总量)。

六、资源监控与调整

资源分配并非一成不变,需通过监控工具(如Prometheus+Granafa)实时观察节点和Pod的资源使用情况(CPU、内存、GPU利用率),并根据业务增长调整requests/limits:

  • 查看节点资源使用kubectl top nodes
  • 查看Pod资源使用kubectl top pods
  • 调整Pod资源:通过kubectl edit pod < pod-name> 修改requests/limits,或使用kubectl patch命令动态调整(如增加CPU请求)。

通过以上步骤,可在CentOS上实现K8s资源的合理分配,保障应用性能与集群稳定性。需根据实际业务场景(如CPU密集型、内存密集型、GPU加速型)调整配置,遵循“基于测量、留有余地”的原则,避免资源浪费或不足。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: k8s在centos上的资源分配如何
本文地址: https://pptw.com/jishu/714926.html
centos k8s更新流程是怎样的 centos k8s故障排查方法有哪些

游客 回复需填写必要信息