Kubernetes学习之路(十二)namespace资源

_____egon新书来袭请看:https://egonlin.com/book.html

1、命名空间简介

什么是命名空间?

命名空间或称名称空间顾名思义就是一个隔离的空间,该空间内组织了一个或多个虚拟集群的资源,与其他名称空间的资源隔离。

为何要用命名空间?

k8s中名称空间是用来隔离集群资源/
隔离有很多优点,例如它提供了安全和干净的环境。如果你是基础设施的所属者,并且要为开发者提供环境,隔离就相当重要。你最不需要的就是,一个不熟悉你集群是如何搭建的人去修改系统配置 —— 这可能导致所有人都无法登录。

还有就是:命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额),在 Kubernetes 未来版本中,相同命名空间中的对象默认将具有相同的访问控制策略,k8s中的资源也分为名称空间级资源以及集群级资源。
如何使用命名空间?

命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。当需要名称空间提供的功能时,请开始使用它们。

命名空间为名称提供了一个范围。资源的名称需要在命名空间内是唯一的,但不能跨命名空间。命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。

不需要使用多个命名空间来分隔轻微不同的资源,例如同一软件的不同版本:使用 labels 来区分同一命名空间中的不同资源。

2、列出所有集群的当前名称空间

[root@master01 ~]# kubectl get namespaces
NAME                   STATUS   AGE
default                Active   10d
kube-node-lease        Active   10d
kube-public            Active   10d
kube-system            Active   10d
kubernetes-dashboard   Active   3d23h

3、k8s四个初始名称空间

1)default

创建名称空间级别的资源对象,但未指定从属的名称空间将默认使用default名称空间

2)kube-public

用于为集群上的所有用户(包括未经身份验证的用户)提供公共可用的名称空间,保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间公共方面仅是约定,不是要求。

3)kube-system

用于部署k8s自身相关的组件,不建议在该名称空间中运行与系统无关的工作负载。

3)kube-node-release

目前是专用于放置kubelet lease 对象的名称空间,这些对象对于k8s系统自身健康运行至关重要要。不建议在该名称空间中运行与系统无关的工作负载。

4、获取默认名称空间信息

[root@master01 ~]# kubectl get namespaces
NAME                   STATUS   AGE
default                Active   10d
kube-node-lease        Active   10d
kube-public            Active   10d
kube-system            Active   10d
kubernetes-dashboard   Active   3d23h
[root@master01 ~]# kubectl get namespaces default
NAME      STATUS   AGE
default   Active   10d
[root@master01 ~]# kubectl describe namespaces default
Name:         default
Labels:       <none>
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

5、创建Namespace

# 方法一
[root@master01 ~]# kubectl create namespace test1
namespace/test1 created

# 方法二
[root@master01 ~]# vim test2.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test2
  labels:
    name: test2
[root@master01 ~]# kubectl apply -f test2.yaml 
namespace/test2 created
[root@master01 ~]# kubectl get ns
NAME                   STATUS   AGE
default                Active   10d
kube-node-lease        Active   10d
kube-public            Active   10d
kube-system            Active   10d
kubernetes-dashboard   Active   4d
test1                  Active   77s
test2                  Active   4s

6、在指定的空间部署应用

[root@master01 ~]# kubectl create deployment nginx-deployment --image nginx demo-nginx --namespace=test1
error: exactly one NAME is required, got 2
[root@master01 ~]# kubectl describe deployment nginx-deployment --namespace=test1 | grep Namespace
Namespace:              test1

7、删除名称空间

删除名称空间这一功能非常强大,因为它不仅删除名称空间,还会清理其中部署的所有资源

1)查看名称空间的资源

[root@master01 ~]# kubectl get all --namespace=test1
NAME                                    READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-5969c7f455-qz8fj   1/1     Running   0          78s

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   1/1     1            1           78s

NAME                                          DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-5969c7f455   1         1         1       78s
[root@master01 ~]# 
[root@master01 ~]# 
[root@master01 ~]# 
[root@master01 ~]# kubectl get deployment --namespace=test1
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   1/1     1            1           2m11s
[root@master01 ~]# kubectl get pods --namespace=test1
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-5969c7f455-qz8fj   1/1     Running   0          2m16s

2)删除名称空间

kubectl delete namespaces test1

# 删除名称空间会将该空间下的所有资源都清除掉
[root@master01 ~]# kubectl delete namespace test1
namespace "test1" deleted
[root@master01 ~]# kubectl get deployment --namespace=test1
No resources found in test1 namespace.
[root@master01 ~]# kubectl get pods --namespace=test1
No resources found in test1 namespace.

 

posted @ 2021-08-31 15:07  linhaifeng  阅读(731)  评论(0编辑  收藏  举报