【云原生】NameSpace名称空间详解

名称空间

文章目录

  • 名称空间
    • 一、名字空间
    • 二、何时使用多个名称空间
    • 三、初始名称空间
      • 3.1、default
      • 3.2、kube-node-lease
      • 3.3、kube-public
      • 3.4、kube-system
    • 四、通过名称空间共享集群
      • 4.1、查看名称空间
      • 4.2、获取名称空间详细信息
      • 4.3、名称空间的两种状态
      • 4.4、创建名称空间
      • 4.5、删除名称空间
    • 五、使用Kubernetes名称空间细分你的集群
      • 5.1、default名称空间简介
      • 5.2、创建新的名称空间
      • 5.3、在每个名称空间中创建Pod

一、名字空间

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

二、何时使用多个名称空间

  • 名称空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根据不需要创建或考虑名称空间。当需要名称空间提供的功能时,请开始使用它们。
  • 名称空间为名称提供了一个范围。资源的名称需要在名称空间内时唯一的,但不能跨名称空间。名称空间不能相互嵌套,每个Kubernetes资源只能在一个名称空间中。
# 说明
对于生产集群,请考虑不要使用default名称空间,而是创建其他名称空间来使用

三、初始名称空间

  • Kubernetes启动时会创建四个初始名称空间
# 第一种查看名称空间的方式
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   22d
kube-flannel      Active   22d
kube-node-lease   Active   22d
kube-public       Active   22d
kube-system       Active   22d
# 第二种查看名称空间的方式
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   22d
kube-flannel      Active   22d
kube-node-lease   Active   22d
kube-public       Active   22d
kube-system       Active   22d

3.1、default

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

3.2、kube-node-lease

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

3.3、kube-public

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

3.4、kube-system

  • 该名称空间用于/kubernetes系统创建的对象。
# 说明:避免使用前缀kube-创建名称空间,因为它是为kubernetes系统名称空间保留的。

四、通过名称空间共享集群

4.1、查看名称空间

  • 列出集群中现有的名称空间
# 查看名称空间第一种办法-1
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   23d
kube-flannel      Active   23d
kube-node-lease   Active   23d
kube-public       Active   23d
kube-system       Active   23d
# 查看名称名称空间第二种办法-2
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   23d
kube-flannel      Active   23d
kube-node-lease   Active   23d
kube-public       Active   23d
kube-system       Active   23d

4.2、获取名称空间详细信息

# 获取所有名称空间详细信息
[root@master ~]# kubectl describe ns
# 获取指定名称空间详细信息
[root@master ~]# kubectl describe ns default
Name:         default
Labels:       kubernetes.io/metadata.name=default
Annotations:  <none>
Status:       ActiveNo resource quota.No LimitRange resource.

4.3、名称空间的两种状态

  • 名称空间可以处于下列两个阶段的其中一个:
Active:名称空间正在被使用中
Terminating:名称空间正在被删除,且不能被用于新对对象使用

4.4、创建名称空间

说明:避免使用前缀kube-创建名称空间,因为它是为Kubernetes系统名称空间保留的。
  • 新家一个名为my-namespace.yaml的YAML文件,并写入下列内容
# 创建一个名为nginx-name的名称空间
[root@master ~]# cat my-namespace.yaml 
apiVersion: "v1"
kind: Namespace		# 这个资源清单类型,
metadata:name: nginx-name	# 名称空间的名字
  • 然后运行加载上面的资源清单
[root@master ~]# kubectl apply -f my-namespace.yaml 
namespace/nginx-name created
  • 或者你可以使用下面的命令直接以命令行的方式创建一个名称空间,这种方式通常是没有人用的(特点快捷)
# 以下创建了一个名为nginx-01的名称空间
[root@master ~]# kubectl create namespace nginx-01
namespace/nginx-01 created

4.5、删除名称空间

  • 方式1:命令行直接删除
[root@master ~]# kubectl delete namespace nginx-01
namespace "nginx-01" deleted
  • 方式2:如果名称空间是通过资源清单创建的,可以使用如下命令进行删除
[root@master ~]# kubectl delete -f my-namespace.yaml 
namespace "nginx-name" deleted

五、使用Kubernetes名称空间细分你的集群

5.1、default名称空间简介

  • 默认情况下,Kubernetes集群会在配置集群时实例化一个default名称空间,用以存放集群所有使用的默认Pod、Service和Deployment集合(默认代表创建的资源没有指定名称空间,那么就会在默认的名称空间下创建也就是default名称空间)

  • 假设你有一个新的集群,你可以通过执行以下操作看到所有名称空间

