跳转到内容

Kubernetes资源模型

来自代码酷
Admin留言 | 贡献2025年5月1日 (四) 22:20的版本 (Page creation by admin bot)

(差异) ←上一版本 | 已核准修订 (差异) | 最后版本 (差异) | 下一版本→ (差异)

Kubernetes资源模型[编辑 | 编辑源代码]

介绍[编辑 | 编辑源代码]

Kubernetes 资源模型是集群中所有可管理实体的抽象表示,它定义了如何描述、分配和监控计算资源(如CPU、内存)以及扩展性资源(如存储卷、网络规则)。资源模型的核心目标是提供一种声明式方法,让用户通过YAML或JSON清单文件声明所需状态,而Kubernetes控制系统负责将当前状态调整为期望状态。

资源模型的关键组件包括:

  • 资源类型:如Pod、Service、Deployment等。
  • 资源规格(Spec):描述资源的期望状态。
  • 资源配额(Quota):限制命名空间级别的资源使用量。
  • 资源请求与限制(Requests/Limits):定义容器对CPU和内存的需求边界。

核心概念[编辑 | 编辑源代码]

1. 资源类型与API对象[编辑 | 编辑源代码]

Kubernetes通过API对象表示资源,每个对象对应一个REST端点。例如:

  • Pod:最小调度单元,包含一个或多个容器。
  • Deployment:管理Pod的副本集和滚动更新。
  • Service:定义Pod的访问策略。

以下是一个Pod资源的YAML示例:

  
apiVersion: v1  
kind: Pod  
metadata:  
  name: nginx-pod  
spec:  
  containers:  
  - name: nginx  
    image: nginx:latest  
    resources:  
      requests:  
        cpu: "500m"  
        memory: "512Mi"  
      limits:  
        cpu: "1"  
        memory: "1Gi"

2. 资源请求与限制[编辑 | 编辑源代码]

Kubernetes使用`requests`和`limits`控制容器资源分配:

  • requests:调度器根据此值选择节点(如请求500m CPU表示0.5个核心)。
  • limits:容器运行时强制执行的硬性上限(如内存超限时容器会被OOMKilled)。

数学表示: requests实际使用limits

3. 资源配额(ResourceQuota)[编辑 | 编辑源代码]

管理员可通过`ResourceQuota`限制命名空间的资源总量:

  
apiVersion: v1  
kind: ResourceQuota  
metadata:  
  name: dev-team-quota  
spec:  
  hard:  
    pods: "10"  
    requests.cpu: "4"  
    requests.memory: 8Gi  
    limits.cpu: "8"  
    limits.memory: 16Gi

实际案例[编辑 | 编辑源代码]

案例1:Web应用资源分配[编辑 | 编辑源代码]

假设一个电商网站需要运行3个Nginx实例,每个实例需要:

  • 请求:0.5 CPU核心 + 512MB内存
  • 限制:1 CPU核心 + 1GB内存

通过Deployment实现:

  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: web-frontend  
spec:  
  replicas: 3  
  template:  
    spec:  
      containers:  
      - name: nginx  
        image: nginx:alpine  
        resources:  
          requests:  
            cpu: "500m"  
            memory: "512Mi"  
          limits:  
            cpu: "1"  
            memory: "1Gi"

案例2:资源监控与自动扩缩[编辑 | 编辑源代码]

结合Horizontal Pod Autoscaler(HPA),当CPU使用率超过70%时自动扩容:

  
kubectl autoscale deployment web-frontend --cpu-percent=70 --min=3 --max=10

高级主题:扩展资源[编辑 | 编辑源代码]

Kubernetes支持自定义资源(如GPU、FPGA),通过`devicePlugins`机制管理。例如声明GPU请求:

  
resources:  
  limits:  
    nvidia.com/gpu: "2"

可视化:资源生命周期[编辑 | 编辑源代码]

graph LR A[用户提交YAML] --> B(API Server验证) B --> C{Scheduler分配节点} C -->|满足requests| D[Kubelet创建容器] D --> E[运行时监控limits] E -->|超限| F[终止或节流]

常见问题[编辑 | 编辑源代码]

  • Q: 不设置limits会怎样?
 A: 容器可能耗尽节点资源,导致"邻居干扰"。  
  • Q: 如何调试OOMKilled?
 A: 检查`kubectl describe pod`中的内存使用量是否超限。  

总结[编辑 | 编辑源代码]

Kubernetes资源模型通过声明式API和资源控制机制,实现了高效的集群资源管理。初学者应从Pod的`requests/limits`开始实践,进阶用户可探索Quota和HPA的联动策略。