Kubernetes命名空间及标签

命名空间(namespace)是Kubernetes提供的组织机制,用于给集群中的任何对象组进行分类、筛选和管理。每一个添加到Kubernetes集群的工作负载必须放在一个命名空间中。

命名空间的作用:

1、命名空间为集群中的对象名称赋予作用域,有效实现隔离。虽然在命名空间中名称必须是唯一的,但是相同的名称可以在不同的命名空间中使用。这对于某些场景来说可能帮助很大。例如,如果使用命名空间来划分应用程序生命周期环境(如开发、测试、生产),则可以在每个环境中维护利用同样的名称维护相同对象的副本。

2、命名空间还可以让用户轻松地将策略应用到集群的具体部分。

3、使用命名空间最大的好处之一是能够利用Kubernetes RBAC(基于角色的访问控制)。

预配置的Kubernetes命名空间

在我们进行创建命名空间之前,先讨论一下Kubernetes是如何自动设置它的。在默认情况下,新的集群上有三个命名空间:

  • default:向集群中添加对象而不提供命名空间,这样它会被放入默认的命名空间中。在创建替代的命名空间之前,该命名空间会充当用户新添加资源的主要目的地,无法删除。
  • kube-public:kube-public命名空间的目的是让所有具有或不具有身份验证的用户都能全局可读。这对于公开bootstrap组件所需的集群信息非常有用。它主要是由Kubernetes自己管理。
  • kube-system:kube-system命名空间用于Kubernetes管理的Kubernetes组件,一般规则是,避免向该命名空间添加普通的工作负载。它一般由系统直接管理,因此具有相对宽松的策略。

命名空间命令操作

1、显示集群中所以命名空间:

[root@localhost ~]# kubectl get namespaces
NAME          STATUS   AGE
default       Active   2d22h
kube-public   Active   2d22h
kube-system   Active   2d22h

2、查看指定命名空间下的pod对象

[root@localhost ~]# kubectl get pods -n kube-system
NAME                                    READY   STATUS    RESTARTS   AGE
coredns-6c66ffc55b-w9zcb                1/1     Running   0          2d22h
etcd-minikube                           1/1     Running   0          2d22h
kube-addon-manager-minikube             1/1     Running   5          2d22h
kube-apiserver-minikube                 1/1     Running   1          2d22h
kube-controller-manager-minikube        1/1     Running   0          2d22h
kube-proxy-bjq4n                        1/1     Running   0          2d22h
kube-scheduler-minikube                 1/1     Running   5          2d22h
kubernetes-dashboard-6d97598877-xmhkp   1/1     Running   0          2d22h
storage-provisioner                     1/1     Running   0          2d22h
[root@localhost ~]# 

3、创建命名空间demo-test

[root@localhost ~]# kubectl create namespace demo-test
namespace/demo-test created
[root@localhost ~]# 

4、删除命名空间

[root@localhost ~]# kubectl get namespaces
NAME          STATUS   AGE
default       Active   2d22h
demo-test     Active   2m7s
kube-public   Active   2d22h
kube-system   Active   2d22h
[root@localhost ~]# 
[root@localhost ~]# kubectl delete namespace demo-test
namespace "demo-test" deleted
[root@localhost ~]#

5、查看所有pod所属的命名空间

