Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。这些虚拟集群被称为命名空间。
命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。
命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。
命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。
在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略。
不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本:使用 labels 来区分同一命名空间中的不同资源。
[root@k8s-001 k8s]# kubectl get namespaces
NAME STATUS AGE
default Active 8h
kube-node-lease Active 8h
kube-public Active 8h
kube-system Active 8h
default
没有其他名称空间的对象的默认名称空间。
kube-system
Kubernetes系统创建的对象的名称空间。
kube-public
该名称空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。此名称空间主要保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间的公共方面仅是约定,不是要求。
[root@k8s-001 k8s]# kubectl get namespaces default
NAME STATUS AGE
default Active 3h53m
# 或者使用
[root@k8s-001 k8s]# kubectl describe namespaces default
Name: default
Labels:
Annotations:
Status: Active
No resource quota.
No LimitRange resource.
[root@k8s-001 k8s]# cat name-server.yaml
apiVersion: v1
kind: Namespace
metadata:
name: ywm
labels:
name: ywm
[root@k8s-001 k8s]# kubectl apply -f name-server.yaml
namespace/ywm created
[root@k8s-001 k8s]# kubectl get namespaces
ywm Active 3m22s
[root@k8s-001 k8s]# kubectl create deployment --image nginx demo-nginx --namespace=ywm
deployment.apps/demo-nginx created
[root@k8s-001 k8s]# kubectl describe deployment demo-nginx --namespace=ywm |grep Namespace
Namespace: ywm
[root@k8s-001 ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
# 上图说明我们使用了一个名为Default的context,context没有指定命名空间,因此使用了默认命名空间
[root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=ywm
Context "kubernetes-admin@kubernetes"modified.
[root@k8s-001 ~]# kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin ywm
[root@k8s-001 ~]# kubectl describe deployment demo-nginx|grep Namespace
Namespace: ywm
删除命名空间这一功能非常强大,因为它不仅删除命名空间,还会清理其中部署了的所有资源。这一功能非常方便,但是同时如果你一不小心,也会非常危险
[root@k8s-001 ~]# kubectl get all --namespace=ywm
NAME READY STATUS RESTARTS AGE
pod/demo-nginx-5595f574b7-dg5gq 1/1 Running 0 88m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nginx-service NodePort 10.96.90.242 80:32601/TCP 121m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/demo-nginx 1/1 1 1 88m
NAME DESIRED CURRENT READY AGE
replicaset.apps/demo-nginx-5595f574b7 1 1 1 88m
[root@k8s-001 ~]# kubectl delete namespace ywm
namespace "ywm"deleted
[root@k8s-001 ~]# kubectl get namespace
NAME STATUS AGE
default Active 6h14m
kube-node-lease Active 6h14m
kube-public Active 6h14m
kube-system Active 6h14m
kubernetes-dashboard Active 5h57m
[root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=
Context "kubernetes-admin@kubernetes"modified.
[root@k8s-001 ~]# kubectl delete deployment demo-nginx
Error from server (NotFound): deployments.apps "demo-nginx"not found
[root@k8s-001 ~]# kubectl get deployment
No resources found indefault namespace.
现在你的集群应该处于一开始的状态了
如果文章有任何错误欢迎不吝赐教,其次大家有任何关于运维的疑难杂问,也欢迎和大家一起交流讨论。关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。群主还经营一家Orchis饰品店,喜欢的小伙伴欢迎????前来下单。
扫描二维码
获取更多精彩
运维猫公众号
有需要技术交流的小伙伴可以加我微信,期待与大家共同成长,本人微信:
扫描二维码
添加私人微信
运维猫博主
扫码加微信
最近有一些星友咨询我知识星球的事,我也想继续在星球上发布更优质的内容供大家学习和探讨。运维猫公众号平台致力于为大家提供免费的学习资源,知识星球主要致力于即将入坑或者已经入坑的运维行业的小伙伴。