Kubernetes集群命名空间(Namespace)
一、命名空间(namespace)作用
- Namespace是对一组资源和对象的抽象集合.
- 常见的 pod, service, deployment 等都是属于某一个namespace的(默认是 default)
- 不是所有资源都属于namespace,如nodes, persistent volume,namespace 等资源则不属于任何 namespace
二、查看namespace
[root@k8s-master01 ~]# kubectl get namespaces # namespaces可以简写为namespace或ns
NAME STATUS AGE
default Active 130m # 所有未指定Namespace的对象都会被默认分配在default命名空间
kube-node-lease Active 130m
kube-public Active 130m # 此命名空间下的资源可以被所有人访问
kube-system Active 130m # 所有由Kubernetes系统创建的资源都处于这个命名空间
三、查看namespace里的资源
使用kubectl get all --namespace=命名空间名称
可以查看此命名空间下的所有资源
[root@k8s-master01 ~]# kubectl get all --namespace=kube-system
NAME READY STATUS RESTARTS AGE
pod/calico-kube-controllers-7cc8dd57d9-bm5vz 1/1 Running 11 36d
pod/calico-node-9s8bl 1/1 Running 3 36d
pod/calico-node-9wdj6 1/1 Running 2 36d
pod/calico-node-d5qw7 1/1 Running 3 36d
pod/calico-node-pbt77 1/1 Running 3 36d
pod/coredns-675db8b7cc-49nh9 1/1 Running 2 36d
pod/metrics-server-5794ccf74d-2hjwh 1/1 Running 3 35d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.96.0.2 <none> 53/UDP,53/TCP,9153/TCP 36d
service/metrics-server ClusterIP 10.96.102.3 <none> 443/TCP 35d
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/calico-node 4 4 4 4 4 kubernetes.io/os=linux 36d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/calico-kube-controllers 1/1 1 1 36d
deployment.apps/coredns 1/1 1 1 36d
deployment.apps/metrics-server 1/1 1 1 35d
NAME DESIRED CURRENT READY AGE
replicaset.apps/calico-kube-controllers-7cc8dd57d9 1 1 1 36d
replicaset.apps/coredns-675db8b7cc 1 1 1 36d
replicaset.apps/metrics-server-5794ccf74d 1 1 1 35d
replicaset.apps/metrics-server-8bb87844c 0 0 0 35d
使用kubectl get 资源类型 --namespace=命名空间名称
可以查看此命名空间下的对应的资源
[root@k8s-master01 ~]# kubectl get pod --namespace=kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-7cc8dd57d9-bm5vz 1/1 Running 11 36d
calico-node-9s8bl 1/1 Running 3 36d
calico-node-9wdj6 1/1 Running 2 36d
calico-node-d5qw7 1/1 Running 3 36d
calico-node-pbt77 1/1 Running 3 36d
coredns-675db8b7cc-49nh9 1/1 Running 2 36d
metrics-server-5794ccf74d-2hjwh 1/1 Running 3 35d
四、创建namespace
4.1 命令创建
[root@k8s-master01 ~]# kubectl create namespace ns1
namespace/ns1 created
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d1h
kube-node-lease Active 5d1h
kube-public Active 5d1h
kube-system Active 5d1h
ns1 Active 10s
4.2 YAML文件创建
- k8s中几乎所有的资源都可以通YAML编排来创建
- 可以使用
kubectl edit 资源类型 资源名
编辑资源的YAML语法
[root@k8s-master01 ~]# kubectl edit namespace ns1
......
- 也可使用
kubectl get 资源类型 资源名 -o yaml
来查看
[root@k8s-master01 ~]# kubectl get ns ns1 -o yaml
......
- 还可通过
kubectl explain 资源类型
来查看语法文档
[root@k8s-master01 ~]# kubectl explain namespace # 查看namespace相关语法参数
[root@k8s-master01 ~]# kubectl explain namespace.metadata # 查看namespace下级metadata的相关语法参数
[root@k8s-master01 ~]# kubectl explain namespace.metadata.name # 查看namespace下级metadata再下级name的相关语法参数
编写创建namespace的YAML文件
[root@k8s-master01 ~]# vim create_ns2.yml
apiVersion: v1 # api版本号
kind: Namespace # 类型为namespace
metadata: # 定义namespace的元数据属性
name: ns2 # 定义name属性为ns2
使用kubctl apply -f
应用YAML文件
[root@k8s-master01 ~]# kubectl apply -f create_ns2.yml
namespace/ns2 created
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d2h
kube-node-lease Active 5d2h
kube-public Active 5d2h
kube-system Active 5d2h
ns1 Active 10m
ns2 Active 46s
五、删除namespace
注意:
- 删除一个namespace会自动删除所有属于该namespace的资源(类似mysql中drop库会删除库里的所有表一样,请慎重操作)
- default,kube-system,kube-public命名空间不可删除
5.1 命令删除
[root@k8s-master01 ~]# kubectl delete namespace ns1
namespace "ns1" deleted
5.2 YAML文件删除
[root@k8s-master01 ~]# kubectl delete -f create_ns2.yml
namespace "ns2" deleted
[root@k8s-master01 ~]# kubectl get ns
NAME STATUS AGE
default Active 5d2h
kube-node-lease Active 5d2h
kube-public Active 5d2h
kube-system Active 5d2h