K8s: 在Pod里面对容器进行配额管理和相关原理

K8S及pod相关介绍 K8S基本概念;Pod 概念;Kubernetes ⼯作流程;K8S 创建 Pod 流程; 阅读详情

Pod里面对容器进行配额管理

  • 在生产环境中,内存占用通常很大,如果里面有死循环,会导致内存和cpu过大导致影响其他pod运行资源

  • 需要让资源在受控的环境下运行,一般都是加上 resources limits 的配置才能达到最佳实践

  • 默认cpu是0.5个cpu, 一般定义的时候参数是最高的门槛,不会超过这个设置

  • 创建一个命名空间,以便将 本练习中创建的资源与集群的其余部分资源隔离

    • $ kubectl create namespace cpu-stress
  • 创建 cpu-limit.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: cpu-stress-demo
      namespace: cpu-stress
      labels:
        name: cpu-stress-demo
    spec:
      containers:
      - name: nginx-stress
        image: registry.cn-beijing.aliyuncs.com/qingfeng666/stress
        args:
          - -cpus
          - "2"  # 指定使用2个CPU核心进行压力测试
        resources:
          limits:
            cpu: "1"  # 设置CPU上限为1个核心
          requests:
            cpu: "0.5"  # 设置CPU请求为0.5个核心(可选,根据集群策略设置)
      restartPolicy: Never  # 设置重启策略为Never,因为这是一个一次性任务
    
  • $ kubectl create -f cpu-limit.yaml

    pod/cpu-stress-demo created
    
  • $ kubectl get po -n cpu-stress -w

    NAME              READY   STATUS    RESTARTS   AGE
    cpu-stress-demo   1/1     Running   0          7s
    
  • $ kubectl get po cpu-stress-demo -n cpu-stress -o yaml

    apiVersion: v1
    items:
    - apiVersion: v1
      kind: Pod
      metadata:
        creationTimestamp: "2024-04-18T22:34:13Z"
        labels:
          name: cpu-stress-demo
        name: cpu-stress-demo
        namespace: cpu-stress
        resourceVersion: "81301"
        uid: f423a147-4bac-4f82-a791-0e851d67366c
      spec:
        containers:
        - args:
          - -cpus
          - "2"
          image: registry.cn-beijing.aliyuncs.com/qingfeng666/stress
          imagePullPolicy: Always
          name: nginx-stress
          resources:
            limits:
              cpu: "1"
            requests:
              cpu: 500m
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
          - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
            name: kube-api-access-mg68j
            readOnly: true
        dnsPolicy: ClusterFirst
        enableServiceLinks: true
        nodeName: node2.k8s
        preemptionPolicy: PreemptLowerPriority
        priority: 0
        restartPolicy: Never
        schedulerName: default-scheduler
        securityContext: {}
        serviceAccount: default
        serviceAccountName: default
        terminationGracePeriodSeconds: 30
        tolerations:
        - effect: NoExecute
          key: node.kubernetes.io/not-ready
          operator: Exists
          tolerationSeconds: 300
        - effect: NoExecute
          key: node.kubernetes.io/unreachable
          operator: Exists
          tolerationSeconds: 300
        volumes:
        - name: kube-api-access-mg68j
          projected:
            defaultMode: 420
            sources:
            - serviceAccountToken:
                expirationSeconds: 3607
                path: token
            - configMap:
                items:
                - key: ca.crt
                  path: ca.crt
                name: kube-root-ca.crt
            - downwardAPI:
                items:
                - fieldRef:
                    apiVersion: v1
                    fieldPath: metadata.namespace
                  path: namespace
      status:
        conditions:
        - lastProbeTime: null
          lastTransitionTime: "2024-04-18T22:34:13Z"
          status: "True"
          type: Initialized
        - lastProbeTime: null
          lastTransitionTime: "2024-04-18T22:34:16Z"
          status: "True"
          type: Ready
        - lastProbeTime: null
          lastTransitionTime: "2024-04-18T22:34:16Z"
          status: "True"
          type: ContainersReady
        - lastProbeTime: null
          lastTransitionTime: "2024-04-18T22:34:13Z"
          status: "True"
          type: PodScheduled
        containerStatuses:
        - containerID: docker://12668f59353306dda08a395bf7dd36c0eae699b0ed1350ec96b8ffc3705b6a5e
          image: registry.cn-beijing.aliyuncs.com/qingfeng666/stress:latest
          imageID: docker-pullable://registry.cn-beijing.aliyuncs.com/qingfeng666/stress@sha256:155d7266cb7ed6fecd34b2e4f8a25c2b21eb77723658fb4ab2db630d41118c7d
          lastState: {}
          name: nginx-stress
          ready: true
          restartCount: 0
          started: true
          state:
            running:
              startedAt: "2024-04-18T22:34:15Z"
        hostIP: 10.211.55.12
        phase: Running
        podIP: 10.244.2.12
        podIPs:
        - ip: 10.244.2.12
        qosClass: Burstable
        startTime: "2024-04-18T22:34:13Z"
    kind: List
    metadata:
      resourceVersion: ""
      selfLink: ""
    
    • 从上面可以看到,没有超过1核,限制成功了

