名称空间
- 一.名称空间概念
- 二.Namespace使用场景
- 三.名称空间基本操作
- 1.创建Namespace两种方式
- 2.Namespace资源限额
一.名称空间概念
Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间
。
命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间,例如,可以为test、devlopment、production环境分别创建各自的命名空间。
二.Namespace使用场景
命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。
三.名称空间基本操作
1.创建Namespace两种方式
第一种:通过命令行的方式创建
kubectl create ns test
第二种:通过YAML资源清单创建名称空间
vim namespace.yamlapiVersion: v1
kind: Namespace
metadata:name: test
通过apply创建
kubectl apply -f namespace.yaml
查看名称空间
kubectl get ns
kubectl get ns test
2.Namespace资源限额
可以通过Resource Quota来限制Namespace中资源的使用,资源配额是一种控制机制,可以限制Namespace中资源使用量,包括CPU、内存、存储等。
资源限制可以针对Namespace中所有Pod进行限制,当然也可以针对单个Pod进行限制
vim resourcequota.yamlapiVersion: v1
kind: Namespace
metadata:name: test
---
apiVersion: v1
kind: ResourceQuota
metadata:name: test-quotanamespace: test
spec:hard:requests.cpu: 1requests.memory: 1Gilimits.cpu: 2limits.memory: 2Gi
执行apply文件
kubectl apply -f resourcequota.yaml
查看Resourcequota信息
kubectl get resourcequota -n test
配额机制所支持的资源类型:
资源名称 | 描述 |
---|---|
limits.cpu | 所有非终止状态的 Pod,其 CPU 限额总量不能超过该值。 |
limits.memory | 所有非终止状态的 Pod,其内存限额总量不能超过该值。 |
requests.cpu | 所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。 |
requests.memory | 所有非终止状态的 Pod,其内存需求总量不能超过该值。 |
hugepages-<size> | 对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值。 |
cpu | 与 requests.cpu 相同。 |
memory | 与 requests.memory 相同。 |
- Requests(请求) 是容器在启动时向 Kubernetes 集群申请的资源(一开始)。它表明容器希望得到的最小资源量。如果容器实际使用的资源低于请求的量,Kubernetes 会为容器分配足够的资源。但是,如果容器实际使用的资源高于请求的量,Kubernetes 可能对容器进行 throttling,限制其使用的资源。
- Limits(限制) 是容器被允许使用的资源的上限(运行中)。它表明容器在运行时可以使用的资源的最大量。如果容器实际使用的资源超过了限制,Kubernetes 集群中的 QoS 机制可能会介入,可能导致容器被终止或限制其资源使用。
所以:请求是在容器启动时申请的资源量,而限制是在容器运行时允许使用的最大资源量
测试:创建一个Pod并限制资源使用如下:
注意:如果Namespace进行了资源配额了,那么在创建Pod时必须使用resources进行限制
vim pod.yaml ---
apiVersion: v1
kind: Pod
metadata:labels:app: nginxname: web-nginxnamespace: test
spec:containers:- name: web-nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80 resources:limits:memory: "1Gi"cpu: "1"requests:memory: "1000Mi"cpu: "500m"
查看resourcequota资源限制情况:
kubectl get resourcequota -n test
修改Pod,超过Namespace的资源配额,查看结果
vim pod1.yaml ---
apiVersion: v1
kind: Pod
metadata:labels:app: nginxname: web-nginx1namespace: test
spec:containers:- name: web-nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80 resources:limits:memory: "2Gi"cpu: "2"requests:memory: "2Gi"cpu: "2"
超过资源配额,不允许创建Pod