4、Kubernetes 命名空间

211 阅读3分钟

Namespace类似于Linux系统中用户的概念,通过将系统内部的对象分配到不同的Namespace中,形成逻辑上的分,便于不同的分组在共享集群资源的同时还能被分别管理。

Kubernetes三个初始名称空间

default:未指定Namespace的对象都会被分配在default命名空间。

kube-system:由Kubernetes系统创建的资源都处于这个命名空间。

kube-public:该名称空间是自动创建的,并且对所有用户(包括未经身份验证的用户)可读。此名称空间主要保留给集群使用,以防某些资源在整个集群中公开可见。此名称空间的公共方面仅是约定,不是要求。

NameSpace操作

1、列出当前的命名空间

 [root@k8s-1 ~]# kubectl get namespace
 NAME                   STATUS   AGE
 default                Active   36d
 ingress-nginx          Active   28d
 kube-node-lease        Active   36d
 kube-public            Active   36d
 kube-system            Active   36d
 kubernetes-dashboard   Active   33d
 test-nginx             Active   33d

2、获取默认名称空间的信息

 [root@k8s-1 ~]# kubectl get ns default
 NAME      STATUS   AGE
 default   Active   36d
 [root@k8s-1 ~]# kubectl describe ns default
 Name:         default
 Labels:       kubernetes.io/metadata.name=default
 Annotations:  <none>
 Status:       Active
 ​
 No resource quota.
 ​
 No LimitRange resource.

tips:ns是namespace的简写

3、创建Namespace

 [root@k8s-1 k8s-yaml]# cat test-ns.yaml
 apiVersion: v1
 kind: Namespace
 metadata:
     name: test-ns
     labels:
       name: test-ns
       releaes: stable
       
 [root@k8s-1 k8s-yaml]# kubectl apply -f test-ns.yaml
 namespace/test-ns created
 
 [root@k8s-1 ~]# kubectl get ns |grep test-ns
 test-ns                Active   2m37s

4、在指定名称空间上部署应用

 [root@k8s-1 ~]# kubectl get ns |grep test-ns
 test-ns                Active   2m37s
 [root@k8s-1 ~]# kubectl create deployment --image nginx demo-nginx --namespace=test-ns
 deployment.apps/demo-nginx created
 [root@k8s-1 ~]# kubectl describe deployment demo-nginx -ntest-ns
 Name:                   demo-nginx
 Namespace:              test-ns
 CreationTimestamp:      Wed, 12 Jan 2022 11:27:30 +0800
 Labels:                 app=demo-nginx
 Annotations:            deployment.kubernetes.io/revision: 1
 Selector:               app=demo-nginx
 Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
 StrategyType:           RollingUpdate
 MinReadySeconds:        0
 RollingUpdateStrategy:  25% max unavailable, 25% max surge
 Pod Template:
   Labels:  app=demo-nginx
   Containers:
    nginx:
     Image:        nginx
     Port:         <none>
     Host Port:    <none>
     Environment:  <none>
     Mounts:       <none>
   Volumes:        <none>
 Conditions:
   Type           Status  Reason
   ----           ------  ------
   Available      True    MinimumReplicasAvailable
   Progressing    True    NewReplicaSetAvailable
 OldReplicaSets:  <none>
 NewReplicaSet:   demo-nginx-645c888794 (1/1 replicas created)
 Events:
   Type    Reason             Age   From                   Message
   ----    ------             ----  ----                   -------
   Normal  ScalingReplicaSet  23s   deployment-controller  Scaled up replica set demo-nginx-645c888794 to 1

5、设置Context选择命名空间

默认命名空间:default

 # 查看相关配置信息
 [root@k8s-1 ~]# kubectl config get-contexts
 CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
 *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin
 # 在默认命名空间中创建pod
 [root@k8s-1 ~]# kubectl create deployment --image nginx demo2-nginx
 deployment.apps/demo2-nginx created
 ​
 # 查看命名空间中的pods
 [root@k8s-1 ~]# kubectl get pods -n default
 NAME                           READY   STATUS    RESTARTS   AGE
 demo2-nginx-86565c487d-lv9jd   1/1     Running   0          23s

修改默认命名空间

 [root@k8s-1 ~]# kubectl config set-context $(kubectl config current-context) --namespace=test-ns
 Context "kubernetes-admin@kubernetes" modified.
 ​
 [root@k8s-1 ~]# kubectl config get-contexts
 CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
 *         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   test-ns
 # 在默认命名空间中创建pod
 [root@k8s-1 ~]# kubectl create deployment --image nginx demo3-nginx
 deployment.apps/demo3-nginx created
 ​
 # 查看命名空间中的pods
 [root@k8s-1 ~]# kubectl get pods -n test-ns
 NAME                           READY   STATUS    RESTARTS   AGE
 demo-nginx-645c888794-qnf9s    1/1     Running   0          8m55s
 demo3-nginx-564dd667f5-2xhv8   1/1     Running   0          12s

6、删除命名空间并清理

删除命名空间这一功能非常强大也非常危险,因为它不仅删除命名空间,还会清理其中部署了的所有资源(所以在操作时一定要注意)。

 # 查看命名空间中的所有资源
 ​
 [root@k8s-1 ~]# kubectl get all -n test-ns
 NAME                               READY   STATUS    RESTARTS   AGE
 pod/demo-nginx-645c888794-qnf9s    1/1     Running   0          13m
 pod/demo3-nginx-564dd667f5-2xhv8   1/1     Running   0          4m58s
 ​
 NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
 deployment.apps/demo-nginx    1/1     1            1           13m
 deployment.apps/demo3-nginx   1/1     1            1           4m58s
 ​
 NAME                                     DESIRED   CURRENT   READY   AGE
 replicaset.apps/demo-nginx-645c888794    1         1         1       13m
 replicaset.apps/demo3-nginx-564dd667f5   1         1         1       4m58s
 # 删除命名空间
 [root@k8s-1 ~]# kubectl delete namespace test-ns
 namespace "test-ns" deleted
 # 删除demo资源
 [root@k8s-1 ~]# kubectl delete deployment demo2-nginx
 deployment.apps "demo2-nginx" deleted