命名空间(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