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 ...
随机推荐
- 聊聊DeepSeek的MLA和GRPO
关注公众号回复1 获取一线.总监.高管<管理秘籍> 结合近期对DeepSeek的探索,对之前文章的内容做一些更新,主要是两个方面:训练过程的优化策略GRPO,以及架构侧的一个创新MLA. ...
- YASKAWA安川DX100控制柜维修看这几步
维修YASKAWA安川DX100控制柜需要综合运用多种诊断技巧,并遵循严格的安全操作规程.通过预防性维护和及时的故障处理,可以显著提高DX100控制柜的可靠性和使用寿命,从而保障企业生产线的稳定运行. ...
- D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> off
D pid(16916) tid(19140) 14:05:45 EdgeSnapFeature::PostExitSizeMove: WM_TWINVIEW_SHOW_GRIDLINES -> ...
- Typecho弹出find Input author error怎么解决
大多数报错的起因就是因为,有些模板归档页面的评论功能被阉割掉了 于是导致一些评论验证功能的插件爆这个错误. #解决方法有以下三种 1,编辑这些没有评论功能的页面,高级设置,关闭评论,然后发布文章. 2 ...
- 面试题32 - II. 从上到下打印二叉树 II
地址:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/ <?php /** 面试题32 ...
- php框架里面数组合并的方法
php框架里面用call_user_func_array(array($dispatch, $actionName), $param);传参的时候,接收的$actionName方法不能接收数组参数. ...
- excel 日期列显示到日
原来显示 效果图: 步骤
- 非局域网远程访问MySQL
使用内网穿透解决,市面上说道最多的是"花生壳" 主要操作见这篇官方说明 但其中提到的什么花生棒(第二.三点)完全不用管,应该算是产品推销. 登录后选"新增内网映射&quo ...
- vue强制刷新页面
方法一 this.$router.go(0) // 会出现一段空白页,用户体验不好 方法二 在 app.vue 中定义 reload() 方法 <template> <div id= ...
- EmlBuilder:一款超轻量级的EML格式电子邮件阅读和编辑工具
EmlBuilder 是一款超轻量级的电子邮件阅读和编辑工具,针对EML格式的文件具有非常强大的解析和容错能力,可实现超文本邮件的编写,并具备内嵌图片的编辑功能.该工具内部使用EmlParse对电子邮 ...