欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > Kubernetes 从入门到精通-命名空间Namespace

Kubernetes 从入门到精通-命名空间Namespace

2025/8/31 22:22:41 来源:https://blog.csdn.net/qq_37182070/article/details/148478014  浏览:    关键词:Kubernetes 从入门到精通-命名空间Namespace

       Namespace 是 Kubernetes 中用于实现资源隔离与逻辑分组的核心机制,它将物理集群划分为多个虚拟集群,便于多团队、多项目或多环境共享同一集群资源。

一、namespace概念

       在Kubernetes中,Namespace可以看作是一个虚拟的集群,它将物理集群划分为多个逻辑部分。每个Namespace都有自己的资源集合,这些资源是相互隔离的,互不干扰。Kubernetes提供了默认的几个Namespace,如kube-system和default等。用户可以根据需要创建新的Namespace。

二、namespace用途

1.资源隔离

       通过使用Namespace,可以将不同的用户、租户、环境或项目创建的资源隔离在不同的Namespace中。这样,每个用户只能访问自己的Namespace中的资源,而无法访问其他Namespace的资源。例如还可以将开发(dev)、测试(test)、生产(prod)环境可分别部署到独立 Namespace。

2.分类管理

         使用Namespace可以将集群中的对象(如Pod、Service、deployment、ConfigMap等)按照业务或项目进行分类和管理。例如,可以将Web应用部署在名为“web”的Namespace中,将数据库应用部署在名为“database”的Namespace中。

3.资源配额

       通过为每个Namespace设置资源配额,可以限制该Namespace中资源的消耗量。例如,可以为每个项目分配一定的CPU和内存资源配额,确保资源的合理使用。

4.团队或项目隔离

       将Namespace映射到团队或项目上,可以更好地组织和管理集群中的资源。每个团队或项目可以使用自己的Namespace进行开发和部署,互不干扰。

三、namespace优势

1.提高资源利用率

       通过将不同的应用或项目部署在不同的Namespace中,可以避免资源的浪费和冲突,提高资源的利用率。

2.简化管理

       使用Namespace可以将集群中的资源进行分类和管理,使得管理更加简单和方便。

3.提高安全性

       通过隔离不同用户或团队的资源,可以增强系统的安全性,避免未经授权的访问和操作。

4.可扩展性

       随着业务的发展和扩大,使用Namespace可以方便地扩展集群规模,提高系统的可扩展性。

四、默认namespace及用途

       Kubernetes 初始化时自动创建以下系统 Namespace:

[root@master-1 ~]# kubectl get ns
NAME           STATUS    AGE
default         Active   79d
kube-node-lease    Active   79d
kube-public       Active   79d
kube-system       Active   79d
  • default:用户未指定时资源的默认归属位置。

  • kube-node-lease:维护节点心跳状态(v1.13+引入)。该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障。

  • kube-public:存储公共资源(如集群信息),所有用户(包括未认证用户)可读。

  • kube-system:存放 Kubernetes 系统组件(如 CoreDNS、kube-proxy)。

五、常用命令操作

1.查看命名空间

#以下三种命令等效 --show-labels显示标签信息
[root@master-1 ~]# kubectl get ns
[root@master-1 ~]# kubectl get namespace
[root@master-1 ~]# kubectl get namespaces --show-labels#查看命名空间详细信息
[root@master-1 ~]# kubectl describe ns kube-system
Name: kube-system
Labels: kubernetes.io/metadata.name=kube-system
Annotations: <none>
Status: ActiveNo resource quota.No LimitRange resource.

图片

       可以看到有k8s自带的命名空间,也有自建的命名空间

2.创建命名空间

#方式一:响应式创建
[root@master-1 ~]# kubectl create namespace liux
namespace/liux created
[root@master-1 ~]# kubectl describe ns liux
Name: liux
Labels: kubernetes.io/metadata.name=liux
Annotations: <none>
Status: ActiveNo resource quota.No LimitRange resource.#方式二:声明式创建
[root@master-1 ~]# cat ns.yaml 
apiVersion: v1
kind: Namespace
metadata:labels:kubernetes.io/metadata.name: liuxname: liux
[root@master-1 ~]# kubectl apply -f ns.yaml

3.切换默认命名空间

#切换之后默认命名空间就是liux了
[root@master-1 ~]# kubectl config set-context --current --namespace=liux
Context "kubernetes" modified.
[root@master-1 ~]# kubectl get pods
No resources found in liux namespace.

4.删除命名空间

       一旦删除了某个名称空间,则该名称空间下的所有资源都会被删除。

[root@master-1 ~]# kubectl delete ns liux

六、资源配额管理以及案例

       限制 Namespace 的资源总量,防止资源滥用。

1.创建命名空间

[root@master-1 ~]# kubectl create ns dev

