命名空间 namespace 基本介绍
命名空间或者名称空间.
k8s 支持多个虚拟集群, 它们底层依赖于同一个物理集群. 这些虚拟集群被称为命名空间.
kubectl get nodes获取所有节点.kubectl get namespaces获取所有命名空间. 或者kubectl get ns.kubectl create ns test创建名为test的命名空间.kubectl describe ns 命名空间查看命名空间详情.kubectl delete ns 名称空间删除名称空间. 删除 namespace 会级联的删除其包含的所有其他资源对象.
namespace 应用场景说明
kube-system 命名空间为运行系统级资源的命名空间, 存放 k8s 的一些组件. 而 default 则为未指定名称空间的资源操作提供的一个默认值.
创建名称空间
kubectl config set-context --current --namespace=kube-system切换命名空间. 切换命名空间后,kubectl get pods如果不指定-n查看的就是kube-system命名空间的资源了.kubectl api-resources --namespaced=true查看哪些资源需要使用到命名空间. 即命名空间级别的资源.
命名空间资源限制
namespace 是命名空间, 里面有很多资源. 那么我们可以对命名空间资源做个限制, 放置该命名空间部署的资源超过限制.
vim namespace-quota.yaml 创建资源文件, 资源文件编写的帮助信息可以通过 kubectl explain resourcequota 进行查看:
apiVersion: v1
kind: ResourceQuota # 指定对资源做限制.
metadata:
name: mem-cpu-quota
namespace: test
spec:
hard: # 对硬件的限制.
requests.cpu: "2" # CPU 请求总额不得超过 2 CPU.
requests.memory: 2Gi # 容器内存请求总额不得超过 2GiB.
limits.cpu: "4" # CPU 限额总额不得超过 4CPU.
limits.memory: 4Gi # 内存限额总额不得超过 4GiB.
创建完毕之后, 执行 kubectl apply -f namespace-quota.yaml 应用配置. 执行 kubectl describe ns test 查看属性. 同时也可以执行 kubectl get resourcequota -n test 查看 test 命名空间的资源配额属性.
vim pod-test.yaml 创建资源文件, 执行 kubectl explain pods 查看编写的帮助信息:
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
imagePullPolicy: IfNotPresent
resources:
limits:
memory: "2Gi"
cpu: "2"
requests:
memory: "100Mi"
cpu: "500m"
执行 kubectl apply -f pod-test.yaml 应用并生成 pod. 执行 kubectl get pods -n test 获取 pod 信息. 执行 kubectl describe pods pod-test -n test 获取详细信息. 如果命名空间设置了资源配额, 则各个 pod 在创建的时候必须有 spec.resources 字段, 且其中的配置项不能大于命名空间中的配额.
资源标签 labels 具体使用方法
标签其实就是一堆 key/value, 被关联到对象上. 标签可以在创建一个对象的时候直接定义, 也可以在后期随时修改. 每一个对象可以拥有多个标签, 但是, key 值必须是唯一的. 创建标签之后也可以方法我们对资源进行分组管理. 如果对 pod 打标签, 之后就可以使用标签来查看, 删除指定的 pod. 在 k8s 中, 大部分资源都可以打标签.
kubectl label pods --help查看如何给 pod 打标签.kubectl label pods [pod名称] [key]=[val]给指定的 pod 打上标签.kubectl get pods [pod名称] --show-labels显示 pod 的标签.kubectl get pods --show-labels获取所有 pod 及其标签.kubectl get pods -l release=v1获取所有拥有 release-v1 标签的 pod.kubectl get pods -l release=v1 -L release将 release 作为列显示出来.