相关原理


1 )Docker namespace 隔离

  • 虚拟机的隔离是非常彻底的,但是成本也是极大的
  • docker 通过namespace来隔离
  • $ ps aux 查看进程
  • $ unshare --fork --pid --mount--proc bash
  • $ ps aux 这时候再次查看,可以看到只有2个进程了
  • 执行docker容器的时候,和这个类似
  • $ docker run -it busybox
    • 这个busybox 是一个非常小的镜像
    • $ ps aux 可以看到只有2个进程
  • docker和 unshare的效果一模一样

2 )CGroups 实现资源配额

  • CGroups 是 control groups 的意思
  • $ cd /syc/fs/cgroup/cpu
    • 进入到这个目录,新建一个目录
    • $ mkdir cgrous_test
    • $ cd cgrous_test 进去后,发现生成了一堆文件,自动生成的
    • $ cat cpu.cfs_quota_us 发现默认 -1
    • $ echo 20000 > cpu.cfs_quota_us 这里20%的cpu时间
    • $ echo 2754 > tasks
    • $ cat tasks 可看到 2754
    • $ top 查看,就发现从 死循环 100%的占用,变成了20%
    • 这样就可以进行限额处理了
    • $ kill -9 2795 删除之
  • 这个是 docker 进程实现原理
    • $ docker run -it --cpu=".5" nginx /bin/sh 设置cpu配额是 50% cpu
    • 进入中,查看 $ /sys/fs/cgroup/cpu 目录,$ cat cpu.cfs_quota_us
    • 显示 50000 这个就是 .5
    • 就是这个原理
  • 所以,这些配额限制就是调用 cgroups 的原理
k8s容器编排总结 学而时习之,不亦说乎。今天总结一下k8s。k8s(Kubernetes)作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,它提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上。kubernetes是一个开放的容器调度管理平台,不限定任何一种言语,支持java/C++/go/python等各 阅读详情

相关推荐

Kubernetes(K8s)入门到实践(一)----Kubernetes入门

前言 作为一名网络工程的大学生,在前段时间学习了云计算和大数据的相关技术后,我迫切的想要获得更多的自动化持续交互的相关技术。目前非常火热的Kubernetes技术简称(K8s)是由谷歌开源的Docker容器集群管理系统,功能非常强大,也激起了我浓厚的学习兴趣。 以后我会将这一系列关于Kubernetes的技术文章和学习心得一并分享出来,供大家一块学习和交流。 1. Kubernetes是什么 首先...

普通Gopher 9477

k8s进阶3——资源配额、资源限制

1、ResourceQuota多种使用情景。 2、LimitRange多种使用情景。

百慕卿君博客 5579

K8S系列之6.3:资源管理与优化(资源配额、限制范围与潮汐算力)

摘要:本文探讨了Kubernetes集群资源管理的经济学视角,提出了资源共享、公平竞争、弹性伸缩和成本感知四大原则。重点分析了资源配额机制,包括计算资源、存储资源和对象数量配额的具体配置,介绍了配额作用域和动态配额管理策略。文章还提供了基于Prometheus的配额监控方案,帮助管理员实现多租户资源隔离与优化。通过技术手段将资源分配问题转化为可量化的管理问题,为大型集群的资源治理提供了系统化解决方案。

技术引领业务创新 1102

Kubernetes配置 Pods 和容器—调整分配给容器的 CPU 和内存资源

Kubernetes配置 Pods 和容器—调整分配给容器的 CPU 和内存资源

深圳市多克创新科技有限公司 1939

LSTM模型股价波动率预测(含Python代码)

源代码文件可在gzh’finance褪黑素'回复【24012203】获取。

celiaweiwei的博客 3776

电源完整性之Cadence Sigrity Power SI_AC阻抗仿真

