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