命名空间
命名空间
什么是命名空间
- Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。
- 命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间,例如,可以为test、devlopment、production环境分别创建各自的命名空间。
namespace应用场景
- 命名空间适用于存在很多跨多个团队或项目的用户的场景。对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间。
namespacs使用案例分享
- 创建一个test命名空间
kubectl create ns test
namespace资源限额
对namespace资源做限额
vim namespace-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-quota
namespace: test
spec:
hard:
requests.cpu: "2"
requests.memory: 2Gi
limits.cpu: "4"
limits.memory: 4Gi
kubectl apply -f namespace-quota.yaml
- 创建的ResourceQuota对象将在test名字空间中添加以下限制:
- 每个容器必须设置内存请求(memory request),内存限额(memory limit),cpu请求(cpu request)和cpu限额(cpu limit)。
所有容器的内存请求总额不得超过2GiB。
所有容器的内存限额总额不得超过4 GiB。
所有容器的CPU请求总额不得超过2 CPU。
所有容器的CPU限额总额不得超过4CPU。 - ResouceQuota 对象是在我们的名称空间中创建的,并准备好控制该名称空间中的所有容器的总请求和限制。让我们看看
创建pod时候必须设置资源限额,否则创建失败,如下:
vim 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: tomcat/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
resources:
requests:
memory: "100Mi"
cpu: "500m"
limits:
memory: "2Gi"
cpu: "2"
kubectl apply -f pod-test.yaml
标签
什么是标签
标签其实就一对 key/value ,被关联到对象上,比如Pod,标签的使用我们倾向于能够表示对象的特殊特点,就是一眼就看出了这个Pod是干什么的,标签可以用来划分特定的对象(比如版本,服务类型等),标签可以在创建一个对象的时候直接定义,也可以在后期随时修改,每一个对象可以拥有多个标签,但是,key值必须是唯一的。创建标签之后也可以方便我们对资源进行分组管理。如果对pod打标签,之后就可以使用标签来查看、删除指定的pod。
在k8s中,大部分资源都可以打标签。
给pod资源打标签
kubectl apply -f pod-first.yaml
vim pod-first.yaml
apiVersion: v1
kind: Pod
metadata:
name: tomcat-test
namespace: default
labels:
app: tomcat
spec:
containers:
- name: tomcat-java
ports:
- containerPort: 8080
image: tomcat/tomcat-8.5-jre8:v1
imagePullPolicy: IfNotPresent
对已经存在的pod打标签
kubectl label pods tomcat-test release=v1
查看标签是否打成功:
kubectl get pods tomcat-test --show-labels
显示如下,说明标签达成功了;
NAME READY STATUS RESTARTS AGE LABELS
tomcat-test 1/1 Running 1 21h release=v1, app=tomcat-pod-first
查看资源标签
查看默认名称空间下所有pod资源的标签
kubectl get pods --show-labels
查看默认名称空间下指定pod具有的所有标签
kubectl get pods tomcat-test --show-labels
列出默认名称空间下标签key是release的pod,不显示标签
kubectl get pods -l release
列出默认名称空间下标签key是release、值是v1的pod,不显示标签
kubectl get pods -l release=v1
列出默认名称空间下标签key是release的所有pod,并打印对应的标签值
kubectl get pods -L release
查看所有名称空间下的所有pod的标签
kubectl get pods --all-namespaces --show-labels