之前和大家分享过电源完整性之仿真设计原理链接: [link](https://blog.youkuaiyun.com/weixin_41808082/article/details/117065140?spm=1001.2014.3001.5501).今天接着上一篇文章总结一下电源AC阻抗的的仿真操作流程及一些simulation中的设置参数,用到的时候Cadence Sigrity 中的Power SI组件,下面开始享受仿真的快乐吧: 1.仿真模式选择与文件导入 选择Cadence Sigrity下的Power SI

刘小同学的博客 1万+

Docker(二十一)--Docker k8s--Kubernetes存储--kubernetes监控

k8s监控1. kubernetes容器资源限制1.1 简介1.2 kubernetes容器资源限制操作1.2.1 内存限制示例1.2.2 CPU限制1.2.3 为namespace设置资源限制 1. kubernetes容器资源限制 1.1 简介 1.2 kubernetes容器资源限制操作 1.2.1 内存限制示例 [root@server1 harbor]# docker tag progrium/stress reg.westos.org/library/stress ##下载镜像 [root@

qwerty1372431588的博客 459

74HC138译码器的原理和使用

A0,A1,A2为3位二进制加权地址输入端口,A2A1A0顺序组成的3位2进制数对应的十进制数x控制使能端口Yx';例如当A2A1A0 = 101 时,其他门输出端全为高电平,只有Y5'为低电平。 Y0-Y7为8个输出端口,其输出电平由A0,A2,A3,E1,E2,E3决定。

diksan的博客 6万+

(八)Kubernetes集群Pod资源配置容器的资源配额

limits是最多给容器分多少资源,requests是最少给容器分多少资源,如果request最小的资源节点还不能供给,那么容器将无法启动,如果容器使用的资源超过了limits,容器将会被终止并进行重启。容器中的程序运行会占用一定的资源,比如内存和CPU的占用,如果不对某个容器的资源做限制,那么他就可能吃掉大量资源,导致其他容器无法运行,针对这种情况,limits:用于限制运行时容器的最大占用资源,当容器占用的资源超过limits设置时,就会被终止,并进行重启。cpu的单位为core数,可以为整数和小数。

11 806

LSTM预测股票数据---数据预处理

# 导入相应的模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 获取训练集 def get_train_data(data,batch_size = 60 ,time_step = 20,train_begin = 0,train_end = 58...

qq_35358021的博客 3360

Diffusion、VAE与GAN:三大生成模型的原理对比与应用场景解析

本文深入解析了Diffusion、VAE与GAN三大生成模型的核心原理与特性。Diffusion模型通过逆向去噪过程实现高质量图像生成,但计算成本较高;VAE擅长学习概率潜空间,训练稳定但图像偏模糊;GAN通过对抗训练生成锐利图像,但存在模式崩溃风险。文章结合实战场景,为图像生成、修复、超分辨率等任务提供了清晰的模型选择指南。

weixin_29063979的博客 346

k8s--Pod调度策略、Pod标签管理、Pod资源配额与限额、全局资源配额与限额策略

Pod 调度策略基于节点的调度标签管理查询标签使用标签过滤添加标签删除标签资源文件标签基于标签的调度容器调度(案例2)Pod 资源配额requests:保证程序能运行资源对象文件内存资源配额计算资源配额Pod 资源限额limits限额内存 CPU限额内存 CPU验证内存限额验证 CPU 限额全局资源管理LimitRange默认配额策略自定义资源资源配额范围多容器资源配额Pod 资源配额ResourceQuota:限制某一个资源空间下资源总量全局配额策略

QueueTT的博客 1537

PPT制作能力在职场中真的重要吗?一定要美术功底才能学好PPT吗?

我推出PPT技能培训专栏啦!好的PPT可以让你事半功倍、2023拥有PPT能力还可以让你具备一门极有价值的斜杠能力。更多内容请进:梦幻训练营专栏。专栏内会用本人积累的近10年的PPT学习方法论在短时间内教会你如何制作出精美绝伦的PPT,每篇教程后还会免费赠送一些小福利,不可多得。

打造全国最全的AI Agent开发知识领域的博客 728

云端技术驾驭DAY12——Pod调度策略、Pod标签管理、Pod资源配额与限额、全局资源配额与限额策略

什么是调度分配?在k8s中,调度是将Pod分配到合适的计算节点上,然后对应节点上的Kubelet运行这些Podkube-scheduler是默认调度器,是集群的核心组建调度器是如何工作的?调度器通过k8s的监测机制来发现集群中尚未被调度到节点上的Pod。调度器依据调度原则将Pod分配到一个合适的节点上运行调度流程调度器给一个Pod做调度选择包含两个步骤:过滤和打分第一步:过滤。

川川野马的博客 1803

GEE:基于 Landsat 数据集生成(1986-2024)月度合成地表温度(LST)时间序列数据

优快云@_养乐多_本文将介绍使用 Landsat 时间序列计算(1986-2024)月度合成地表温度(LST)时间序列数据集的代码。

养乐多的博客 1714

大厂硬件笔试机试题ASIC设计方向-卷3

本文提供了30道硬件工程师机试题目,涵盖数字逻辑、模拟电路、CMOS和信号处理等核心领域。选择题和判断题均配有详细解析,重点考察Verilog编程、CMOS特性、触发器设计、采样定理等知识点。题目难度适中但覆盖面广,如Verilog中阻塞/非阻塞赋值的区别、CMOS静态功耗来源、Nyquist采样定理、通用逻辑门判断等。备考建议强调掌握逻辑门设计、Verilog时序电路编写和CMOS特性理解。这些题目反映了华为等大厂硬件机试的典型考查内容,通过系统复习可有效提升机试成绩,为后续面试奠定基础。

启芯硬件的博客 545

2、k8s pod原理详解

k8s pod原理详解Kubernetes Pod 介绍Pod 介绍与原理POD操作实战POD的创建和删除pod的生命周期管理资源的配额和限制静态podInit Containersk8s健康检查POD镜像升级pod 无法启动可能原因POD调度过程调度例子nodeSelectornodeNametaint and Tolerance标签常用命令 Kubernetes Pod 介绍 Pod 直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个 Pod)。在 k8s 中我们

