• 【云原生 | Kubernetes 实战】04、k8s 名称空间和资源配额


    目录

    一、什么是命名空间?

    二、namespace 应用场景

    三、namespacs 使用案例

    四、namespace 资源限额


    一、什么是命名空间?

            Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。

            命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间,例如,可以为 test、devlopment、production环境分别创建各自的命名空间。

    二、namespace 应用场景

            命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。默认在 default 这个命名空间。

    三、namespacs 使用案例

    1. # 创建一个test命名空间。namespace 可以简写为 ns
    2. [root@k8s-master01 pod-yaml]# kubectl create ns test
    3. namespace/test created
    4. # 查看命名空间
    5. [root@k8s-master01 pod-yaml]# kubectl get ns
    6. NAME STATUS AGE
    7. default Active 36d
    8. kube-node-lease Active 36d
    9. kube-public Active 36d
    10. kube-system Active 36d
    11. kubernetes-dashboard Active 36d
    12. test Active 16s

    四、namespace 资源限额

    给 test 这个名称空间做资源限额,即限制 test 名称空间下pod的资源。

    1. #1. 查看帮助命令
    2. [root@k8s-master01 pod-yaml]# kubectl explain resourcequota
    3. [root@k8s-master01 pod-yaml]# kubectl explain resourcequota.metadata
    4. [root@k8s-master01 pod-yaml]# kubectl explain resourcequota.spec
    5. #2. 编写 yaml 文件
    6. [root@k8s-master01 pod-yaml]# vi namespace-quota.yaml
    7. apiVersion: v1
    8. kind: ResourceQuota
    9. metadata:
    10. name: mem-cpu-quota
    11. namespace: test
    12. spec:
    13. hard:
    14. requests.cpu: "2"
    15. requests.memory: 2Gi
    16. limits.cpu: "4"
    17. limits.memory: 4Gi
    18. #3. 创建resourcequotas资源
    19. [root@k8s-master01 pod-yaml]# kubectl get resourcequotas -n test
    20. NAME AGE REQUEST LIMIT
    21. mem-cpu-quota 56s requests.cpu: 0/2, requests.memory: 0/2Gi limits.cpu: 0/4, limits.memory: 0/4Gi

    上面创建的 ResourceQuota 对象将在test名字空间中添加以下限制:

            每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。

    • 所有容器的内存请求总额不得超过 2 GiB。
    • 所有容器的内存限额总额不得超过 4 GiB。
    • 所有容器的CPU请求总额不得超过 2 CPU。
    • 所有容器的CPU限额总额不得超过 4 CPU。 

            ResouceQuota 对象是在我们的名称空间中创建的,并准备好控制该名称空间中的所有容器的总请求和限制。

    接下来我们创建pod的时候也必须设置资源限额(requests、limits 字段),否则创建pod资源失败:

    1. [root@k8s-master01 pod-yaml]# vi pod-test.yaml
    2. apiVersion: v1
    3. kind: Pod
    4. metadata:
    5. name: pod-test
    6. namespace: test
    7. labels:
    8. app: tomcat-pod-test
    9. spec:
    10. containers:
    11. - name: tomcat-test
    12. ports:
    13. - containerPort: 8080
    14. image: tomcat:latest
    15. imagePullPolicy: IfNotPresent
    16. resources:
    17. requests:
    18. memory: "100Mi"
    19. cpu: "500m"
    20. limits:
    21. memory: "2Gi"
    22. cpu: "2"
    23. # 创建pod资源
    24. [root@k8s-master01 pod-yaml]# kubectl apply -f pod-test.yaml
    25. pod/pod-test created
    26. 您在 /var/spool/mail/root 中有新邮件
    27. [root@k8s-master01 pod-yaml]# kubectl get pods -n test
    28. NAME READY STATUS RESTARTS AGE
    29. pod-test 1/1 Running 0 14s
    30. # 查看 test 名称空间的资源情况
    31. [root@k8s-master01 pod-yaml]# kubectl get resourcequotas -n test
    32. NAME AGE REQUEST LIMIT
    33. mem-cpu-quota 45m requests.cpu: 500m/2, requests.memory: 100Mi/2Gi limits.cpu: 2/4, limits.memory: 2Gi/4Gi

            上述 Pod 里的 tomcat-test 容器的请求为 0.5 CPU 和 100 MiB 内存, 该容器的资源限制为 2 CPU 和 2 GB 内存。 你也可以认为该 Pod 的资源请求为 0.5 CPU 和 100 MiB 内存,资源限制为 2 CPU 和 2 GB 内存。 

    如果我们再更改下yaml文件,使其超出设置的资源额度:

    1. [root@k8s-master01 pod-yaml]# vi pod-test.yaml
    2. apiVersion: v1
    3. kind: Pod
    4. metadata:
    5. name: pod-test
    6. namespace: test
    7. labels:
    8. app: tomcat-pod-test
    9. spec:
    10. containers:
    11. - name: tomcat-test
    12. ports:
    13. - containerPort: 8080
    14. image: tomcat:latest
    15. imagePullPolicy: IfNotPresent
    16. resources:
    17. requests:
    18. memory: "100Mi"
    19. cpu: "500m"
    20. limits:
    21. memory: "5Gi"
    22. cpu: "5"
    23. [root@k8s-master01 pod-yaml]# kubectl delete pods -n test pod-test
    24. pod "pod-test" deleted
    25. [root@k8s-master01 pod-yaml]# kubectl get pods -n test
    26. No resources found in test namespace.
    27. 您在 /var/spool/mail/root 中有新邮件
    28. [root@k8s-master01 pod-yaml]# kubectl apply -f pod-test.yaml
    29. Error from server (Forbidden): error when creating "pod-test.yaml": pods "pod-test" is forbidden: exceeded quota: mem-cpu-quota, requested: limits.cpu=5,limits.memory=5Gi, used: limits.cpu=0,limits.memory=0, limited: limits.cpu=4,limits.memory=4Gi

     报错,超出了原来的资源限制(4 cpu,4 GB内存):

     上一篇文章:【云原生 | Kubernetes 实战】03、手把手教你基于YAML文件运行pod应用_Stars.Sky的博客-CSDN博客

    下一篇文章:【云原生 | Kubernetes 实战】05、Pod高级实战:基于污点、容忍度、亲和性的多种调度策略(上)_Stars.Sky的博客-CSDN博客

  • 相关阅读:
    好的架构是进化来的,不是设计来的
    React使用useImperativeHandle实现父组件触发子组件事件
    云原生赋能智能网联汽车消息处理基础框架构建
    信息安全等级保护五个标准步骤(信息安全等级保护基本要求)
    医院电子病历编辑器,EMRE(EMR Editor)源码
    第3讲:MySQL数据库中常见的几种表字段数据类型
    寒假训练——第三周(状压DP)
    CAD快捷键——标注类
    ES6 从入门到精通 # 08:扩展的对象的功能
    解决QT的无界面程序,Ctrl+C无法触发析构函数的问题
  • 原文地址:https://blog.csdn.net/weixin_46560589/article/details/128066511