目录

介绍

创建namespace

创建namespace

使用yaml创建

查看namespace

删除namespace

资源配额限制

pod创建数量限制配额

cpu、内存限制配额

容器资源限制

默认cpu请求、使用限制

默认内存请求、使用限制

设置最小和最大内存限制

设置最小和最大CPU限制


介绍

  namespace用于资源隔离,不同环境下的资源可以放置到同一个集群下不同的namespace下,如dev、qc、uat、qa环境分别使用不同的namespace;还可以对namespace进行资源限制,如最多允许使用cpu、内存、创建多少个pod等。

创建namespace

创建namespace

# kubectl create namespace test1

# kubectl get namespace |grep test1
test1                                    Active   33m

使用yaml创建

# cat my-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test1

查看namespace

# kubectl get ns

删除namespace

# kubectl delete namespaces test1

删除namespace,其下的所有资源将全部被删除,慎用!

资源配额限制

配额限制,指的是允许此namespace下创建的资源总量不得超过配额额度

pod创建数量限制配额

# cat quota-pod.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-demo
spec:
  hard:
    pods: "2"


创建
# kubectl apply -f quota-pod.yaml -n test1

查看
# kubectl get resourcequota pod-demo -n test1
NAME       AGE   REQUEST     LIMIT
pod-demo   12m   pods: 0/2

yaml查看
# kubectl get resourcequota pod-demo -n test1 --output=yaml

cpu、内存限制配额

# cat quota-mem-cpu.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

创建
# kubectl apply -f quota-mem-cpu.yaml -n test1

查看
# kubectl get resourcequotas -n test1 --output=yaml

# kubectl get resourcequotas -n test1
NAME           AGE    REQUEST                                            LIMIT
mem-cpu-demo   100s   requests.cpu: 500m/1, requests.memory: 512Mi/1Gi   limits.cpu: 1/2, limits.memory: 512Mi/2Gi
  • 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
  • 所有容器的内存请求总额不得超过1 GiB。
  • 所有容器的内存限额总额不得超过2 GiB。
  • 所有容器的CPU请求总额不得超过1 CPU。
  • 所有容器的CPU限额总额不得超过2 CPU。

容器资源限制

默认cpu请求、使用限制

如果创建pod时未指定容器的cpu请求和限制,将使用默认cpu请求限制

# cat cpu-defaults.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-limit-range
spec:
  limits:
  - default:
      cpu: 1
    defaultRequest:
      cpu: 0.5
    type: Container

创建
# kubectl apply -f cpu-defaults.yaml -n test1

查看
# kubectl get limitrange -n test1 --output=yaml

默认内存请求、使用限制

如果创建pod时未指定容器的内存请求和限制,将使用默认内存请求限制

# cat memory-defaults.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:
      memory: 512Mi
    defaultRequest:
      memory: 256Mi
    type: Container

创建
# kubectl apply -f memory-defaults.yaml -n test1


查看
# kubectl get limitrange -n test1 --output=yaml

设置最小和最大内存限制

与默认限制不同的是,这个设置将直接限制你能否创建成功pod,如大于限制或小于请求都将失败

# cat memory-constraints.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: mem-min-max-demo-lr
spec:
  limits:
  - max:
      memory: 1Gi
    min:
      memory: 500Mi
    type: Container


创建
# kubectl apply -f memory-constraints.yaml -n test1

查看
# kubectl get limitranges -n test1 --output=yaml

这里有一点:
如果此配置中没有设置默认请求和限制,则会自动加入,1G
name: mem-min-max-demo-lr
    namespace: test1
  spec:
    limits:
    - default:
        memory: 1Gi
      defaultRequest:
        memory: 1Gi
      max:
        memory: 1Gi
      min:
        memory: 500Mi
      type: Container

注意:

  首先安装本文顺序执行,当执行到此步骤时会出现一个问题,当前给了一个默认值是1G,上面还创建了一个默认值256M和512M的请求和限制策略,那么我现在创建一个pod不指定内存请求和限制,会发生什么情况?

  答案是不成功,你可能会觉得是因为上面的默认值和当前默认值不一致,请求256M达不到1G,其实是不满足min配置的500M;

# kubectl apply -f test-nginx.yaml -n test1

Error from server (Forbidden): error when creating "test-nginx.yaml": pods "constraints-mem-demo-4" is forbidden: minimum memory usage per Container is 500Mi, but request is 256Mi

  如果上面配置了默认值,下面的默认值将不起作用,当然,下面的默认值的产生本身就不是我们的意愿。

设置最小和最大CPU限制

# cat cpu-constraints.yaml 
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-min-max-demo-lr
spec:
  limits:
  - max:
      cpu: "800m"
    min:
      cpu: "200m"
    type: Container

创建
# kubectl apply -f cpu-constraints.yaml -n test1

查看
# kubectl get limitranges -n test1 --output=yaml

与内存一样也会自动创建默认值800m

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