文章目录[隐藏]
1、简介
Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。这些虚拟集群被称为命名空间。
Kubernetes中提供了命名空间,但是如果你的团队规模比较小并且集群规模也不大,完全可以不用Namespaces而使用labels来区分不同的资源,随着项目增多、集群规模扩大、人员的增加,你才需要使用Namespaces,通过namespace你可以创建多个虚拟的集群。
Namespaces提供了一种在不同用户间分隔集群资源的方法,未来Kubernetes可能会提供基于命名空间的权限控制。
2、如何使用命名空间
命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。
命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。
命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。
在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略。
不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本:使用 labels 来区分同一命名空间中的不同资源。
3、列出集群中的当前名称空间
[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
4、Kubernetes三个初始名称空间
default :没有其他名称空间的对象的默认名称空间。
kube-system Kubernetes :系统创建的对象的名称空间。
kube-public :该名称空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。此名称空间主要保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间的公共方面仅是约定,不是要求。
5、获取默认名称空间的信息
[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: <none> Annotations: <none> Status: Active No resource quota. No LimitRange resource.
6、创建Namespace
[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
7、在指定名称空间上部署应用
[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
8、设置Context选择命名空间
1.默认命名空间 [root@k8s-001 ~]# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * kubernetes-admin@kubernetes kubernetes kubernetes-admin # 上图说明我们使用了一个名为Default的context,context没有指定命名空间,因此使用了默认命名空间 2.想要将该context使用的命名空间修改成ywm,我们输入 [root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace=ywm Context "kubernetes-admin@kubernetes"modified. 3.查看context配置来验证当前是否选择了ywm [root@k8s-001 ~]# kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * kubernetes-admin@kubernetes kubernetes kubernetes-admin ywm 4.验证我们的kubectl describe命令现在默认使用demo-namespace,它会请求我们的demo-nginx部署而不需要指定命名空间 [root@k8s-001 ~]# kubectl describe deployment demo-nginx|grep Namespace Namespace: ywm
9、删除命名空间并清理
删除命名空间这一功能非常强大,因为它不仅删除命名空间,还会清理其中部署了的所有资源。这一功能非常方便,但是同时如果你一不小心,也会非常危险 1.在删除之前,最好列出和命名空间相关的资源,确定想要删除的对象 [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 <none> 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 2.一旦确定了要操作的范围,可以输入下面的命令删除demo-namespace命名空间和其中的所有资源 [root@k8s-001 ~]# kubectl delete namespace ywm namespace "ywm"deleted 3.命名空间及其资源将从集群中删除 [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
10、初始化命名空间
1.如果你之前在kubectl上下文中更改了所选的命名空间,那么输入下面的命令清除所选的命名空间 [root@k8s-001 ~]# kubectl config set-context $(kubectl config current-context) --namespace= Context "kubernetes-admin@kubernetes"modified. 2.在清理demo资源时,请记住删除我们最初提供给默认命名空间的原始demo-nginx部署 [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. 现在你的集群应该处于一开始的状态了