Kubernetes中名称空间的作用?如何创建Namespace名称空间并使用?名称空间如何定义资源配额

创建名称空间 namespace

参考文档:https://kubernetes.io/zh-cn/docs/concepts/overview/working-with-objects/namespaces/

在 Kubernetes 中,名字空间(Namespace) 提供一种机制,将同一集群中的资源划分为相互隔离的组。 同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求。 名字空间作用域仅针对带有名字空间的对象, (例如 Deployment、Service 等),这种作用域对集群范围的对象 (例如 StorageClass、Node、PersistentVolume 等)不适用。

何时使用多个名字空间

名字空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑名字空间。当需要名字空间提供的功能时,请开始使用它们。

名字空间为名称提供了一个范围。资源的名称需要在名字空间内是唯一的,但不能跨名字空间。 名字空间不能相互嵌套,每个 Kubernetes 资源只能在一个名字空间中。

名字空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。

不必使用多个名字空间来分隔仅仅轻微不同的资源,例如同一软件的不同版本: 应该使用标签来区分同一名字空间中的不同资源。

说明:
对于生产集群,请考虑不要使用 default 名字空间,而是创建其他名字空间来使用。

初始名字空间

Kubernetes 启动时会创建四个初始名字空间:

default
Kubernetes 包含这个名字空间,以便于你无需创建新的名字空间即可开始使用新集群。
kube-node-lease
该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障。
kube-public
所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。 该名字空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。 该名字空间的公共属性只是一种约定而非要求。
kube-system
该名字空间用于 Kubernetes 系统创建的对象

所以

在k8s中namespace可以用来:
1.将不同的应用隔离开来,避免命名冲突和资源的竞争
2.为不同团队和项目提供独立的运行环境,使他们可以独立的管理和部署应用程序。
3.控制资源配额和访问权限,以确保应用程序之间的安全隔离。
1. 编写yaml文件
[root@kub-k8s-master ~]# mkdir namespace
[root@kub-k8s-master ~]# cd namespace/
[root@kub-k8s-master namespace]# vim namespace.yml
---
apiVersion: v1   #api版本
kind: Namespace  #类型---固定的
metadata:     #元数据,用来描述所创建资源的基本信息
  name: ns-monitor  #起个名字
  labels:     #设置标签
    name: ns-monitor
2. 创建资源
[root@kub-k8s-master namespace]# kubectl apply -f namespace.yml
namespace/ns-monitor created
3. 查看资源
[root@kub-k8s-master namespace]# kubectl get namespace
NAME              STATUS   AGE
default           Active   22h
kube-node-lease   Active   22h
kube-public       Active   22h
kube-system       Active   22h
ns-monitor        Active   34s
4.查看某一个namespace
[root@kub-k8s-master namespace]# kubectl get namespace ns-monitor
5.查看某个namespace的详细信息
[root@kub-k8s-master namespace]# kubectl describe namespace ns-monitor
6.制作namespace资源限制
[root@k8s-master ~]# kubectl explain resourcequota.spec  #查看命令帮助

资源配额

参考文档:https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/

当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。

资源配额是帮助管理员解决这一问题的工具。

资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。

资源配额的工作方式如下:

不同的团队可以在不同的命名空间下工作,这可以通过 RBAC 强制执行。

集群管理员可以为每个命名空间创建一个或多个 ResourceQuota 对象。

当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会跟踪集群的资源使用情况, 以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。

如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。

如果命名空间下的计算资源(如 cpu 和 memory)的配额被启用, 则用户必须为这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。

在这里插入图片描述

实战

[root@k8s-master namespace]# cat create_ns_quota.yml 
apiVersion: v1
kind: ResourceQuota  #定义限制
metadata:
 name: test-quota
 namespace: ns-monitor #指定要做限制的namespace
spec:
 hard: #定义资源限制集,https://kubernetes.io/docs/concepts/policy/resource-quotas/
  limits.cpu: "2"
  limits.memory: "2Gi"
  requests.cpu: "2"
  requests.memory: "2Gi"
  
limits:定义资源在当前名称空间可以使用的资源是多少
requests:定义资源可以请求(调度)到node节点需要的多少资源,才允许资源调度

查看:
[root@k8s-master namespace]# kubectl get resourcequota -n app
NAME         AGE    REQUEST                                             LIMIT
test-quota   3h5m   requests.cpu: 0/2, requests.memory: 0/2Gi   limits.cpu: 0/2, limits.memory: 0/2Gi


使用:
[root@k8s-master namespace]# cat create_pod.yml 
apiVersion: v1
kind: Pod
metadata:
 name: test-pod-1
 namespace: ns-monitor #指定名称空间
 labels:
  web: nginx-1
spec:
 containers:
  - name: nginx-1
    image: daocloud.io/library/nginx
    imagePullPolicy: IfNotPresent
    ports:
     - containerPort: 80
    resources: #指定资源限制
     limits: #定义容器在当前名称空间可以使用的最大资源
      cpu: "500m"
      memory: "1Gi"
     requests: #定义该pod调度到的节点需要满足的资源
      cpu: "100m"
      memory: "500Mi"

查看使用后:
[root@k8s-master namespace]# kubectl get resourcequota -n ns-monitor
NAME         AGE    REQUEST                                             LIMIT
test-quota   3h5m   requests.cpu: 300m/2, requests.memory: 1000Mi/2Gi   limits.cpu: 1/2, limits.memory: 2Gi/2Gi

注意:运行pod的node节点的资源,和容器运行所使用的资源一旦超过定义的,那就无法使用调度pod到对应节点。

7.删除名称空间,先删除namespace对应的pod
[root@kub-k8s-master namespace]# kubectl delete -f create_pod.yml
[root@kub-k8s-master namespace]# kubectl delete -f namespace.yml
namespace "ns-monitor" deleted
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值