首页主机资讯centos k8s资源分配

centos k8s资源分配

时间2025-11-18 11:07:04发布访客分类主机资讯浏览648
导读:CentOS 上 Kubernetes 资源分配实操指南 一 前置条件与系统优化 关闭 Swap:临时执行 swapoff -a,并在 /etc/fstab 中注释 swap 行;内核参数设置 vm.swappiness=0,避免影响 k...

CentOS 上 Kubernetes 资源分配实操指南

一 前置条件与系统优化

  • 关闭 Swap:临时执行 swapoff -a,并在 /etc/fstab 中注释 swap 行;内核参数设置 vm.swappiness=0,避免影响 kubelet 调度与 OOM 行为。
  • 关闭或放行安全组件:常见做法是 systemctl disable --now firewalldSELinux 可设为 SELINUX=permissivedisabled(生产请评估安全策略)。
  • 内核网络参数:启用桥接流量进入 iptables/IP6tables
    • modprobe br_netfilter
    • 写入 /etc/sysctl.d/k8s.conf
      • net.bridge.bridge-nf-call-iptables = 1
      • net.bridge.bridge-nf-call-ip6tables = 1
    • 执行 sysctl -p /etc/sysctl.d/k8s.conf 生效。
  • 时钟同步:建议启用 chronytimedatectl set-ntp true,避免证书校验与调度异常。
  • 容器运行时与 kubelet:安装 Docker CEcontainerd,部署 kubelet/kubeadm/kubectl,并 systemctl enable --now kubelet
  • 初始化与网络:
    • kubeadm init --pod-network-cidr=10.244.0.0/16(示例使用 Flannel
    • 安装网络插件:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • 配置 kubectl:mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config & & sudo chown $(id -u):$(id -g) $HOME/.kube/config
      以上为在 CentOS 上开展资源分配的必要基础环境。

二 核心机制与关键概念

  • 资源请求与限制
    • requests:调度依据,保证容器至少获得指定资源。
    • limits:运行上限,超限会被限流或终止(内存 OOMKilled)。
    • 建议为所有容器显式设置 requests/limits,避免“无请求”导致调度不均与资源抢占。
  • QoS 等级(由 requests/limits 推导)
    • Guaranteed:requests == limits(CPU/内存均设且相等),关键业务优先保障。
    • Burstable:仅部分资源设限或 requests < limits。
    • BestEffort:未设任何 requests/limits,最易被驱逐。
  • 命名空间配额与 LimitRange
    • ResourceQuota:限制命名空间总资源(如 requests.cpurequests.memorylimits.cpulimits.memory)。
    • LimitRange:为 Namespace 内对象设置默认/最小/最大 requests/limits,防止“漏配”。
  • 调度与拓扑感知
    • nodeSelector / nodeAffinity / podAffinity / podAntiAffinity:定向与亲和/反亲和调度,提升稳定性与资源隔离。
    • 拓扑分散:如 podTopologySpreadConstraints,均衡分布关键服务副本。
  • 自动扩缩容
    • HPA:基于 CPU/内存或自定义指标 自动增减副本数。
    • VPA(可选):基于历史使用自动建议/更新 requests/limits(通常与滚动更新配合)。
  • 设备与专用资源
    • GPU/NPU:通过设备插件暴露为扩展资源(如 nvidia.com/gpu),在 Pod 中以 limits 申请。
  • 动态资源分配 DRA
    • DRA(Dynamic Resource Allocation) 仍处于演进阶段,面向更灵活的外设/专用资源分配,生产落地需评估特性成熟度与集群版本支持。

三 配置示例

    1. 容器资源请求与限制(Pod/Deployment 通用)
apiVersion: v1
kind: Pod
metadata:
  name: app
spec:
  containers:
  - name: app
    image: nginx:1.25
    resources:
      requests:
        memory: "128Mi"
        cpu: "250m"
      limits:
        memory: "256Mi"
        cpu: "500m"

要点:为所有容器设置 requests/limits;CPU 为可压缩资源,内存为不可压缩资源,OOM 风险更高。

    1. 命名空间配额(ResourceQuota)
apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-a-quota
  namespace: team-a
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "8"
    limits.memory: "16Gi"
    1. HPA 基于 CPU 利用率扩缩容
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: app-hpa
  namespace: team-a
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: app
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
    1. GPU 资源申请(NVIDIA)
apiVersion: v1
kind: Pod
metadata:
  name: gpu-demo
spec:
  containers:
  - name: cuda
    image: nvidia/cuda:12.2.0-base
    resources:
      limits:
        nvidia.com/gpu: 1   # 申请 1 张 GPU

前置:部署 NVIDIA Device Plugin(如 kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.13.0/nvidia-device-plugin.yml)。

四 容量规划与调优建议

  • 节点容量与系统预留
    • 预留 kube-reserved / system-reserved(CPU/内存),避免系统组件与内核 OOM 竞争;为 kubelet 设置 --eviction-threshold--eviction-hard(如内存压力阈值)。
    • 控制 DaemonSet(如日志、监控、网络插件)资源,计入节点可分配资源基线。
  • 请求与限制的设定方法
    • 以压测/线上观测为依据,requests 取“常态稳定需求”,limits 取“峰值并留有余量”;避免将 limits 设置过低导致频繁限流或 OOM。
  • 调度策略
    • 关键服务使用 podAntiAffinity 分散到不同节点;有状态/数据密集服务优先绑定高性能节点(nodeAffinity)。
  • 弹性与成本
    • 常态流量用 HPA 水平扩展;季节性/大促活动可结合 VPA 做“右-sizing”,并配合灰度/金丝雀发布降低风险。
  • 监控与持续优化
    • 建立 Prometheus + Grafana 监控,关注节点 Allocatable/Allocated、Pod OOMKilled/Throttled、HPA 触发与扩缩容时延;定期复盘配额与请求/限制。
  • 设备资源管理
    • GPU 等专用资源按卡粒度申请与隔离,结合节点标签与污点/容忍度实现队列化与共享策略。

五 常用验证与排障命令

  • 查看节点资源与可分配量:kubectl describe node < node-name> (关注 Capacity/Allocatable/Allocations 与污点/条件)。
  • 查看集群资源使用:kubectl top nodes / kubectl top pods -A
  • 检查 Pod 事件与状态:kubectl describe pod < pod-name> -n < ns> (排查 OOMKilled/FailedScheduling/Throttled)。
  • 验证配额与限制生效:kubectl get resourcequota -n < ns> -o yamlkubectl get limitrange -n < ns> -o yaml
  • 快速校验 HPA:kubectl get hpa < hpa-name> -n < ns> ,观察指标与副本变化。

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


若转载请注明出处: centos k8s资源分配
本文地址: https://pptw.com/jishu/749924.html
centos k8s API使用 centos k8s插件开发

游客 回复需填写必要信息