JAVA技术爱好者 1983

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

啥叫K8s?啥是k8s?

•Kubernetes介绍 1.背景介绍   云计算飞速发展     - IaaS     - PaaS     - SaaS   Docker技术突飞猛进     - 一次构建,到处运行     - 容器的快速轻量     - 完整的生态环境 2.什么是kubernetes   首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Googl...

lu‘s blog 19万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Kubernetes(K8s)详解

Kubernetes(K8S)是一个开源的容器编排引擎,用于自动化部署、扩缩和管理容器化应用。其核心架构包括Master Node(含API Server、Scheduler、Controller Manager等组件)和Worker Node(含Kubelet、Kube-Proxy等)。K8S提供核心特性如服务发现、存储编排、自我修复等,支持通过kubectl命令行工具进行资源管理。Namespace用于隔离资源,Pod是最小部署单元,而Deployment则管理Pod的多副本和自愈能力。通过YAML文件

Java资料站 2011

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Kubernetes-01:pod

Pod 是 Kubernetes 的最小调度与部署单元,本质是一个逻辑分组单元,封装一个或多个紧密关联的容器。其设计哲学源于解决容器化应用的协作问题: 同一pod内的容器共享网络命名空间(同一ip和端口范围)、存储卷(volum)和进程通信(IPC);例如业务容器与日志收集容器(sidecar模式)可以通过locahost直接通信,文件可通过挂载的volume共享。 pod的生命周期由基础容器pause决定。pause容器作为pod的根容器,生命周期代表整个pod状态,其他容器作

weixin_75232881的博客 791

K8S 架构实现及工作原理

K8S 架构实现及工作原理介绍

youzhouliu的博客 1万+

【Kubernetes实战】三、资源组件Namespace、Pod、Label、Deployment、Service概述。

首先清楚kubernetes的逻辑关系:kubernetes本身是集群 --> 集群通过运行程序对外提供服务 --> 程序必须运行在容器中 --> 容器必须存在于Pod中 --> Kubernetes集群通过管理pod控制其中的容器 --> 进而管理其中的程序。Pod是kubernetes集群进行管理的最小单元。Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。

Cherry0030的博客 1159

Kubernetes(K8s) 基本概念

K8s是Google在2014年开源的一个容器集群管理系统,简称K8SK8s用于容器化应用程序的部署,扩展和管理,目标是让部署容器化应用简单高效httphttps关于K8s相关组件的知识到此已讲解完,这只是根据我个人的理解所写,更加深入的大家可以自行去了解,基本上了解了个大概,下面我会根据所了解的搭建一个K8s集群环境,下一篇文章将会实现这个,大家可以参考操作一遍,加深对上面所说的理解。httpshttpshttpshttpshttpshttpshttps。......

养歌的博客 3073

【Kubernetes】浅析基本概念和原理

摘要:本文从 Kubernetes (K8S) 的几个核心概念入手,对 K8S 的整体架构设计进行了概括性分析,进而对 K8S 的认证、授权、准入控制的相关内容进行了介绍。 1 核心概念和架构设计 1.1 概念与层级关系 Image 镜像的运行得到 Container 容器。 Pod 内可以有一个或者多个容器,Pod 中的容器运行在一台机器上且共享网络,有一个唯一的 IP,每个 Pod 中会有一个 Pause 容器,Pause 容器作为根容器,将 Pod 中的其他容器连接在一起。Pod 会负责内部容器的健康

inet_ygssoftware的博客 8万+

K8S:Pod

POD

weixin_40108561的博客 418

K8S之POD

pod

m0_62866676的博客 422
上一篇: K8s: 在Pod里面配置容器启动的命令参数及容器间依赖的环境变量
下一篇: K8s: 在Pod中使用亲和性调度节点
Wang's Blog
博客等级 码龄12年 7433粉丝 2420原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值