• 欢迎访问显哥博客,本网站纯属学习技术,绝无商业用途,欢迎小伙伴们共同学习!研究技术!QQ:52249909 加我QQ
  • 世界75亿人,这么小的概率,能认识你,是我一生的幸运,不妨加个QQ接触一下:52249909 加我QQ

K8S命名空间Namespaces【显哥出品,必为精品】

K8S lixian 4年前 (2021-04-09) 2113次浏览 1个评论 扫描二维码
文章目录[隐藏]

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.
现在你的集群应该处于一开始的状态了

本站博主 , 版权所有丨如未注明 , 均为原创
转载请注明原文链接:K8S命名空间Namespaces【显哥出品,必为精品】
喜欢 (2)

您必须 登录 才能发表评论!

(1)个小伙伴在吐槽
  1. 好喜欢
    匿名2021-04-17 23:00