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 ...
随机推荐
- 在 PyTorch 中理解词向量,将单词转换为有用的向量表示
你要是想构建一个大型语言模型,首先得掌握词向量的概念.幸运的是,这个概念很简单,也是本系列文章的一个完美起点. 那么,假设你有一堆单词,它可以只是一个简单的字符串数组. animals = [&quo ...
- Excel中使用VLOOKUP对两个单元格关联
一.背景 exl中需要关联两个Excel,根据主键合并两个单元格数据 二.使用方法 1.表1---列包含在id.姓名.年龄 2.表2---列包含姓名.性别 3.期望根据[姓名]列为主键,关联两个表数据 ...
- StarUML画类图
1.Classes说明 [1]Class 类 [2]Interface 接口 [8]Generalization A与B的泛化关系,A继承B.继承非抽象类 [9]Interface Realizat ...
- mybatis之xml简单映射,解决实体类属性字段与数据库表字段不一致问题
当实体类属性字段与数据库表字段不一致时该怎么办? 方法一:起别名 <select id="getUserList" resultType="RealUser&quo ...
- .Net Core WebAPI部署多服务器配置Nginx负载均衡
下载Nginx包: https://nginx.org/en/download.html 首先下载Nginx包 注意:下载路径必须为英文,不能到中文: 启动Nginx: 打开刚刚下载的Nginx包,然 ...
- 在table中tr的display:block显示布局错乱问题
参考链接:https://blog.csdn.net/zj853975468/article/details/51554054?utm_medium=distribute.pc_relevant_do ...
- 附039.Kubernetes_v1.32.2高可用部署架构二
部署组件 该 Kubernetes 部署过程中,对于部署环节,涉及多个组件,主要有 kubeadm .kubelet .kubectl. kubeadm介绍 Kubeadm 为构建 Kubernete ...
- Processing中获取表格数据( .tsv\.csv )的经验分享
在日常收集数据的需求中,会有很多场合用到表格数据类型,如.tsv和.csv,一来高效查看和编辑,二来数据条理清晰,导入数据结构方便.在Prcocessing中帮我预留好了loadTable().loa ...
- PHP开发技巧:如何实现数据过滤功能
输入过滤 输出过滤 1.输入过滤 1.1前端验证 JavaScript的方式,正则等,(略) 1.2后端验证 1.2.1 使用filter_var函数 PHP提供了filter_var函数用于过滤和验 ...
- PLSQL Developer使用大全
第一章 PLSQL Developer特性 PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发.如今,有越来越多的商业逻辑和应用逻辑转向了Oracle S ...