目录
什么是命名空间
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)