[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   23d
kube-flannel      Active   23d
kube-node-lease   Active   23d
kube-public       Active   23d
kube-system       Active   23d

5.2、创建新的名称空间

  • 在本次练习中,我们将创建两个额外的Kubernetes名称空间来保存我们的内容。
  • 在某组织使用共享的Kubernetes集群进行开发和生产的环境中:
# 开发团队系统在集群中维护一个名称空间,以便他们可以查看用于构建和运行其应用程序的Pod、Service和Deployment列表。在这个空间里,Kubernetes资源被自由地加入或移除,对谁能够或不能修改资源的限制被放宽了,以实现敏捷开发。# 运维团队系统在集群中维护一个空间,以便他们可以强制实施一些严格的规程,对谁可以或不可以操作运行生产站点的Pod、Service和Deployment集合进行控制
  • 该组织可以遵循的一种模式是将Kubernetes集群划分为两个名称空间:developmentproduction。让我们创建两个新的名称空间来保存我们的工作。
# 创建development名称空间
[root@master ~]# cat ns-development.yaml 
apiVersion: "v1"
kind: Namespace
metadata:name: development# 加载资源清单
[root@master ~]# kubectl apply -f ns-development.yaml 
namespace/development created
# 创建production名称空间
[root@master ~]# cat ns-production.yaml 
apiVersion: "v1"
kind: Namespace
metadata:name: production# 加载资源清单
[root@master ~]# kubectl apply -f ns-production.yaml 
namespace/production created
  • 为了保证一些正常,列出集群中所有的名称空间(–show-labels显示名称空间的标签)
[root@master ~]# kubectl get namespace --show-labels
NAME              STATUS   AGE    LABELS
default           Active   23d    kubernetes.io/metadata.name=default
development       Active   2m4s   kubernetes.io/metadata.name=development
kube-flannel      Active   23d    k8s-app=flannel,kubernetes.io/metadata.name=kube-flannel,pod-security.kubernetes.io/enforce=privileged
kube-node-lease   Active   23d    kubernetes.io/metadata.name=kube-node-lease
kube-public       Active   23d    kubernetes.io/metadata.name=kube-public
kube-system       Active   23d    kubernetes.io/metadata.name=kube-system
production        Active   43s    kubernetes.io/metadata.name=production

5.3、在每个名称空间中创建Pod

  • Kubernetes名称空间为集群中的Pod、Service和Deployment提供了作用域。与一个名称空间交互的用户不会看到另一个空间内的内容。为了演示这一点,让我们在development 名称空间中启动一个简单的Deployment和Pod。(重点是理解名称空间的作用)
# 以下创建了一个名为snowflak的Deployment其中使用的镜像是nginx,在development名称空间中创建,这个Deployment会有两个Pod副本去运行
[root@master ~]# kubectl create deployment snowflak --image=nginx -n development --replicas=2
  • 我们创建了一个副本个数为2的Deployment,运行名为snowflake的Pod,其中包含了一个负载提供主机名的基本容器。
[root@master ~]# kubectl get deployment -n development
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
snowflak   2/2     2            2           4m40s
  • development名称空间中,查看标签带有app=snowflak的Pod
[root@master ~]# kubectl get pod -n development -l app=snowflak
NAME                        READY   STATUS    RESTARTS   AGE
snowflak-55b5794bf7-gxwv2   1/1     Running   0          6m48s
snowflak-55b5794bf7-xdx9n   1/1     Running   0          6m48s
  • 看起来还不错,开发人员能够做他们想做的事情,而且他们不必担心影响到production名称空间下面的内容

  • 让我们切换到production名称空间,展示一下一个名称空间中的资源是如果对另外一个名称空间隐藏的。名称空间production应该是空的,下面的命令应该会返回大概意思是:在此名称空间中没有查看到任何资源。

[root@master ~]# kubectl get deployment -n production
No resources found in production namespace.[root@master ~]# kubectl get pod -n production
No resources found in production namespace.
  • 生产环境下一般以养牛的方式运行负载,所以让我们创建一些Cattle Pod
# 使用如下命令创建的Deployment自会默认创建一个Pod
[root@master ~]# kubectl create deployment cattle --image=nginx -n production
[root@master ~]# kubectl get pod -n production
NAME                      READY   STATUS    RESTARTS   AGE
cattle-858896d655-bcwfp   1/1     Running   0          21s# 使用如下命令将会把cattle这个Deployment的副本增加到5个
[root@master ~]# kubectl scale deployment cattle --replicas=5 -n production
[root@master ~]# kubectl get deployment -n production
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
cattle   5/5     5            5           3m11s
[root@master ~]# kubectl get pod -l app=cattle -n production
NAME                      READY   STATUS    RESTARTS   AGE
cattle-858896d655-6lxgx   1/1     Running   0          106s
cattle-858896d655-b65t5   1/1     Running   0          106s
cattle-858896d655-bcwfp   1/1     Running   0          3m48s
cattle-858896d655-grtzp   1/1     Running   0          106s
cattle-858896d655-wxgsd   1/1     Running   0          106s
  • 此时,应该很清除地展示了用户在一个名称空间中创建的资源对另一个名称空间是隐藏的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NVIDIA 全面转向开源 GPU 内核模块

NVIDIA 全面转向开源 GPU 内核模块 文章目录 NVIDIA 全面转向开源 GPU 内核模块支持的 GPU安装程序更改使用带有 CUDA 元包的包管理器 使用运行文件使用安装帮助脚本包管理器详细信息dnf&#xff1a;Red Hat Enterprise Linux、Fedora、Kylin、Amazon Linux 或 Rocky Linuxzypp…

网络安全等级保护:什么是网络安全等级保护?(非常详细)零基础入门到精通,收藏这一篇就够了

关键词&#xff1a; 网络安全等级保护 等级保护 网络 信息系统 旧话重提&#xff0c;一直以来&#xff0c;我们不断强调“等级保护”制度是我国的网络安全领域的基本制度、基本策略和基本方法&#xff0c;是促进信息化健康发展&#xff0c;维护国家安全、社会秩序和公共利益的…

数字图像处理中的常用特殊矩阵及MATLAB应用

一、前言 Matlab的名称来源于“矩阵实验室&#xff08;Matrix Laboratory&#xff09;”&#xff0c;其对矩阵的操作具有先天性的优势&#xff08;特别是相对于C语言的数组来说&#xff09;。在数字图像处理中&#xff0c;为了提高编程效率&#xff0c;我们可以使用多种方式来创…

Mysql数据库和Sql语句

数据库管理&#xff1a; sql语句&#xff1a;数据库用来增删改查的语句&#xff08;重要&#xff09; 备份&#xff1a;数据库的数据进行备份 主从复制、读写分离、高可用&#xff08;重要&#xff09; Mysql数据库和Sql语句 一、Mysql数据库 1、数据库&#xff1a;组织、…

Java基础(四) 内部类详解

Java 内部类详解 一. 内部类概述 内部类是嵌套在类内部进行定义的类&#xff0c;其外部的类则被称为外部类&#xff1b;按照内部类的定义位置&#xff0c;内部类可进一步划分为成员内部类、静态内部类、局部内部类和匿名内部类四种类型。内部类的出现实际上是进一步丰富了类的…

使用Python实现深度学习模型:用户行为预测与个性化服务

介绍 在这篇教程中,我们将构建一个深度学习模型,用于用户行为预测和个性化服务。我们将使用TensorFlow和Keras库来实现这一目标。通过这个教程,你将学会如何处理数据、构建和训练模型,并将模型应用于实际的用户行为预测和个性化服务任务。 项目结构 首先,让我们定义项目…

Modbus转BACnet/IP网关的技术实现与应用

引言 随着智能建筑和工业自动化的快速发展&#xff0c;不同通信协议之间的数据交换也变得日益重要。Modbus和BACnet/IP是两种广泛应用于自动化领域的通信协议&#xff0c;Modbus以其简单性和灵活性被广泛用于工业自动化&#xff0c;而BACnet/IP则在楼宇自动化系统中占据主导地…

Android APP 音视频(03)CameraX预览与MediaCodec编码

说明&#xff1a; 此CameraX预览和编码实操主要针对Android12.0系统。通过CameraX预览获取yuv格式数据&#xff0c;将yuv格式数据通过mediacodec编码输出H264码流&#xff08;使用ffmpeg播放&#xff09;&#xff0c;存储到sd卡上。 1 CameraX 和 MediaCodec简介 1.1 CameraX…

Redission中的Lua脚本写法、理解

对于Redission看门狗机制中的为了保证原子性的Lua脚本的写法规则是什么样的呢 &#xff1f; 对于源码中的Lua脚本又是什么意思&#xff1f; 我们一起来看一下 首先&#xff0c;我们先基本的熟悉一下lua脚本的逻辑 在Lua脚本中&#xff0c;if (…) then … end 语句的执行过程…

“微软蓝屏”事件,给IT行业带来的宝贵经验和教训

“微软蓝屏”事件是指2024年7月19日发生的一次全球性技术故障&#xff0c;主要涉及微软视窗&#xff08;Windows&#xff09;操作系统及其相关应用和服务。 以下是对该事件的详细解析&#xff1a; 一、事件概述 发生时间&#xff1a;2024年7月19日事件影响&#xff1a;全球多个…

【科学文献计量】中国知网(CNKI) 文献素材库生成软件详细使用说明

CNKI 文献素材库生成软件制作 1 背景2 使用步骤2.1 文献检索2.2 文献导出2.3 软件生成1 背景 在进行中文文献的综述时,往往是要借助中国知网(CNKI)文献检索平台,写作插入文献时会用Endnote软件进行辅助。因此就有需求:对于CNKI检索的结果直接导出到本地,第一是方便快速阅…

com.alibaba.fastjson.JSONObject类介绍、应用场景和示例代码

概述 功能特点&#xff1a; 解析 JSON 字符串为 Java 对象。将 Java 对象序列化为 JSON 字符串。支持链式操作&#xff0c;便于对 JSON 数据进行增删改查。 应用场景&#xff1a; 与前端进行 JSON 数据的交互&#xff0c;如 RESTful API 的数据传输。处理第三方接口返回的 …

基于STM32的农业大棚温湿度采集控制系统的设计

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能教室。 设备的详细功能见网盘中的文章《8、基…

“机器说人话”-AI 时代的物联网

万物互联的物联网愿景已经提了许多年了&#xff0c;但是实际效果并不理想&#xff0c;除了某些厂商自己的产品生态中的产品实现了互联之外&#xff0c;就连手机控制空调&#xff0c;电视机和调光灯都没有实现。感觉小米做的好一点&#xff0c;而华为的鸿蒙的全场景&#xff0c;…

Ubuntu24.04安装mysql-server小计,解决mysql_secure_installation时不能重置密码的问题

Ubuntu24.04安装mysql-server小计&#xff0c;解决mysql_secure_installation时不能重置密码的问题 为什么要写这往篇文章&#xff1f; 一般情况下&#xff0c;我安装mysql都用源码编译&#xff0c;以此方便安装更多自定义插件&#xff0c;但这次只需要安装一台开发机&#x…

C#+layui+echarts实现动态生成折线图

概要 C#layuiecharts实现动态生成折线图 整体架构流程 后端是c#语言编写的业务流程,前端是layui和echarts 技术细节 1.先看echarts折线图需要什么样子的数据,在想后端怎么处理 2.后端代码 List<ValveTempData> list new List<ValveTempData>(); string …

学懂C语言(十九):C语言指针详解

一、什么是指针&#xff1f; 指针是一个变量&#xff0c;其存储的是另一个变量的内存地址。在计算机内存中&#xff0c;每个存储单元都有一个唯一的地址&#xff0c;指针就是用来存放这些地址的。因此&#xff0c;通过指针&#xff0c;你可以间接访问和修改内存中的数据。就像其…

Linux提供的定时器

定时器在许多场景中非常有用&#xff0c;尤其是在需要精确定时或定时执行某些任务的情况下。而Linux专门为定时器提供了一套定时器接口。 timerfd_creat timerfd_create是 Linux 中用于创建定时器文件描述符的函数。这个功能主要是用来在指定的时间后或定时间隔内触发事件&am…

TS的访问修饰符有哪些

如果你和我一样是从强类型语言(如C、C#、Java)转过来的&#xff0c;相信你会一眼就知道是什么 public&#xff08;默认&#xff09; - 全部可访问 protected - 自己和派生类可访问 private - 只有自己可访问 废话不多说&#xff0c;上代码&#xff1a; class Person {publ…

Docker容器逃逸漏洞-CVE-2024-21626

Snyk 在 Docker 引擎以及其他容器化技术(例如 Kubernetes)使用的 runc <=1.1.11 的所有版本中发现了一个漏洞。利用此问题可能会导致容器逃逸到底层主机操作系统,无论是通过执行恶意映像还是使用恶意 Dockerfile 或上游映像构建映像(即使用时FROM) CVE-2024-21626原理…