温馨提示×

centos k8s部署怎样进行资源调度

小樊
52
2025-11-01 21:27:48
栏目: 智能运维

CentOS上Kubernetes资源调度的实施步骤与策略

一、基础环境准备

在CentOS上部署Kubernetes集群前,需完成以下系统级配置:

  • 系统更新与工具安装:运行yum update -y更新系统;安装必要工具包(如dockerkubeletkubeadmkubectl)。
  • 服务配置调整:关闭防火墙(systemctl stop firewalld && systemctl disable firewalld)和SELinux(setenforce 0);配置静态网络(避免DHCP导致节点IP变动)。
  • Kubernetes组件部署:添加Kubernetes官方YUM源,安装kubeletkubeadmkubectl;初始化Master节点(kubeadm init),配置kubectlmkdir -p $HOME/.kube; sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config)。
  • 网络插件安装:部署Pod网络插件(如Calicokubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml或Flannelkubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml),确保Pod间通信正常。

二、核心资源调度策略

资源调度是Kubernetes集群高效运行的关键,需结合资源限制调度规则优化机制综合配置:

1. 资源请求与限制(Requests/Limits)
  • 定义requests是容器启动的最小资源量(调度器据此选择节点);limits是容器可使用的最大资源量(超限时会被OOMKilled或限速)。
  • 作用:避免资源争用,确保关键应用获得足够资源。
  • 示例
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"
    
2. 服务质量(QoS)分级

Kubernetes根据requestslimits的设置,将Pod分为三个QoS等级:

  • Guaranteed(高优先级):requests == limits(如requests.cpu="500m", limits.cpu="500m"),适用于关键业务(如数据库)。
  • Burstable(中优先级):requests < limits(如requests.cpu="250m", limits.cpu="500m"),适用于普通应用(如Web服务)。
  • BestEffort(低优先级):未设置requests/limits,适用于批处理任务(如日志收集),资源不足时会被优先驱逐。
3. 调度规则配置
  • 定向调度
    • nodeName:强制将Pod调度到指定节点(如nodeName: node1),适用于节点有特殊硬件(如GPU)的场景。
    • nodeSelector:通过节点标签匹配调度(如nodeSelector: {disktype: ssd}),需提前为节点添加标签(kubectl label nodes node1 disktype=ssd)。
  • 亲和性与反亲和性
    • nodeAffinity:基于节点标签的复杂调度(如requiredDuringSchedulingIgnoredDuringExecution表示必须满足条件;preferredDuringSchedulingIgnoredDuringExecution表示优先满足)。
    • podAffinity:将相关Pod调度到同一节点(如topologyKey: kubernetes.io/hostname),提升应用访问速度(如Redis主从部署在同一节点)。
    • podAntiAffinity:将相关Pod调度到不同节点(如topologyKey: zone),提升容灾能力(如避免同一应用的多个Pod同时故障)。
  • 污点与容忍(Taints/Tolerations)
    • 污点:标记节点特殊属性(如kubectl taint nodes node1 key=value:NoSchedule),普通Pod无法调度到该节点。
    • 容忍:Pod通过tolerations声明可容忍的污点(如tolerations: [{key: "key", operator: "Equal", value: "value", effect: "NoSchedule"}]),适用于专用节点(如GPU节点)。
4. 资源拓扑感知调度
  • CPU Manager:开启CPU Manager(在kubelet配置中设置--cpu-manager-policy=static),为需要独占CPU的Pod(如高性能计算应用)分配独占CPU核心,减少CPU争用。
  • Topology Spread Constraints:通过topologySpreadConstraints字段实现Pod跨拓扑域(如节点、机架、可用区)均匀分布(如maxSkew: 1表示最多允许1个Pod的差异;topologyKey: zone表示按可用区分发),提升集群容错性。
5. 动态资源管理
  • Horizontal Pod Autoscaler(HPA):根据CPU/内存利用率自动扩缩Pod数量(如kubectl autoscale deployment my-deployment --cpu-percent=80 --min=2 --max=10),应对流量波动。
  • GPU资源管理:安装NVIDIA设备插件(kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml),支持GPU资源调度(如resources: {nvidia.com/gpu: 1})。

三、资源配额与限制

  • ResourceQuota:限制命名空间内资源总量(如Pod数量、CPU、内存),避免单个命名空间占用过多集群资源。示例:
    apiVersion: v1
    kind: ResourceQuota
    metadata:
      name: resource-test
    spec:
      hard:
        pods: "50"
        requests.cpu: "1"
        requests.memory: "1Gi"
        limits.cpu: "2"
        limits.memory: "2Gi"
    
  • LimitRange:为未指定requests/limits的Pod设置默认值(如default: {cpu: "500m", memory: "128Mi"}),确保资源使用的规范性。

四、监控与优化

  • 监控工具:使用Prometheus+Grafana监控集群资源使用情况(如CPU、内存、Pod状态),及时发现资源瓶颈。
  • 内核与etcd优化:调整内核参数(如增大文件句柄上限ulimit -n 65536)、配置高可用etcd集群(如3节点etcd),提升调度器性能。

通过以上步骤和策略,可在CentOS上实现Kubernetes集群的高效资源调度,确保应用稳定运行和资源合理利用。

0