K8S的命名空间
-
什么是命名空间
K8s支持多个虚拟集群,底层依赖于同一个物理集群,这些虚拟集群被称之为命名空间
命名空间namespace是K8s集群级别的资源, 可写为ns,可以给不用用户、租户、环境或项目创建对应的命名空间,比如test、dev、pro环境分别创建各自的命名空间,对应测试、开发、生产。
每个命名空间内的资源(如Pod、Service、Deployment等)是相互隔离的,互不干扰。这样,不同用户或项目可以在同一个物理集群上运行,而无需担心资源冲突或数据泄露。命名空间提供了一种将集群资源划分为多个部分的方式,使得资源管理和访问控制更加灵活和高效。
-
命名空间的应用场景
例如,在一个大型企业中,可能有多个部门或团队正在开发不同的项目。通过为每个团队或项目分配一个独立的命名空间,可以确保它们的资源(如应用程序、数据库等)彼此隔离,从而避免了资源冲突和数据泄露的风险。此外,命名空间还可以用于实现多租户环境,其中每个租户都拥有自己独立的资源集,从而提高了资源管理的灵活性和安全性。
-
namespace创建
# 创建一个test名称空间
kubectl create ns test
kubectl get ns
-
namespace资源限额
vi ns-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
namespace: test
spec:
hard:
requests.cpu: 2
requests.memory: 2Gi
limits.cpu: 4
limits.memory: 4Gi
kubectl apply -f namespace-quota.yaml
kubectl get resourcequota -n test
#创建的ResourceQuota对象将在test名字空间中添加以下限制:
每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
所有容器的内存请求总额不得超过2GiB。
所有容器的内存限额总额不得超过4 GiB。
所有容器的CPU请求总额不得超过2 CPU。
所有容器的CPU限额总额不得超过4CPU。
ResouceQuota 对象是在我们的名称空间中创建的,并准备好控制该名称空间中的所有容器的总请求和限制。
-
pod资源配额
vi pod-quota.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-quota
namespace: test
labels:
app: pod-quota
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: pod-quota
image: 172.16.80.140/nginx/nginx:1.26
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
requests:
memory: 100Mi
cpu: 500m
limits:
memory: 2Gi
cpu: 2
kubectl apply -f pod-quota.yaml
# 如果调整配额,大于ns,会发现无法创建pod
vi pod-quota-1.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-quota
namespace: test
labels:
app: pod-quota
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: pod-quota
image: 172.16.80.140/nginx/nginx:1.26
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
resources:
requests:
memory: 100Mi
cpu: 500m
limits:
memory: 5Gi
cpu: 5
kubectl delete -f pod-quota.yaml
kubectl apply -f pod-quota-1.yaml