[root@localhost ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY   STATUS    RESTARTS   AGE
default       nginx-55bd7c9fd-9jhg2                   1/1     Running   0          2d22h
default       nginx-55bd7c9fd-cphvg                   1/1     Running   0          2d22h
default       nginx-55bd7c9fd-s4lnk                   1/1     Running   0          2d20h
kube-system   coredns-6c66ffc55b-w9zcb                1/1     Running   0          2d22h
kube-system   etcd-minikube                           1/1     Running   0          2d22h
kube-system   kube-addon-manager-minikube             1/1     Running   5          2d22h
kube-system   kube-apiserver-minikube                 1/1     Running   1          2d22h
kube-system   kube-controller-manager-minikube        1/1     Running   0          2d22h
kube-system   kube-proxy-bjq4n                        1/1     Running   0          2d22h
kube-system   kube-scheduler-minikube                 1/1     Running   5          2d22h
kube-system   kubernetes-dashboard-6d97598877-xmhkp   1/1     Running   0          2d22h
kube-system   storage-provisioner                     1/1     Running   0          2d22h
[root@localhost ~]# 

6、指定命名空间

# kubectl create -f xxx.yaml -n namespace_name
或者
[root@localhost ~]# kubectl create deployment nginx --image=nginx -n demo-test

7、获取命名空间的详细信息,使用kubectl describe命令:

[root@localhost ~]# kubectl describe namespace kube-system
Name:         kube-system
Labels:       <none>
Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                {"apiVersion":"v1","kind":"Namespace","metadata":{"annotations":{},"name":"kube-system","namespace":""}}
Status:       Active

No resource quota.

No resource limits.
[root@localhost ~]# 

K8S——Label(标签)

查看标签

需要使用--showlabels选项来查看pod的标签

#查看pod的标签
[root@k8s-master ~]# kubectl get pod --show-labels
NAME                             READY   STATUS    RESTARTS   AGE   LABELS
nginx-deploy-868855d887-2qc44    1/1     Running   0          45m   app=nginx,pod-template-hash=868855d887
nginx-deploy-868855d887-6l884    1/1     Running   0          18h   app=nginx,pod-template-hash=868855d887
nginx-deploy-868855d887-sbqjq    1/1     Running   0          18h   app=nginx,pod-template-hash=868855d887
tomcat-deploy-7bf9b544c7-4vnsx   1/1     Running   0          45m   app=tomcat,pod-template-hash=7bf9b544c7
tomcat-deploy-7bf9b544c7-6cm5f   1/1     Running   0          16h   app=tomcat,pod-template-hash=7bf9b544c7
tomcat-deploy-7bf9b544c7-bwhsq   1/1     Running   0          16h   app=tomcat,pod-template-hash=7bf9b544c7
[root@k8s-master ~]# 
#查看node标签
[root@k8s-master ~]# kubectl get node --show-labels
NAME         STATUS   ROLES    AGE     VERSION   LABELS
k8s-master   Ready    master   5d18h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node01   Ready    <none>   5d17h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,isIngress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node01,kubernetes.io/os=linux
k8s-node02   Ready    <none>   5d17h   v1.18.0   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,isIngress=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node02,kubernetes.io/os=linux
[root@k8s-master ~]# 

#指定标签的key值查询
[root@k8s-master ~]# kubectl get pod -L app
NAME                             READY   STATUS    RESTARTS   AGE   APP
nginx-deploy-868855d887-2qc44    1/1     Running   0          46m   nginx
nginx-deploy-868855d887-6l884    1/1     Running   0          18h   nginx
nginx-deploy-868855d887-sbqjq    1/1     Running   0          18h   nginx
tomcat-deploy-7bf9b544c7-4vnsx   1/1     Running   0          46m   tomcat
tomcat-deploy-7bf9b544c7-6cm5f   1/1     Running   0          16h   tomcat
tomcat-deploy-7bf9b544c7-bwhsq   1/1     Running   0          16h   tomcat
[root@k8s-master ~]# 

 根据svc、pod的标签,进行服务筛选:

[root@localhost nginx-ingress]# kubectl get pod -n monitoring -l app=prometheus
NAME               READY   STATUS    RESTARTS   AGE
prometheus-k8s-0   2/2     Running   1          54m
prometheus-k8s-1   2/2     Running   1          54m
[root@localhost nginx-ingress]# 
[root@hz01 nginx-ingress]# kubectl get svc -n monitoring -l app=grafana
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
grafana   NodePort   192.168.87.255   <none>        3000:30712/TCP   27h
原文地址:https://www.cnblogs.com/saneri/p/13553979.html