zoukankan      html  css  js  c++  java
  • Kubernetes Namespaces

    Kubernetes可以使用Namespaces(命名空间)创建多个虚拟集群。
    大多数Kubernetes资源(例如pod、services、replication controllers或其他)都在某些Namespace中,但Namespace资源本身并不在Namespace中。

    Namespaces创建删除查看

    创建

    (1) 命令行直接创建
    $ kubectl create namespace new-namespace
    
    (2) 通过文件创建
    $ cat my-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: new-namespace
    
    $ kubectl create -f ./my-namespace.yaml
    

    注:命名空间名称满足正则表达式a-z0-9?,最大长度为63位

    删除

    $ kubectl delete namespaces new-namespace
    
    • 删除一个namespace会自动删除所有属于该namespace的资源。
    • default和kube-system命名空间不可删除。
    • PersistentVolumes是不属于任何namespace的,但PersistentVolumeClaim是属于某个特定namespace的。
    • Events是否属于namespace取决于产生events的对象。

    查看 Namespaces

    $ kubectl get namespaces
    NAME          STATUS    AGE
    default       Active    1d
    kube-system   Active    1d
    

    配置Pod配额

    创建命名空间

    $ kubectl create namespace test-pod
    

    创建ResourceTest对象

    test-pod.yaml

    apiVersion: v1
    kind: ResourceTest
    metadata:
      name: test-pod
    spec:
      hard:
        pods: "2"
    

    在test-pod命名空间中创建ResourceTest对象

    $ kubectl create -f test-pod.yaml --namespace=test-pod
    

    查看ResourceQuota对象的详细信息:

    $ kubectl get resourcequota test-pod --namespace=test-pod --output=yaml
    ----------------
    spec:
      hard:
        pods: "2"
    status:
      hard:
        pods: "2"
      used:
        pods: "0"
    

    命令输出显示了这个名字空间的Pod配额是2,由于目前没有Pod运行,所有配额并没有被使用。

    创建deployment对象

    test-pod-deployment.yaml

    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: test-pod
    spec:
      replicas: 3
      template:
        metadata:
          labels:
            purpose: test-pod
        spec:
          containers:
          - name: test-pod
            image: nginx
    

    replicas: 3将令Kubernetes尝试创建3个Pod。
    在test-pod命名空间中创建这个Deployment:

    $ kubectl create -f test-pod-deployment.yaml 
     --namespace=qtest-pod
    

    命令查看Deployment的详细信息:

    $ kubectl get deployment test-pod --namespace=test-pod --output=yaml
    ----------
    spec:
      ...
      replicas: 3
    ...
    status:
      availableReplicas: 2
    ...
    lastUpdateTime: 2017-07-07T20:57:05Z
        message: 'unable to create pods: pods "pod-quota-demo-1650323038-" is forbidden:
          exceeded quota: pod-demo, requested: pods=1, used: pods=2, limited: pods=2'
    

    从命令输出可以看到尽管在Deployment中我们设置了需要启动3个Pod实例,但由于test-pod命名空间配额的存在,只有两个Pod被成功创建。

    配置默认的CPU请求与限额

    创建一个LimitRange和一个Pod

    cpu.yaml

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: cpu-limit-range
    spec:
      limits:
      - default:
          cpu: 1
        defaultRequest:
          cpu: 0.5
        type: Container
    

    在这个ares-cpu命名空间中创建这个LimitRange:

    # kubectl create -f cpu.yaml --namespace=ares-cpu
    

    现在如果在ares-cpu命名空间中创建一个容器,则该容器不需要指定它自己的CPU请求和CPU限额,容器会被赋予一个默认的CPU请求值0.5和一个默认的CPU限额值1。

    总结

    • 在命名空间运行的每一个容器必须含有它自己的CPU限额。
    • 在命名空间中所有容器使用的CPU总量不能超出指定的限额。
    • 如果只指定容器CPU限额,则容器CPU limits与CPU requests值相等
    • 如果一个容器没有指定它自己的CPU限额,它将被赋予默认的限额值

    配置最小和最大 CPU 限制

    创建一个 LimitRange 和一个 Pod

    cpu-constraints.yaml

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: cpu-min-max-demo
    spec:
      limits:
      - max:
          cpu: "800m"
        min:
          cpu: "200m"
        type: Container
    

    在ares-cpu命名空间下创建 LimitRange:

    # kubectl create -f cpu-constraints.yaml --namespace=ares-cpu
    

    在ares-cpu命名空间下查看 LimitRange 的详细信息:

    # kubectl get limitrange cpu-min-max-demo --output=yaml --namespace=ares-cpu
    ---------------
    limits:
    - default:
        cpu: 800m
      defaultRequest:
        cpu: 800m
      max:
        cpu: 800m
      min:
        cpu: 200m
      type: Container
    

    限制

    • 如果容器没有指定自己的 CPU 请求(CPU request)和限制(CPU limit),系统将会为其分配默认值。
    • 验证容器的 CPU 请求大于等于 200 millicpu,若小于200,则创建不成功
    • 验证容器的 CPU 限制小于等于 800 millicpu,若大于800,则创建不成功
    • 若容器没有指定自己的 CPU 请求和限制,所以它将从 LimitRange 获取 默认的 CPU 请求和限制值。
    • LimitRange 在 namespace 中施加的最小和最大 CPU 限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响。

    配置默认的内存请求与限额

    创建 LimitRange 和 Pod

    memory.yaml

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

    在 ares-mem命名空间中创建 LimitRange:

    # kubectl create -f memory.yaml --namespace=ares-mem
    

    现在如果在这个ares-mem命名空间中创建一个容器,并且该容器未指定它自己的内存请求与内存限额, 该容器会被赋予默认的内存请求值 256MiB 和默认的内存限额值 512MiB。

    总结

    • 在命名空间运行的每一个容器必须有它自己的内存限额
    • 在命名空间中所有的容器使用的内存总量不能超出指定的限额
    • 如果只指定内存限额,则容器mem limits与mem requests值相等
    • 如果一个容器没有指定它自己的内存限额,它将被赋予默认的限额值

    设置最小和最大内存限制

    创建一个 LimitRange 和一个 Pod

    memory-constraints.yaml

    apiVersion: v1
    kind: LimitRange
    metadata:
      name: mem-min-max-demo
    spec:
      limits:
      - max:
          memory: 1Gi
        min:
          memory: 500Mi
        type: Container
    

    在ares-mem命名空间下创建:

    # kubectl create -f memory-constraints.yaml --namespace=ares-mem
    

    查看 LimitRange 的详细信息:

    # kubectl get limitrange mem-min-max-demo --namespace=ares-mem --output=yaml
    -------------
     limits:
      - default:
          memory: 1Gi
        defaultRequest:
          memory: 1Gi
        max:
          memory: 1Gi
        min:
          memory: 500Mi
        type: Container
    

    限制

    • 内存限额默认值与配置文件中max memory一致!
    • 如果容器没有指定自己的内存请求(request)和限制(limit),系统将会为其分配默认值。
    • 验证容器的内存请求大于等于 500 MiB,若小于500M。则容器创建会失败
    • 验证容器的内存限制小于等于 1 GiB,若大于1G,则容器创建会失败
    • 若没有指定内存,则会使用默认的内存配额
    • LimitRange 在 namespace 中施加的最小和最大内存限制只有在创建和更新 Pod 时才会被应用。改变 LimitRange 不会对之前创建的 Pod 造成影响

    配置CPU和内存配额

    创建ResourceQuota对象

    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
    

    在ares-mem-cpu命名空间中创建ResourceQuota对象:

    kubectl create -f quota-mem-cpu.yaml --namespace=ares-mem-cpu
    

    限制

    • 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
    • 所有容器的内存请求总额不得超过1 GiB。
    • 所有容器的内存限额总额不得超过2 GiB。
    • 所有容器的CPU请求总额不得超过1 CPU。
    • 所有容器的CPU限额总额不得超过2 CPU。
    • 想限制单个容器的上述各项指标,而非命名空间中所有容器的,可以使用LimitRange。
  • 相关阅读:
    ab参数详解 – 压力测试
    configure/make/make install的作用
    LNMP第二部分nginx、php配置
    centos 6.9安装mysql
    HDFS Java API的使用举例
    配置SSH无秘钥登录
    一篇文章学懂Shell脚本
    自己实现一个简单的网购秒杀系统
    hadoop伪分布式环境搭建
    vmware虚拟机的克隆
  • 原文地址:https://www.cnblogs.com/aresxin/p/Kubernetes-Namespaces.html
Copyright © 2011-2022 走看看