k8s学习笔记(四):命名空间(namespace)详解

这篇具有很好参考价值的文章主要介绍了k8s学习笔记(四):命名空间(namespace)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

命名空间

Kubernetes中的Namespace是一种用于在集群内部组织和隔离资源的机制。一个Namespace可以看作是一个虚拟的集群,它将物理集群划分为多个逻辑部分,每个部分都有自己的一组资源(如Pod、Service、ConfigMap等)。

Namespace 适合用于隔离不同用户创建的资源

用于给集群中的任何对象组进行分类、筛选和管理。每一个添加到Kubernetes集群的工作负载必须放在一个命名空间中。

k8s查看命名空间,k8s,kubernetes,docker,运维

不同的业务(web、数据库、消息中间)可以部署在不同的命名空间,实现业务的隔离,并且可以对其进行资源配额,限制cpu、内存等资源的使用

命名空间的重要性

命名空间为集群中的对象名称赋予作用域。虽然在命名空间中名称必须是唯一的,但是相同的名称可以在不同的命名空间中使用。这对于某些场景来说可能帮助很大。例如,如果使用命名空间来划分应用程序生命周期环境(如开发、staging、生产),则可以在每个环境中维护利用同样的名称维护相同对象的副本。

命名空间还可以让用户轻松地将策略应用到集群的具体部分。你可以通过定义ResourceQuota对象来控制资源的使用,该对象在每个命名空间的基础上设置了使用资源的限制。类似地,当在集群上使用支持网络策略的CNI(容器网络接口)时,比如Calico或Canal(calico用于策略,flannel用于网络)。你可以将NetworkPolicy应用到命名空间,其中的规则定义了pod之间如何彼此通信。不同的命名空间可以有不同的策略。

使用命名空间最大的好处之一是能够利用Kubernetes RBAC(基于角色的访问控制)。RBAC允许您在单个名称下开发角色,这样将权限或功能列表分组。ClusterRole对象用于定义集群规模的使用模式,而角色对象类型(Role object type)应用于具体的命名空间,从而提供更好的控制和粒度。在角色创建后,RoleBinding可以将定义的功能授予单个命名空间上下文中的具体具体用户或用户组。通过这种方式,命名空间可以使得集群操作者能够将相同的策略映射到组织好的资源集合。

命名空间的使用场景

  • 将命名空间映射到团队或项目上
    通过给团队提供专门的命名空间,你可以用RBAC策略委托某些功能来实现自我管理和自动化,给团队和项目设置资源配额也非常有用。有了这种方式,你可以根据组织的业务需求和优先级合理地访问资源
  • 使用命名空间对生命周期环境进行分区
    命名空间非常适合在集群中划分开发、staging以及生产环境。通常情况下我们会被建议将生产工作负载部署到一个完全独立的集群中,来确保最大程度的隔离。
  • 使用命名空间隔离不同的使用者
    根据使用者对工作负载进行分段。比如,如果你的集群为多个客户提供基础设施,那么按命名空间进行分段就能够实现管理每个客户,同时跟踪账单的去向。

初始命名空间

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

  • default

    Kubernetes 包含这个名字空间,以便于你无需创建新的名字空间即可开始使用新集群。

  • kube-node-lease

    该名字空间包含用于与各个节点关联的 Lease(租约)对象。 节点租约允许 kubelet 发送心跳, 由此控制面能够检测到节点故障。

  • kube-public

    所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。 该名字空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。 该名字空间的公共属性只是一种约定而非要求。

  • kube-system

    该名字空间用于 Kubernetes 系统创建的对象。

常用命令操作

1.查看所有命名空间

[root@k8s-master ~]# kubectl get namespace
NAME                    STATUS   AGE
default                 Active   7d6h
kube-node-lease         Active   7d6h
kube-public             Active   7d6h
kube-system             Active   7d6h
quota-mem-cpu-example   Active   47h

可以看到四个k8s启动自带的初始命名空间

2.查看命名空间的详细信息

[root@k8s-master ~]# kubectl describe namespace kube-system
Name:         kube-system
Labels:       <none>
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

该命令可以看到对命名空间的资源配额对象

3.创建命名空间

[root@k8s-master ~]# kubectl create namespace quota-mem-cpu-example

查看命名空间

[root@k8s-master ~]# kubectl get namespace

k8s查看命名空间,k8s,kubernetes,docker,运维

4.查看某个命名空间下的pod

