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.