Ubuntu上Kubernetes资源分配指南
在Ubuntu系统上部署Kubernetes集群时,资源分配是保障应用性能、集群稳定性的核心环节。合理的资源分配需结合请求与限制设置、调度策略、自动扩缩及监控优化等多维度措施,以下是具体实施方案:
资源分配的核心是资源请求(Requests)和资源限制(Limits),二者共同定义了容器的资源边界:
示例配置(YAML):
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
memory: "64Mi"
cpu: "250m" # 0.25核
limits:
memory: "128Mi"
cpu: "500m" # 0.5核
单位说明:
m表示毫核(1核=1000m),如500m=0.5核;Mi=兆字节、Gi=吉字节(推荐使用二进制单位,避免十进制混淆)。requests.cpu: "1", limits.cpu: "1"),适用于关键业务(如数据库),享有最高优先级;requests.cpu: "500m", limits.cpu: "1"),适用于普通应用(如Web服务),平衡性能与资源利用率;gpu=true标签的节点运行AI应用)。示例:spec:
nodeSelector:
gpu: "true" # 仅调度到带有gpu=true标签的节点
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- my-app
topologyKey: "kubernetes.io/hostname" # 不在同一节点运行
kubectl taint nodes node1 key=value:NoSchedule),阻止不兼容的Pod调度;tolerations字段),允许调度到带污点的节点(如特殊应用需要运行在不稳定的节点上)。apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: my-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70 # CPU利用率达到70%时扩容
500mCPU提升至1核),无需修改YAML。需配合kubectl apply -f vpa.yaml部署VPA控制器。通过ResourceQuota限制命名空间的资源总量,防止单个团队/应用占用过多集群资源。示例:
apiVersion: v1
kind: ResourceQuota
metadata:
name: my-quota
namespace: my-namespace
spec:
hard:
requests.cpu: "4" # 命名空间内所有Pod的CPU Requests总和不超过4核
requests.memory: "8Gi" # 内存Requests总和不超过8Gi
limits.cpu: "8" # CPU Limits总和不超过8核
limits.memory: "16Gi" # 内存Limits总和不超过16Gi
pods: "20" # Pod数量不超过20个
作用:
kubectl top命令或Prometheus+Grafana监控集群/节点/Pod的资源使用情况(CPU、内存、磁盘、网络),识别瓶颈(如某Pod内存使用率长期≥90%)。200Mi,可将Requests从128Mi提升至256Mi);通过以上步骤,可在Ubuntu系统上为Kubernetes集群实现精准、动态、安全的资源分配,确保应用性能与集群稳定性的平衡。