[root@k8s-master ~]# kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-6949477b58-m954m   1/1     Running   15         7d3h
calico-node-c55c9                          1/1     Running   11         7d3h
calico-node-cxnbg                          1/1     Running   9          7d3h
calico-node-pm4jp                          1/1     Running   10         7d3h
coredns-7f89b7bc75-hl2tf                   1/1     Running   9          7d6h
coredns-7f89b7bc75-wkf68                   1/1     Running   10         7d6h
etcd-k8s-master                            1/1     Running   11         7d6h
kube-apiserver-k8s-master                  1/1     Running   14         7d6h
kube-controller-manager-k8s-master         1/1     Running   14         7d6h
kube-proxy-55krt                           1/1     Running   11         7d6h
kube-proxy-5zjxj                           1/1     Running   9          7d3h
kube-proxy-dnvgg                           1/1     Running   10         7d3h
kube-scheduler-k8s-master                  1/1     Running   11         7d6h
metrics-server-769f6c8464-wqwdd            1/1     Running   2          26h

注意:如果不指定-n 命名空间,会默认查看default命名空间里的pod,创建pod的时候不指定命名空间,只会将pod创建在default命名空间里

5.删除命名空间

[root@k8s-master ~]# kubectl delete namespace mem-example

官网案例:创建命名空间,配置内存和CPU配额,并创建pod使用该命名空间

参考官网文档:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/

1.创建命名空间

[root@k8s-master ~]# kubectl create namespace quota-mem-cpu-example

查看命名空间

[root@k8s-master ~]# kubectl get namespace

k8s查看命名空间,k8s,kubernetes,docker,运维

2.创建资源配额对象,对这个资源对象进行赋值

[root@k8s-master ~]# vim quota-mem-cpu.yaml

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
  • apiversion,声明apiserver的版本为v1
  • kind,对象,创建资源配额对象
  • metadata,版本数据,指定名称
  • hard,硬件限制
  • requests.cpu: “1”,申请一个cpu
  • limits.cpu: “2”,最大可以使用2个cpu

3.将命名空间和资源配额对象进行绑定

[root@k8s-master ~]# kubectl apply -f quota-mem-cpu.yaml --namespace=quota-mem-cpu-example

4.查看命名空间对应的资源配额对象信息,以yaml文件的形式输出

[root@k8s-master ~]# kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml

k8s查看命名空间,k8s,kubernetes,docker,运维

ResourceQuota 在 quota-mem-cpu-example 命名空间中设置了如下要求:

  • 在该命名空间中的每个 Pod 的所有容器都必须要有内存请求和限制,以及 CPU 请求和限制。
  • 在该命名空间中所有 Pod 的内存请求总和不能超过 1 GiB。
  • 在该命名空间中所有 Pod 的内存限制总和不能超过 2 GiB。
  • 在该命名空间中所有 Pod 的 CPU 请求总和不能超过 1 cpu。
  • 在该命名空间中所有 Pod 的 CPU 限制总和不能超过 2 cpu。

5.创建pod

编辑yaml文件

[root@k8s-master ~]# vim quota-mem-cpu-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m"
      requests:
        memory: "600Mi"
        cpu: "400m"

创建pod

[root@k8s-master ~]# kubectl apply -f quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example

查看创建在指定命名空间的pod

[root@k8s-master ~]# kubectl get pod --namespace=quota-mem-cpu-example
NAME                 READY   STATUS    RESTARTS   AGE
quota-mem-cpu-demo   1/1     Running   0          70s

6.创建pod后,再次查看资源配额对象

[root@k8s-master ~]# kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml

k8s查看命名空间,k8s,kubernetes,docker,运维

发现创建pod后,发现已经used对应的cpu和memory了

7.尝试创建第二个pod

编辑yaml文件

[root@k8s-master ~]# vim quota-mem-cpu-pod-2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo-2
spec:
  containers:
  - name: quota-mem-cpu-demo-2-ctr
    image: redis
    resources:
      limits:
        memory: "1Gi"
        cpu: "800m"
      requests:
        memory: "700Mi"
        cpu: "400m"

创建pod

[root@k8s-master ~]# kubectl apply -f quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example
Error from server (Forbidden): error when creating "quota-mem-cpu-pod-2.yaml": pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo, requested: requests.memory=700Mi, used: requests.memory=600Mi, limited: requests.memory=1Gi

在清单中,你可以看到 Pod 的内存请求为 700 MiB。 请注意新的内存请求与已经使用的内存请求之和超过了内存请求的配额: 600 MiB + 700 MiB > 1 GiB

