namespace
namespace 是对一组资源和对象的抽象集合,比如可以用来将系统内部的对象划分为不同的项目组或用户组。常见的 pod, service, replication controller 和 deployment 等都是属于某一个 namespace 的(默认是 default),而 node, persistent volume,namespace 等资源则不属于任何 namespace。
resourcequota
namespace作为抽象集合,那么resourcequota 就是对抽象集合的限制,resourcequota作为限制用户资源用量的一种机制,有着以下的资源配额配置:
- 计算资源,包括 cpu 和 memory
- cpu, limits.cpu, requests.cpu
- memory, limits.memory, requests.memory
- 存储资源,包括存储资源的总量以及指定 storage class 的总量
- requests.storage:存储资源总量,如 500Gi
- persistentvolumeclaims:pvc 的个数
- .storageclass.storage.k8s.io/requests.storage
- .storageclass.storage.k8s.io/persistentvolumeclaims
- requests.ephemeral-storage 和 limits.ephemeral-storage (需要 v1.8+)
- 对象数,即可创建的对象的个数
- pods, replicationcontrollers, configmaps, secrets
- resourcequotas, persistentvolumeclaims
- services, services.loadbalancers, services.nodeports
配置了resourcequota,创建相关资源,若超过配额,则不允许创建
【拓展】serviceaccount
Serviceaccount 是为了方便pod里面的进程调用kubernetes API 或其他外部服务而设计的
Serviceaccount 特性
- 每个namespace都会自动创建一个default service account
- Token controller 检测 serviceaccount的创建,会为他们创建secret
Serviceaccount demo
apiVersion: v1 kind: ServiceAccount metadata: name: default namespace: default secrets: - name: default-token-qffvz
因namespace 默认生成的serviceaccount,其name默认为default,因token controller 默认生成的secret,其name默认格式default-token-xxx
Kube-apiserver 配置--admission-control,来选择配置admission controller,admission controller可以认为是过滤器,他会根据某些策略过滤或修改请求数据,其中有个controller为ServiceAccount admission controller。
ServiceAccount admission controller
ServiceAccount admission controller 启用后:
每个pod在创建后都会自动创建 spec.serviceaccountName 为default (除非指定了其他的serviceaccount)
验证Pod 引用的serviceaccount 已经存在,否则拒绝创建该pod。
如果Pod 没有指定imagePullSecret ,则会把service account 的imagePullsecrets 加到pod中
每个pod创建都会将service account的token 和 ca.crt 挂载到
/var/run/secrets/kubernetes.io/serviceaccount/
实际操作:
// 创建 名为test的namespace
kubectl create ns test
// 查看是否创建出该namespace
kubectl get ns
// 查看是否存在名为default的serviceaccount
kubectl get sa default –n test -o yaml