美文网首页
kubernetes限制pod的cpu和内存

kubernetes限制pod的cpu和内存

作者: 殷临风 | 来源:发表于2017-07-30 01:19 被阅读5620次

    默认的情况下, k8s不会限制podcpu内存的, 也就是只要pod内应用需要, 完全可以占满宿主机的cpu和内存, 如果是这种情况, 当有大量的服务一起部署时, 相互之间是会相互影响的, 所以k8s也有相应的办法限制pod及里面容器的cpu和内存

    准备工作
    # 创建namespace xxx
    kubectl create namespace xxx
    
    # 下载官方提供的示例文件
    wget https://k8s.io/docs/tasks/configure-pod-container/limits.yaml
    
    # 内容如下
    ##############################
    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mylimits
    spec:
      limits:
      - max:
          cpu: "2"
          memory: 1Gi
        min:
          cpu: 200m
          memory: 6Mi
        type: Pod
    
      - default:
          cpu: 300m
          memory: 200Mi
        defaultRequest:
          cpu: 200m
          memory: 100Mi
        max:
          cpu: "2"
          memory: 1Gi
        min:
          cpu: 100m
          memory: 3Mi
        type: Container
    ##############################
    

    Pod相关限制

    cpu最大限制2核, 最小200MHZ
    内存最大限制1G, 最小6M
    

    Container相关限制

    cpu最大限制2核, 最小200MHZ
    内存最大限制1G, 最小6M
    
    默认启动cpu最大限制300MHZ, 内存最大限制200M
    
    创建指定namespace资源限制
    kubectl create -f limits.yaml -n xxx
    # 查看创建好的资源限制
    kubectl get limits -n xxx
    

    之后在这个namespace下创建的Pod容器都遵循这个规则

    在创建容器的配置文件中指定
    spec:
      containers:
      - image: gcr.io/google_containers/serve_hostname
        imagePullPolicy: Always
        name: kubernetes-serve-hostname
        resources:
          limits:
            cpu: "1"
            memory: 512Mi
          requests:
            cpu: "1"
            memory: 512Mi
    

    如果按照这个规范, 相关的容器会限制在这个范围内

    如果两者都配置?

    有些时候, 我们大部分容器遵循一个规则就好, 但有一小部分有特殊需求, 这个时候, 小部分的就需要单独在容器的配置文件中指定. 这里有一点要注意的是, 单独在容器中配置的参数是不能大于指定的k8s资源限制, 否则会报错, 容器无法启动

    PS: 对于一些java项目, 必须设置java虚拟机的参数, 而且这个参数不能大于容器设置的限定值, 否则容器会因为内存过大不停的重启

    相关参考: https://kubernetes.io/docs/tasks/administer-cluster/cpu-memory-limit/

    相关文章

      网友评论

          本文标题:kubernetes限制pod的cpu和内存

          本文链接:https://www.haomeiwen.com/subject/vshhlxtx.html