k8s入门知识之命名空间

158 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

简介

Namespace是kubernetes系统中的一种非常重要的资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。

默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。

ns.png

而kubernetes在集群启动之后,会默认创建几个namespace如下所示:

[root@master ~]# kubectl get namespaces 
NAME              STATUS   AGE
default           Active   17h    # 所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease   Active   17h    # 集群节点之间的心跳维护,v1.13开始引入
kube-public       Active   17h    # 此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system       Active   17h    # 所有由Kubernetes系统创建的资源都处于这个命名空间

操作

1、查看

a.查看所有的namespace 命令:kubectl get ns

[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   17h
dev               Active   15h
kube-node-lease   Active   17h
kube-public       Active   17h
kube-system       Active   17h

b.查看指定的ns 命令:kubectl get ns ns名称

[root@master ~]# kubectl get namespaces kube-system 
NAME          STATUS   AGE
kube-system   Active   17h

c.指定输出格式 命令:kubectl get ns ns名称 -o 格式参数,kubernetes支持的格式有很多,比较常见的是wide、json、yaml

[root@master ~]# kubectl get namespaces kube-system -o yaml
apiVersion: v1
kind: Namespace
metadata:
  creationTimestamp: "2022-04-12T08:07:13Z"
  labels:
    kubernetes.io/metadata.name: kube-system
  name: kube-system
  resourceVersion: "22"
  uid: 37c1dacd-f616-4ff5-a2e8-2cbd35d2f8ab
spec:
  finalizers:
  - kubernetes
status:
  phase: Active

d.查看ns详情 命令:kubectl describe ns ns名称

[root@master ~]# kubectl describe ns kube-system 
Name:         kube-system
Labels:       kubernetes.io/metadata.name=kube-system
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.

2、创建命名空间

[root@master ~]# kubectl create ns dev
namespace/dev created
[root@master ~]# kubectl get ns dev 
NAME   STATUS   AGE
dev    Active   10s

3、删除命名空间

[root@master ~]# kubectl delete ns dev 
namespace "dev" deleted

4、配置方式

a.准备配置文件:ns-dev.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: dev

b.启动文件

[root@master temp]# kubectl apply -f ns-dev.yaml 
namespace/dev created
[root@master temp]# kubectl get ns dev 
NAME   STATUS   AGE
dev    Active   7s

感慨

今天初略了解了下k8s,感觉真的强大,细节的知识点真的多,有点学不动了,太强了! 对今天所了解的知识做下记录,如果偏差望大佬指正。