一、名称空间概念
Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。
命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间。
在Kubernetes中,名称空间可以用来:
- 将不同的应用程序隔离开来,避免命名冲突和资源竞争。 -
- 为不同的团队或项目提供独立的环境,使它们可以独立地管理和部署应用程序。
- 控制资源配额和访问权限,以确保应用程序之间的安全隔离。
可以抽象的吧Namespace理解为,QQ分组,分组中存着不同的好友,好友就是容器。
二、名称空间基本操作
1、创建Namespace的两种方式
创建名称空间提供两种方式,通过命令行和YAML文件进行创建,如下:
第一种:通过命令行进项创建Namespace
kubectl create ns mytest
第二种:通过YAML资源清单进行创建Namespace
cat namespace.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: mytest
通过apply进行创建
kubectl apply -f namespace.yaml
查看名称空间
kubectl get ns
kubectl get ns mytest
2、Namespace资源限额
可以通过Resource Quota来限制Namespace中资源的使用,资源配额是一种控制机制,可以限制Namespace中资源使用量,包括CPU、内存、存储等。
资源限制可以针对Namespace中所有Pod进行限制,当然也可以针对单个Pod进行限制:
cat resourcequota.yaml
apiVersion: v1
kind: Namespace
metadata:
name: mytest
---
apiVersion: v1
kind: ResourceQuota
metadata:
name: mytest-quota
namespace: mytest
spec:
hard:
requests.cpu: 2
requests.memory: 2Gi
limits.cpu: 4
limits.memory: 4Gi
配置含义解释:
资源名称 | 描述 |
---|---|
limits.cpu | 所有非终止状态的 Pod,其 CPU 限额总量不能超过该值。 |
limits.memory | 所有非终止状态的 Pod,其内存限额总量不能超过该值。 |
requests.cpu | 所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。 |
requests.memory | 所有非终止状态的 Pod,其内存需求总量不能超过该值。 |
hugepages-<size> | 对于所有非终止状态的 Pod,针对指定尺寸的巨页请求总数不能超过此值。 |
cpu | 与 requests.cpu 相同。 |
memory | 与 requests.memory 相同。 |
执行apply文件
kubectl apply -f resourcequota.yaml
查看Resource Quota 信息:
kubectl get resourcequota -n mytest
测试:创建一个Pod并限制资源使用如下:
注意:如果Namespace进行了资源配额了,那么在创建Pod时必须使用resources进行限制。
cat pod.yaml
---
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: web-nginx
namespace: mytest
spec:
containers:
- name: web-nginx
image: nginx
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
limits:
memory: "2Gi"
cpu: "2"
requests:
memory: "1000Mi"
cpu: "500m"
查看resourcequota资源限制信息:
kubectl get resourcequota -n mytest
如果超过Namespace配额限制会报错,如下图: