K8s新手系列之namespace
概述
官方文档地址:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/namespaces/
namespace是K8s系统中的一种非常重要的资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。

对于资源隔离,有的资源支持名称空间的,我们称之为局部资源。比如: po,svc,rc,...
而对于不支持名称空间的,我们称之为全局(集群)资源。比如: cs,no,ns...
查看K8s中哪些资源是否支持namespace
通过kubectl api-resources字段来查看。如下图:
可以查看NAMESPACED字段,当NAMESPACED为true时,则对应的该资源支持名称空间,称为局部资源;为false时则不支持名称空间,称为全局资源。

查看namespace
# 查看所有的namespace
[root@master01 ~]# kubectl get namespace
NAME STATUS AGE
calico-apiserver Active 6d6h
calico-system Active 6d6h
default Active 6d6h
kube-node-lease Active 6d6h
kube-public Active 6d6h
kube-system Active 6d6h
tigera-operator Active 6d6h
初始状态下,Kubernetes 具有四个namespace:
- default:默认的namespace,创建的资源未指定namespace时就在default空间下
- kube-node-lease 此namespace保存与每个节点关联的租约(Lease)对象。 节点租约允许 kubelet 发送心跳, 以便控制平面可以检测节点故障。
- kube-public 自动创建且被所有用户可读的namespace(包括未经身份认证的)。 此namespace通常在某些资源在整个集群中可见且可公开读取时被集群使用。 此namespace的公共方面只是一个约定,而不是一个必要条件。
- kube-system 由 Kubernetes 系统创建的对象的namespace
创建namespace
避免使用前缀 kube- 创建namespace,因为它是为 Kubernetes 系统namespace保留的。
通过资源清单创建namespace
# 创建资源清单
[root@master01 ~/namespace]# cat dev.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
# 创建namespace
[root@master01 ~/namespace]# kubectl apply -f dev.yaml
namespace/dev created
# 查看namespace
[root@master01 ~/namespace]# kubectl get namespace dev
NAME STATUS AGE
dev Active 11s
通过命令创建namespace
语法:
kubectl create namespace <namespace-name>
示例:
# 创建名称为sit的namespace
[root@master01 ~/namespace]# kubectl create namespace sit
namespace/sit created
# 验证是否创建成功
[root@master01 ~/namespace]# kubectl get namespace sit
NAME STATUS AGE
sit Active 13s
删除namespace
删除namespace时会删除namespace下的所有内容!一般不建议删除namespace。
删除namespace是异步的,所以有一段时间你会看到namespace处于 Terminating 状态。
语法:
kubectl delete namespaces <namespace-name>
示例:
# 删除sit的namespace
[root@master01 ~/namespace]# kubectl delete namespace sit
namespace "sit" deleted
# 验证是否删除成功
[root@master01 ~/namespace]# kubectl get namespace sit
Error from server (NotFound): namespaces "sit" not found
创建K8s资源在指定的namespace
创建局部资源时(例如Pod、ConfigMap...)可以在metadata.namespace指定该资源属于哪一个namespace。
示例:
# 定义资源清单
[root@master01 ~/namespace]# cat namespace-pod.yaml
# 创建namespace
apiVersion: v1
kind: Namespace
metadata:
name: sit-pod
---
# 创建Pod
apiVersion: v1
kind: Pod
metadata:
name: namespace-pod
# 指定所属的名称空间
namespace: sit-pod
spec:
containers:
- name: container-nginx
image: nginx:latest
# 创建namespace和对应的Pod
[root@master01 ~/namespace]# kubectl apply -f namespace-pod.yaml
namespace/sit-pod created
pod/namespace-pod created
# 查看namespace
[root@master01 ~/namespace]# kubectl get namespace sit-pod
NAME STATUS AGE
sit-pod Active 49s
# 查看sit-pod下的Pod
[root@master01 ~/namespace]# kubectl get po -n sit-pod
NAME READY STATUS RESTARTS AGE
namespace-pod 1/1 Running 0 65s
查看指定namespace下的K8s资源
如果不指定namespace时,默认查看的是default空间下对应的资源
查看指定namespace下所有的资源
语法:
kubectl get all -n <namespace-name>
查看所有namespace下指定的资源
语法:
kubectl get <resource-type> --all-namepsace
# 或者
kubectl get <resource-type> -A
查看指定namespace下指定的资源
语法:
kubectl get <resource-type> -n <namespace-name>
总结
整体来说,在生产环境中查看资源的相关信息时,可以通过-n选项指定对应的namespace
K8s新手系列之namespace的更多相关文章
- k8s入门系列之扩展组件(一)DNS安装篇
DNS (domain name system),提供域名解析服务,解决了难于记忆的IP地址问题,以更人性可读可记忆可标识的方式映射对应IP地址. Cluster DNS扩展插件用于支持k8s集群系统 ...
- k8s入门系列之guestbook快速部署
k8s集群以及一些扩展插件已经安装完毕,本篇文章介绍一下如何在k8s集群上快速部署guestbook应用. •实验环境为集群:master(1)+node(4),详细内容参考<k8s入门系列之集 ...
- k8s入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- K8S中如何跨namespace 访问服务?为什么ping不通ClusterIP?
1.K8S中如何跨namespace 访问服务? 2.在Pod中为什么ping不通ClusterIP? 简述: Rancher2.0中的一个用户,在K8S环境中,创建两个namespace,对应用进行 ...
- Android新手系列教程(申明:来源于网络)
Android新手系列教程(申明:来源于网络) 地址:http://blog.csdn.net/column/details/androidcoder666.html
- k8s 入门系列之集群安装篇
关于kubernetes组件的详解介绍,请阅读上一篇文章<k8s入门系列之介绍篇> Kubernetes集群安装部署 •Kubernetes集群组件: - etcd 一个高可用的K/V键值 ...
- XAML实例教程系列 - 命名空间(NameSpace) 三
XAML实例教程系列 - 命名空间(NameSpace) 2012-05-28 14:14 by jv9, 2205 阅读, 10 评论, 收藏, 编辑 上一篇曾提及XAML中,每个对象元素的声明是对 ...
- SignalR新手系列教程详解总结(转)
SignalR新手系列教程详解总结 GlobalHost.ConnectionManager.GetHubContext<TodoListHub>() .Clients.Clients(l ...
- k8s入门系列之扩展组件(二)kube-ui安装篇
kube-ui是k8s提供的web管理界面,可以展示节点的内存.CPU.磁盘.Pod.RC.SVC等信息. 1.编辑kube-dashboard-rc.yml定义文件[root@master kube ...
- k8s入门系列之介绍篇
•Kubernetes介绍1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器的快速轻量 - 完整的生态环境2.什么是ku ...
随机推荐
- [BZOJ2741][FOTILE模拟赛] L 题解
相当好的题目,虽然和我前几天出的题重了qwq. \(lmx\) 是我们的红太阳,没有他我们就会死!!! 暴力枚举一个端点,然后用可持久化 \(01\ Trie\) 或者离线 \(Trie\)(当然这题 ...
- .NET 使用 DeepSeek R1 开发智能 AI 客户端
前言 最近 DeepSeek 可太火了,在人工智能领域引起了广泛的关注,其强大的自然语言处理能力和智能搜索功能让大家跃跃欲试. 对于 .NET 技术栈的开发来说,一个常见的问题是:能否在 .NET 程 ...
- thymeleaf的手动渲染HTML模板
thymeleaf的手动渲染HTML模板 长河 2018-11-14 11:18:10 6833 收藏 2 分类专栏: Springboot 版权 现在很多公司都在thymeleaf作为前端的显示 ...
- 《基于NLP内容理解》出书
<基于NLP内容理解>出书初心: 1)情怀&梦想:记得自己高中的时候每次冲进我们县城的书店,都能看到书店中央摆放着白岩松老师的一本自传,当时的那种崇拜一直萦绕在自己的心里,想着自己 ...
- JavaUtils - [03] 代码生成器(旧)
题记部分 001 || 引入依赖 <!-- Code Generator --> <dependency> <groupId>com.baomidou</gr ...
- Flink - [02] 安装部署(Standalone)
一.准备 1.角色规划 Flink Standalone 角色规划 节点名称 node01 node02 node03 master ○ worker ○ ○ zookeeper ○ ○ ...
- Opencv | 图形学 | Mingw64 | 如何正确地用MinGW64编译与配置vscode的Opencv环境
如何正确地用MinGW64编译与配置vscode的Opencv环境 1.前情提要 最近有关于图形学的授课,教授开始布置的上机打码的代码实现作业了.虽说教授为了让我们省心,直接就整了个环境已经配置好的几 ...
- .NET 10首个预览版发布:重大改进与新特性概览!
前言 .NET 团队于2025年2月25日发布博文,宣布推出 .NET 10 首个预览版更新,重点改进.NET Runtime.SDK.Libraries .C#.ASP.NET Core.Blazo ...
- Selenium Webdriver 介绍
在前两篇文章中,主要介绍了Selenium IDE 工具及其使用和它的特点,也使用Selenium IDE和Firebug构建了一些脚本.本文,我们开始介绍不同类型的web元素及其定位策略 我们已经非 ...
- Joker 前端框架组件的生命周期:深度解析与实践应用
在 Joker 前端框架的开发体系中,组件的生命周期犹如一颗精准的导航星,指引着开发者构建高效.稳定且富有交互性的应用程序.它完整地涵盖了从组件实例诞生的那一刻起,直至其完成使命被销毁的全过程,每一个 ...