文章目录1.为什么要有名字空间2.如何使用名字空间3.什么是资源配额4.如何使用资源配额5.默认资源配额6.总结1.为什么要有名字空间Kubernetes 的名字空间并不是一个实体对象只是一个逻辑上的概念百万数量级别的 Pod这就使得资源争抢和命名冲突的概率大大增加了把集群给适当地“局部化”为每一类用户创建出只属于它自己的“工作空间”。2.如何使用名字空间创建命名空间kubectl create ns test-ns kubectl get ns添加Pod到命名空间apiVersion:v1kind:Podmetadata:name:ngxnamespace:test-ns查看命名空间kubectl get pod-ntest-ns命名空间被删除相应命名空间下的对象也会被删除删除命名空间kubectl delete ns test-ns3.什么是资源配额名字空间的资源配额:叫做 ResourceQuota,简称是 quota创建模板kubectl create qutoa dev-qt --dry-runclient-oyaml模板内容hard 字段,意思就是“硬性全局限制”apiVersion:v1kind:ResourceQuotametadata:name:dev-qtnamespace:dev-nsspec:hard:requests.cpu:10requests.memory:10Gilimits.cpu:10limits.memory:20Girequests.storage:100Gipersistentvolumeclaims:100pods:100configmaps:100secrets:100services:10count/jobs.batch:1count/cronjobs.batch:1count/deployments.apps:1ResourceQuota可以使用scopeSelector字段限制不同类型的对象,从而可以在名字空间里设置不同策略的配额对象,更精细地控制资源4.如何使用资源配额查看资源配额kubectl apply-fquota-ns.yml kubectl getquota-ndev-ns kubectl describequota-ndev-ns#规范输出创建两个job就会报错kubectl create job echo1-ndev-ns--imagebusybox --echohello kubectl create job echo2-ndev-ns--imagebusybox --echohello5.默认资源配额没有指定资源配额的pod创建会报错kubectl run ngx--imagenginx:alpine-ndev-ns查看Limit字段kubectl explain limitsLimitRange:为 API 对象添加默认的资源配额限制apiVersion:v1kind:LimitRangemetadata:name:dev-limitsnamespace:dev-nsspec:limits:-type:ContainerdefaultRequest:cpu:200mmemory:50Midefault:cpu:500mmemory:100Mi-type:Podmax:cpu:800mmemory:200Mi查看LimitRange状态kubectl describe limitranges-ndev-ns6.总结如果你是 Kubernetes 系统管理员你会如何使用名字空间来管理生产集群呢namespace属于逻辑隔离,生产上体现可以划分为基础中间件命名空间,其余按照业务系统划分你觉得设置资源配额应该遵循什么样的基本原则按照目前实施一些经验,机器通常会采用cpu与内存形成一个固定比例,例如8core,16G, 16core,32G, 然后会建议应用软件采用这个比例去配置request,limited, 同时要求,request尽可能小些,可以容纳下更多应用,超过一些限额后,集群具备自动化弹性扩容,形成“超卖”.同理,资源配额也是建议这样的比例。