命令空间类似于C++中的命名空间,当用户数量较多的集群,才会去考虑创建或考虑命名空间。
K8s支持多个虚拟集群,就是将一个物理集群虚拟成很多个虚拟集群。这些虚拟集群被称为命名空间。
namespace是k8s集群级别的资源,可以给不同的
用户,租户,环境或者项目创建对应的命名空间。例如,可以为test,devlopment,production环境分别创建格子的命名空间。
#查看名称空间以及资源对象
k8s提供几个默认的名称空间,default,kube-system等
//查看所有名称空间或者单个名称空间详细信息
kubectl get namespace或kubectl describe namespace $NAME

#管理namespace资源
创建:kubectl create namespace qa
删除:kubectl delete namespace qa
#创建一个test命名空间
kubectl create ns test

#切换命名空间
kubectl config set-context --current --namespace=kube-system

切换后,kubectl get pods,如果不指定-n就是查看的kube-system空间的资源。
#查看哪些资源熟悉命名空间级别的
kubectl api-resources --namespaced=true

namespace是命名空间,里面有很多资源,我们可以对命名空间做个资源限制,防止命名空间部署资源超过限制。
#编写namespace资源清单namespace-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
namespace: test
spec:
hard:
requests.cpu: "2"
requests.memory: 2G
limits.cpu: "4"
limits.memory: 4GI
创建ResourceQuota对象将在test命名空间中添加硬件限制
#编写pod资源清单pod-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-test
namespace: test
labels:
app: tomcat-pod-test
spec:
containers:
- name: tomcat-test
ports:
- containerPort: 8080
image: xianchao/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
#创建pod
kubectl apply -f pod-test.yaml
在k8s中,大部分资源都可以打标签。类似别名,方便记忆
#对已经存在的pod打标签
[root@xianchaomaster1~]# kubectl label pods pod-first release=v1
查看标签是否打成功:
[root@xianchaomaster1~]# kubectl get pods pod-first --show-labels
显示如下,显示如下,说明标签达成功了;
NAME READY STATUS RESTARTS AGE LABELS
pod-first 1/1 Running 1 21h release=v1, app=tomcat-pod-first
#查看默认名称空间下所有pod资源的标签
[root@xianchaomaster1~]# kubectl get pods --show-labels
#查看默认名称空间下指定pod具有的所有标签
[root@xianchaomaster1~]# kubectl get pods pod-first --show-labels
#列出默认名称空间下标签key是release的pod,不显示标签
[root@xianchaomaster1~]# kubectl get pods -l release
#列出默认名称空间下标签key是release、值是v1的pod,不显示标签
[root@xianchaomaster1~]# kubectl get pods -l release=v1
#列出默认名称空间下标签key是release的所有pod,并打印对应的标签值
[root@xianchaomaster1~]# kubectl get pods -L release
#查看所有名称空间下的所有pod的标签
[root@xianchaomaster1 ~]# kubectl get pods --all-namespace --show-labels
[root@xianchaomaster1 ~]# kubectl get pods -l release=v1 -L release
NAME READY STATUS RESTARTS AGE RELEASE
pod-first 1/1 Running 0 13h v1