首页 > 其他分享 >k8s的Cgroup学习

k8s的Cgroup学习

时间:2024-02-23 18:00:50浏览次数:30  
标签:systemd Cgroup 对应 学习 nginx cgroup Pod k8s cpu

Cgroups驱动

k8s有两种 cgroup 驱动:一种是 systemd,另外一种是 cgroupfs:

cgroupfs 比较好理解,比如说要限制内存是多少、要用 CPU share 为多少,其实直接把 pid 写入到对应 cgroup task 文件中,然后把对应需要限制的资源也写入相应的 memory cgroup 文件和 CPU 的 cgroup 文件就可以了;

另外一个是 systemd 的 cgroup 驱动,这个驱动是因为 systemd 本身可以提供一个 cgroup 管理方式。所以如果用 systemd 做 cgroup 驱动的话,所有的写 cgroup 操作都必须通过 systemd 的接口来完成,不能手动更改 cgroup 的文件;

kubernetes 中默认 kubelet 的 cgroup 驱动就是 cgroupfs,若要使用 systemd,则必须将 kubelet 以及 runtime 都需要配置为 systemd 驱动。

Cgroupfs下Pod的cgroup学习

以一个Deployment为例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: front-end
  labels:
    app: front-end
spec:
  replicas: 1
  selector:
    matchLabels:
      app: front-end
  template:
    metadata:
      labels:
        app: front-end
    spec:
      nodeSelector:
        app: demo3
      containers:
      - name: nginx
        image: autoregistry.rd.tp-link.net/auto/nginx:1.18
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 2
          limits:
            cpu: 3
        ports:
        - name: http
          containerPort: 80
          protocol: TCP

在resources下对cpu的requests和limits做出了限制,最终在部署的时候会写入Pod运行的节点的Cgroup对应文件中

(1)查看这个Pod运行的节点
[root@iamdemo1 ~]# k get pod -o wide | grep front

(2)到Pod运行的节点上,查看容器名nginx对应的CONTAINER ID
[root@iamdemo3 ~]# crictl ps | grep nginx

(3)查看对应容器的Cgroup参数
[root@iamdemo3 ~]# crictl inspect fd35fc385366c | grep -A3 cgroup

可以得到Pod对应的组目录为 kubepods-burstable-podb2253f4f_92ae_4d96_af6b_5b5f416ed2e6.slice

Container对应的目录为cri-containerd-fd35fc385366cfe4a215a4aaa6ec406c9f943c90b3f9967a405d2caa114208d5

(4)到容器所在节点的cgroup目录下
/sys/fs/cgroup/cpu/kubepods.slice/kubepods-burstable.slice
再cd kubepods-burstable-podb2253f4f_92ae_4d96_af6b_5b5f416ed2e6.slice
就可以看到当前目录有很多cpu相关参数文件

(5)cpu.shares文件的内容为2048,对应resources.requests.cpu的2

(6)cd到Container对应的目录cri-containerd-fd35fc385366cfe4a215a4aaa6ec406c9f943c90b3f9967a405d2caa114208d5.scope中查看cgroup.procs文件内容,即为Pod中的进程在宿主机上的PID,可以看到两个进程分别对应nginx的master和daemon进程

image

image

image

image

标签:systemd,Cgroup,对应,学习,nginx,cgroup,Pod,k8s,cpu
From: https://www.cnblogs.com/iamxiaofu/p/18030112

相关文章

  • python基础学习8-网络协议、进程与线程
    UDP协议用户数据包协议socketbind()sendall()recvfrom()sendto()close()TCP服务器端流程:使用socket类创建一个套接字对象使用bind((ip,port))方法绑定ip地址和端口号使用listen()方法开始TCP监听使用accept()方法等待客户端的连接使用recv()/send()方法接受发送......
  • glsl基础语法学习
    glsl语法(边学习边更新...)基础数据类型 类型示例 备注bool boolisFact=false; int intnum1=1; uint uintnum1=1; 无符号整数,#version400及以上才支持,老版本无法使用此数据类型float  floatnum2=33.3; double doublenum......
  • Markdown学习
    Markdown学习标题三级标题四级标题字体Hello,world!Hello,world!Hello,world!Hello,world!Hello,world!引用世上本没有路,走的人多了,也便成了路分割线图片超链接点击跳转到sjp的博客列表回车cabc表格名字性别生日张三男1997.1.......
  • Vue学习笔记13--插值语法 + method
    插值语法示例:插值语法--实现信息拼接<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>插值语法--实现信息......
  • 今天继续学习day2
    56函数的分文件编写----63指针啥的一堆,,,有必要回看。--------c++语言啥的。呃呃呃呃我好像要跑的话需要用代码仓库的代码url送过去,有一个克隆仓库?我记得,既然我是连的服务器,那我的本地仓库是啥呢?我是不是应该在GitHub搞一个代码url?放好我需要的试的g++14.49:VSCode工作区就......
  • 简单懂点K8S网络(1)
     ......
  • Java事件侦听器学习记录
    前言我们监听事件之前要有事件源source,创建事件源(Event),发布事件(publishEvent),然后才能到监听事件。事件驱动机制是观察者模式(称发布订阅)具体实现,事件对象(Event)相当于被观察对象(Subject),事件监听(EventListener)相当于观察者(Observer)1、包结构(个人): 2、创建事件源(Event)......
  • Linux学习-day1
    了解Linux运维。Linux运维在互联网行业中处于维护与优化作用,保障网站、服务器、程序等正常运转。2.画图网站:https://excalidraw.com/3.安装VMware虚拟机与centos系统。阿里云镜像下载地址:https://developer.aliyun.com/mirror/安装步骤:准备好镜像文件:DVD(大约4GB,包含常......
  • K8S集群固定Pod IP
    原理主要利用Calico组件的两个kubernetes注解(1)cni.projectcalico.org/ipAddrs(2)cni.projectcalico.org/ipAddrs单个Pod固定IP利用注解cni.projectcalico.org/ipAddrs示例Yaml如下apiVersion:apps/v1kind:Deploymentmetadata:name:front-endlabels:app:......
  • BSGS学习笔记
    1.求解问题1.1.高次同余方程给定\(a,b,p\),\(a,p\)互质,求满足\(a^x\equivb(\bmod\p)\)的解\(x\)2.解法由扩展欧拉定理\(a^p\equiva^{x\mod\\varphi(p)}\(\bmod\p)\)得\(a^x\)模\(p\)意义下的最小循环节为\(\varphi(p)\)\(\because\\varphi(p)<p\)......