kubernetes名称空间和资源配额

目录

什么是命名空间

namespace应用场景

namespace使用案例

namespace资源限额


什么是命名空间

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

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

namespace应用场景

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

namespace使用案例

#创建一个命名空间
[root@k8s-master1 pod-yaml]# kubectl create ns lyh
namespace/lyh created

#查看命名空间
[root@k8s-master1 pod-yaml]# kubectl get ns
NAME              STATUS   AGE
default           Active   12d
kube-node-lease   Active   12d
kube-public       Active   12d
kube-system       Active   12d
lyh               Active   5s

namespace资源限额

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

#查看帮助命令
[root@k8s-master1 pod-yaml]# kubectl explain resourcequota
[root@k8s-master1 pod-yaml]# kubectl explain resourcequota.metadata
[root@k8s-master1 pod-yaml]# kubectl explain resourcequota.spec


#编写yaml文件
[root@k8s-master1 pod-yaml]# vim namespace-quota.yaml 

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-quota
  namespace: lyh
spec:
  hard:
    requests.cpu: "2"
    requests.memory: 2Gi
    limits.cpu: "4"
    limits.memory: 4Gi

[root@k8s-master1 pod-yaml]# kubectl apply -f namespace-quota.yaml -n lyh
resourcequota/mem-cpu-quota created

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

  • 每个容器必须设置内存请求(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资源失败:

  • #修改tomcat.yaml文件
    [root@k8s-master1 pod-yaml]# vim pod-tomcat.yaml 
    apiVersion: v1
    kind: Pod
    metadata:
      name: tomcat-test
      namespace: lyh
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat-java
        image: tomcat:10.1.7
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "100Mi"
            cpu: "500m"
          limits:
            memory: "2Gi"
            cpu: "2"
    
    #创建pod资源
    [root@k8s-master1 pod-yaml]# kubectl apply -f pod-tomcat.yaml 
    pod/tomcat-test created
    
    #查看lyh命名空间中的pod
    [root@k8s-master1 pod-yaml]# kubectl get pods -n lyh
    NAME          READY   STATUS    RESTARTS   AGE
    tomcat-test   1/1     Running   0          3m6s
    
    
    #查看lyh名称空间的资源情况
    [root@k8s-master1 pod-yaml]# kubectl get resourcequota -n lyh
    NAME            AGE   REQUEST                                            LIMIT
    mem-cpu-quota   14m   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文件,使其超出设置的资源额度:

[root@k8s-master1 pod-yaml]# vim pod-tomcat.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: tomcat-test
  namespace: lyh
  labels:
    app: tomcat
spec:
  containers:
  - name: tomcat-java
    image: tomcat:10.1.7
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 8080
    resources:
      requests:
        memory: "100Mi"
        cpu: "500m"
      limits:
        memory: "5Gi"
        cpu: "5"

#会报错
[root@k8s-master1 pod-yaml]# kubectl apply -f pod-tomcat.yaml 
The Pod "tomcat-test" is invalid: spec: Forbidden: pod updates may not change fields 
other than `spec.containers[*].image`, `spec.initContainers[*].image`, 
`spec.activeDeadlineSeconds`, `spec.tolerations` (only additions to existing tolerations) 
or `spec.terminationGracePeriodSeconds` (allow it to be set to 1 if it was previously 
negative)

你可能感兴趣的:(k8s,kubernetes,运维,docker)