第二个 Pod 不能被创建成功。输出结果显示创建第二个 Pod 会导致内存请求总量超过内存请求配额文章来源地址https://www.toymoban.com/news/detail-662567.html

到了这里,关于k8s学习笔记(四):命名空间(namespace)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S(五)—命名空间与资源配额

    Kubernetes(K8s)的命名空间(Namespace)是用于在集群中对资源进行逻辑隔离和分类的一种机制。它可以将集群内的资源划分为不同的组,并且每个命名空间内的资源都有一个唯一的名称。命名空间可以帮助团队将不同的项目、环境或应用程序从彼此中隔离开来,以及更好地管理

    2024年02月04日
    浏览(41)
  • k8s---HPA 命名空间资源限制

     HPA(Horizontal Pod Autoscaling)Pod 水平自动伸缩,Kubernetes 有一个 HPA 的资源,HPA 可以根据 CPU 利用率自动伸缩一个 Replication Controller、 Deployment 或者Replica Set 中的 Pod 数量。 (1)HPA 基于 Master 上的 kube-controller-manager 服务启动参数 horizontal-pod-autoscaler-sync-period 定义的时长(默认为

    2024年01月24日
    浏览(46)
  • K8s进阶之路-命名空间级-服务发现 :

    服务发现: Service(东西流量):集群内网络通信、负载均衡(四层负载)内部跨节点,节点与节点之间的通信,以及pod与pod之间的通信,用Service暴露端口即可实现 Ingress(南北流量):将内部服务暴露外网访问的服务ingress-nginx,也就是nginx反向代理负载均衡服务(七层http负

    2024年02月20日
    浏览(47)
  • k8s的Namespace详解

    简介 在一个K8s集群中可以拥有多个命名空间,它们在逻辑上彼此隔离 namespaces是对一组资源和对象的抽象集合,比如可以将系统内部的对象划分为不同的项目组或用户组 K8s在集群启动之后,会默认创建几个namespace 默认namespace default:所有未指定Namespace的对象都会被分配在de

    2024年02月14日
    浏览(36)
  • Kubernetes(k8s):Namespace详解

    💖The Begin💖点点关注,收藏不迷路💖 在Kubernetes(K8s)中,Namespace是一种用于在集群中创建多个虚拟集群的方式。它将集群资源进行逻辑分组,使得不同的团队或项目可以独立地使用资源,避免资源冲突和混乱。本篇博客将详细介绍Kubernetes的Namespace概念、用法和实战应用场

    2024年02月03日
    浏览(55)
  • Kubernetes/k8s之HPA,命名空间资源限制

    Horizontal Pod Autoscaling:po的水平自动伸缩 这是k8s自带的模块 pod占用cpu比例达到一定的阀值,会触发伸缩机制。 根据cpu的阀值触发伸缩机制 replication controller 副本控制器 控制pod的副本数 deployment controller 节点控制器 部署pod hpa控制副本的数量,以及如何控制部署pod 1、hpa基于kub

    2024年01月24日
    浏览(46)
  • 【go】模板展示不同k8s命名空间的deployment

    这里学习如何在前端单页面,调用后端接口展示k8s的资源 后端 - go - gin - gin模板 前端 - gin模板 - html + js k8s - k8s-go-client ,基本资源(deployment等) go 1.19 k8s 1.23 go module github.com/gin-gonic/gin v1.6.3 k8s.io/client-go v0.20.2 搭建环境 安装 k8s 、go 开发环境(此处省略) ide打开后创建项目(我

    2024年04月15日
    浏览(38)
  • k8s资源管理命令与Namespace使用详解

    目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法

    2023年04月16日
    浏览(53)
  • 【云原生技术】K8S中集群、工作空间、可用区、部署单元、命名空间、部署组、VPC概念和示例

    Kubernetes(K8S)中的集群是由一组物理或虚拟机器组成的计算资源池,用于运行和管理容器化应用程序。集群提供了资源管理、高可用性、扩展性和自动化的环境,以便部署、管理和运行容器化应用程序。下面是关于Kubernetes集群的详细介绍以及一个示例: Kubernetes集群的组成:

    2024年01月23日
    浏览(47)
  • C++ 之命名空间namespace【详解】

    命名空间(Namespace)在编程中的作用主要有以下几点意义 避免命名冲突:命名空间提供了一种将标识符(如变量、函数、类等)组织和隔离的方式。不同的命名空间可以拥有相同名称的标识符,避免了不同模块或库之间的命名冲突。 提高可读性和可维护性:通过使用命名空

    2024年02月16日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包