概念
1、命名空间组织集群中的资源
2、也可以将命名空间视为虚拟集群
3、创建一个集群,默认分配一个default命名空间
kubectl get namespace
NAME STATUS AGE
default Active 4d17h
kube-node-lease Active 4d17h
kube-public Active 4d17h
kube-system Active 4d17h
kubernetes-dashboard Active 4d17h
作用
1、default:创建集群,会默认创建一个命名空间。通过配置文件创建命名空间是最好的实践
2、kube-node-lease:保存有关心跳的信息节点数,每个节点都有自己的租约对象,决定着这些节点的可用性。
3、kube-public:包含可公开的数据,存在一个配置映射,里边包含可访问的集群信息、验证信息等
4、kube-system:专门为kubernetes使用的,个人开发不应该使用这个命名空间,不要在kube-system中添加或修改资源。它包括System processes、Master and Kubectl process
原因
1、逻辑分组:一个集群里有各种各样的资源,例如Deployment、Service、ReplicaSet、Pod等,混杂在一起,很难理解它们的用途和作用。一个更好的实践是将资源分组到不同的命名空间,用于各种用途,它是一种逻辑分组的方式。将资源分配到明确指定用途的命名空间,不论项目有多小,用户有多少,分组是最好的管理方式。
2、团队隔离:如果放在default命名空间,不同团队在创建资源时,除非事先严格规范了配置的命名,并且不会出错,否则总会出现命名冲突问题,导致配置被不期望的覆盖掉了。限制不同团队访问的资源,隔离最小的影响范围。
3、资源共享:另一个用途是在不同的开发环境进行资源共享。
4、版本发布:期望在集群中拥有多个版本,在蓝绿部署时切换不同的版本,而不需要为这些版本搭建新的集群。
5、资源配额:每个命名空间都会消耗 CPU、RAM、Storage,为了不同团队都能分配合适的资源,在命名空间内增加资源配额
特性
1、不能访问来自其他命名空间的大部分资源,每个命名空间必须定义自己的ConfigMap才能访问外部资源。
例如要想访问DB,则必须在Project A 创建一个ConfigMap 映射到 DB。同样的,Project B也必须创建一个相同的ConfigMap才能访问相同的DB,Project B不允许直接访问DB或直接引用Project A。这个规则通用适用于Secret。
2、可以访问在另一命名空间中定义的Service
3、在整个集群中可见
在命名空间中创建组件
#mysql-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-configmap
data:
db_url: mysql-service
#mysql-configmap-withnamespace.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-configmap
namespace: my-namespace #使用文档化指定namespace
data:
db_url: mysql-service
kubectl apply -f mysql-configmap.yaml
kubectl get configmap -o yaml
- apiVersion: v1
data:
db_url: mysql-service
kind: ConfigMap
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","data":{"db_url":"mysql-service"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"mysql-configmap","namespace":"default"}}
creationTimestamp: "2022-03-16T22:48:30Z"
name: mysql-configmap 👈👈
namespace: default 👈👈
resourceVersion: "292146"
uid: 1fd10bda-ff05-4bef-8a57-94e6d99cb188
kind: List
metadata:
resourceVersion: ""
selfLink: ""
kubectl apply -f mysql-configmap-withnamespace.yaml
kubectl get configmap -A
NAMESPACE NAME DATA AGE
default kube-root-ca.crt 1 5d9h
kube-node-lease kube-root-ca.crt 1 5d9h
kube-public cluster-info 1 5d9h
kube-public kube-root-ca.crt 1 5d9h
kube-system coredns 1 5d9h
kube-system extension-apiserver-authentication 6 5d9h
kube-system kube-proxy 2 5d9h
kube-system kube-root-ca.crt 1 5d9h
kube-system kubeadm-config 1 5d9h
kube-system kubelet-config-1.23 1 5d9h
kubernetes-dashboard kube-root-ca.crt 1 5d9h
kubernetes-dashboard kubernetes-dashboard-settings 0 5d9h
my-namespace kube-root-ca.crt 1 7m42s
my-namespace mysql-configmap 1 7m31s