2.为命名空间设置资源限制

  • 在该命名空间中的每个 Pod 的所有容器都必须要有内存请求和限制,以及 CPU 请求和限制。

  • 在该命名空间中所有 Pod 的内存请求总和不能超过 1 GiB。

  • 在该命名空间中所有 Pod 的内存限制总和不能超过 2 GiB。

  • 在该命名空间中所有 Pod 的 CPU 请求总和不能超过 1 cpu。

  • 在该命名空间中所有 Pod 的 CPU 限制总和不能超过 2 cpu。

  • 在该命名空间中所有 Pod不超过10个pod。

[root@master-1 ~]# cat quota.yaml 
apiVersion: v1
kind: ResourceQuota
metadata:name: mem-cpu-quotanamespace: dev # 作用于 dev 命名空间
spec:hard:pods: "10"                 # 最多 10 个 Podrequests.cpu: "1"          # CPU 请求总量 ≤ 1 核requests.memory: 1Gi # 内存请求总量 ≤ 1GiBlimits.cpu: "2"            # CPU 限额总量 ≤ 2 核limits.memory: 2Gi # 内存限额总量 ≤ 2GiB[root@master-1 ~]# kubectl apply -f quota.yaml
resourcequota/mem-cpu-quota created
[root@master-1 ~]# kubectl get ResourceQuota -n dev
NAME AGE REQUEST LIMIT
mem-cpu-quota 17s pods: 0/10, requests.cpu: 0/1, requests.memory: 0/1Gi limits.cpu: 0/2, limits.memory: 0/2Gi
[root@master-1 ~]# kubectl get ResourceQuota -n dev -o yaml

3.创建第一个pod并指定资源限制

[root@master-1 ~]# cat quota-nginx.yaml 
apiVersion: v1
kind: Pod 
metadata:name: quota-nginxnamespace: dev #指定命名空间
spec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:limits:memory: "800Mi"cpu: "800m"requests:  memory: "600Mi"cpu: "400m"[root@master-1 ~]# kubectl apply -f quota-nginx.yaml
pod/quota-nginx created

4.查看dev命名空间资源使用情况

[root@master-1 ~]# kubectl get ResourceQuota -n dev
NAME AGE REQUEST LIMIT
mem-cpu-quota 88m pods: 1/10, requests.cpu: 400m/1, requests.memory: 600Mi/1Gi limits.cpu: 800m/2, limits.memory: 800Mi/2Gi
[root@master-1 ~]# kubectl get ResourceQuota -n dev -o yaml

       查看到该空间下的资源已经使用了一部分了

图片

5.创建第二个pod

       发现pod创建失败,requested: requests.memory=600Mi, used: requests.memory=600Mi, limited: requests.memory=1Gi,requests请求的内存 600+600>1G了,超出限制了。

[root@master-1 ~]# cat quota-nginx.yaml 
apiVersion: v1
kind: Pod 
metadata:name: quota-nginx-2namespace: dev #指定命名空间
spec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:limits:memory: "800Mi"cpu: "800m"requests:memory: "600Mi"cpu: "400m"[root@master-1 ~]# kubectl apply -f quota-nginx.yaml
Error from server (Forbidden): error when creating "quota-nginx.yaml": pods "quota-nginx-2"is forbidden: exceeded quota: mem-cpu-quota, requested: requests.memory=600Mi, used: requests.memory=600Mi, limited: requests.memory=1Gi

现在我们将第二个pod的requests的memory改在限制范围内,发现可以创建成功的。

[root@master-1 ~]# cat quota-nginx.yaml 
apiVersion: v1
kind: Pod 
metadata:name: quota-nginx-2namespace: dev #指定命名空间
spec:containers:- name: nginximage: nginx:latestimagePullPolicy: IfNotPresentresources:limits:memory: "800Mi"cpu: "800m"requests:memory: "300Mi"cpu: "400m"[root@master-1 ~]# kubectl apply -f quota-nginx.yaml
pod/quota-nginx-2 created
[root@master-1 ~]# kubectl get ResourceQuota -n dev
NAME AGE REQUEST LIMIT
mem-cpu-quota 116m pods: 2/10, requests.cpu: 800m/1, requests.memory: 900Mi/1Gi limits.cpu: 1600m/2, limits.memory: 1600Mi/2Gi

6.创建第三个pod不加资源限制

       发现不加资源限制创建pod也会失败,该命名空间强制了创建pod必须添加资源限制,否则会创建失败。

图片

七、总结

       综上所述,Kubernetes中的Namespace是一种强大的资源管理和隔离机制。通过合理使用Namespace,可以更好地组织和管理集群中的资源,提高系统的安全性、可靠性和可扩展性。在实际应用中,根据业务需求和团队组织结构,合理选择和使用Namespace,可以实现更高效、灵活和安全的容器编排和管理。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词