首页 > 其他分享 >K8S集群管理:用名字空间分隔系统资源

K8S集群管理:用名字空间分隔系统资源

时间:2023-08-17 23:34:28浏览次数:29  
标签:分隔 对象 默认 空间 名字 资源 配额 K8S 系统资源

Kubernetes 的名字空间并不是一个实体对象,只是一个逻辑上的概念。它可以把集群切分成一个个彼此独立的区域,然后我们把对象放到这些区域里,就实现了类似容器技术里 namespace 的隔离效果,应用只能在自己的名字空间里分配资源和运行,不会干扰到其他名字空间里的应用。

 Kubernetes面对大规模集群、海量节点时的一种现实考虑。因为集群很大、计算资源充足,会有非常多的用户在 Kubernetes 里创建各式各样的应用,可能会有百万数量级别的 Pod,这就使得资源争抢和命名冲突的概率大大增加了,情形和单机 Linux 系统里是非常相似的。

把集群给适当地“局部化”,为每一类用户创建出只属于它自己的“工作空间”。

Kubernetes 初始化集群的时候也会预设 4 个名字空间:default、kube-system、kube-public、kube-node-lease。我们常用的是前两个,default 是用户对象默认的名字空间,kube-system 是系统组件所在的名字空间,相信你对它们已经很熟悉了。

名字空间的资源配额需要使用一个专门的 API 对象,叫做 ResourceQuota,简称是 quota,我们可以使用命令 kubectl create 创建一个它的样板文件:

export out="--dry-run=client -o yaml"
kubectl create quota dev-qt $out

因为资源配额对象必须依附在某个名字空间上,所以在它的 metadata 字段里必须明确写出 namespace(否则就会应用到 default 名字空间)。

在 ResourceQuota 里可以设置各类资源配额,字段非常多。

  • CPU 和内存配额,使用 request.*、limits.*,这是和容器资源限制是一样的。
  • 存储容量配额,使 requests.storage 限制的是 PVC 的存储总量,也可以用 persistentvolumeclaims 限制 PVC 的个数。
  • 核心对象配额,使用对象的名字(英语复数形式),比如 pods、configmaps、secrets、services。
  • 其他 API 对象配额,使用 count/name.group 的形式,比如 count/jobs.batch、count/deployments.apps。

很小但很有用的辅助对象了—— LimitRange,简称是 limits,它能为 API 对象添加默认的资源配额限制。

  • spec.limits 是它的核心属性,描述了默认的资源限制。
  • type 是要限制的对象类型,可以是 Container、Pod、PersistentVolumeClaim。
  • default 是默认的资源上限,对应容器里的 resources.limits,只适用于 Container。
  • defaultRequest 默认申请的资源,对应容器里的 resources.requests,同样也只适用于 Container。
  • max、min 是对象能使用的资源的最大最小值。

1、名字空间是一个逻辑概念,没有实体,它的目标是为资源和对象划分出一个逻辑边界,避免冲突。

2、ResourceQuota 对象可以为名字空间添加资源配额,限制全局的 CPU、内存和 API 对象数量。

3、LimitRange 对象可以为容器或者 Pod 添加默认的资源配额,简化对象的创建工作。


标签:分隔,对象,默认,空间,名字,资源,配额,K8S,系统资源
From: https://blog.51cto.com/key3feng/7128512

相关文章

  • Python 如何打印方框 文本对齐 分隔线
    以下代码的打印效果如下:在部分python程序中,我们需要通过用户输入进行交互,打印一些提示消息辅助用户做选择是必要的。以下代码打印了一个指定宽度的方框,在方框内给出的用户输入的选择提示。fromDebugInfo.DebugInfoimport*#创建一个白板,并准备一个表格白板=调试模板()......
  • [kubernetes]二进制部署k8s集群-基于containerd
    0.前言k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker。其实docker自身也是调用containerd,与其k8s通过docker再调用containerd,不如k8s直接调用containerd,以减少性能损耗。除了containerd,比较流行的容器运行时还有podman,但是podm......
  • k8s Service(一) ClusterIP、NodePort、LoadBalancer、externalIPs 演示
    目录:Service简介kube-proxy3种不同的数据调度模式Service资源的定义格式示例1:ClusterIP演示示例2:NodePort演示示例3:LoadBalancer演示示例4:externalIPs演示Service简介Service:可以理解为pod的负债均衡器,标准资源类型,ServiceController为动态的一组Pod提......
  • k8s基础
    1.什么是k8s 操控多个容器运行项目,比如docker;2.为什么需要k8s 传统部署:tomcat(服务器),java包打包到tomcat;然后访问程序;虚拟部署:虚拟机里面部署tomcat,然后把java包放到tomcat里面;资源占用较多;新建了一个操作系统,不和宿主机公用一个操作系统;容器部署:docker,也......
  • kuboard部署在k8s集群中
    kuboard部署在k8s集群中,yaml配置文件#catkuboard.yamlapiVersion:apps/v1kind:Deploymentmetadata:labels:app:kuboardname:kuboardspec:replicas:1selector:matchLabels:app:kuboardtemplate:metadata:labels:......
  • k1s 使用 nsenter 轻松实现调试 k8s 集群节点
    调试宿主机如果您的集群无外网,则无法下载基础镜像,需要设置内网镜像exportK1S_IMAGE="hub.local.io/alpine:lateset"基础操作命令:#查看node列表k1snoNAMESTATUSROLESAGEVERSION192.168.1.100Readygpu......
  • Kubernetes Deployment控制器创建pod k8s
    Deployment因为RCRS无法支持动态更新Deployment支持动态更新无状态应用管理Deployment控制器下面就是ReplicaSet当我们创建Deployment的时候实际上会给我们创建一个同名的ReplicaSet控制器,这个RS上面是我们对应的pod节点更新的时候,Deployment是支持自动更新的,RS也可以更新,就是......
  • 【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
    问题描述在AKS集群中部署calico时候,遇见ImagePullBackOff问题。在创建POD calico-typha-horizontal-autoscale时候遇见拉取镜像失败问题。错误消息为:Failedtopullimage"k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.1.2-r2":rpcerror:code=Unknowndesc=E......
  • 【Azure K8S | AKS】在中国区AKS上遇见ImagePullBackOff时的替代方案
    问题描述在AKS集群中部署calico时候,遇见ImagePullBackOff问题。在创建POD calico-typha-horizontal-autoscale时候遇见拉取镜像失败问题。错误消息为:Failedtopullimage"k8s.gcr.io/cluster-proportional-autoscaler-amd64:1.1.2-r2":rpcerror:code=Unknowndesc......
  • K8S故障注入混沌工程开源平台ChaosMesh
    ChaosMesh是针对K8S的云原生混沌工程开源平台。可以用它方便地模拟开发、测试、生产环境中可能出现的各种异常情况,发现系统中潜在的问题。创建者研发支持混合事务与分析处理的开源数据库TiDB的PingCap公司一句话介绍ChaosMesh是针对K8S的云原生开源混沌工程平台。关键特性......