在CentOS上部署Kubernetes集群前,需完成以下系统级配置:
yum update -y更新系统;安装必要工具包(如docker、kubelet、kubeadm、kubectl)。systemctl stop firewalld && systemctl disable firewalld)和SELinux(setenforce 0);配置静态网络(避免DHCP导致节点IP变动)。kubelet、kubeadm、kubectl;初始化Master节点(kubeadm init),配置kubectl(mkdir -p $HOME/.kube; sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config)。kubectl 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集群高效运行的关键,需结合资源限制、调度规则和优化机制综合配置:
requests是容器启动的最小资源量(调度器据此选择节点);limits是容器可使用的最大资源量(超限时会被OOMKilled或限速)。resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Kubernetes根据requests和limits的设置,将Pod分为三个QoS等级:
requests == limits(如requests.cpu="500m", limits.cpu="500m"),适用于关键业务(如数据库)。requests < limits(如requests.cpu="250m", limits.cpu="500m"),适用于普通应用(如Web服务)。requests/limits,适用于批处理任务(如日志收集),资源不足时会被优先驱逐。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同时故障)。kubectl taint nodes node1 key=value:NoSchedule),普通Pod无法调度到该节点。tolerations声明可容忍的污点(如tolerations: [{key: "key", operator: "Equal", value: "value", effect: "NoSchedule"}]),适用于专用节点(如GPU节点)。kubelet配置中设置--cpu-manager-policy=static),为需要独占CPU的Pod(如高性能计算应用)分配独占CPU核心,减少CPU争用。topologySpreadConstraints字段实现Pod跨拓扑域(如节点、机架、可用区)均匀分布(如maxSkew: 1表示最多允许1个Pod的差异;topologyKey: zone表示按可用区分发),提升集群容错性。kubectl autoscale deployment my-deployment --cpu-percent=80 --min=2 --max=10),应对流量波动。kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml),支持GPU资源调度(如resources: {nvidia.com/gpu: 1})。apiVersion: v1
kind: ResourceQuota
metadata:
name: resource-test
spec:
hard:
pods: "50"
requests.cpu: "1"
requests.memory: "1Gi"
limits.cpu: "2"
limits.memory: "2Gi"
requests/limits的Pod设置默认值(如default: {cpu: "500m", memory: "128Mi"}),确保资源使用的规范性。ulimit -n 65536)、配置高可用etcd集群(如3节点etcd),提升调度器性能。通过以上步骤和策略,可在CentOS上实现Kubernetes集群的高效资源调度,确保应用稳定运行和资源合理利用。