基于CPU使用率动态调整Worker数量(二):容器环境
NGINX 向云原生演进,All in OpenNJet
上篇我们讲解了基于CPU使用率动态调整Worker数量(一):物理机,本篇我们将讲解容器环境的操作。
1. 容器环境中资源分配
我们都知道在启动一个容器的时候一般都会限制该容器可使用的资源,比如cpu、内存等。而启动容器后,容器里相关资源配置文件都是宿主机的资源信息,比如Linux利用Cgroup实现了对容器的资源限制,但在容器内部依然缺省挂载了宿主机上的procfs的/proc目录,其包含如:meminfo, cpuinfo,stat, uptime等资源信息。一些监控工具如free/top或遗留应用还依赖上述文件内容获取资源配置和使用情况。当它们在容器中运行时,就会把宿主机的资源状态读取出来,这样就导致我们并没有获取到真实的容器环境里的资源信息。为此,我们需要借助lxcfs,才能够在容器中获取到正确的资源信息。
2.docker容器环境
在宿主机安装lxcfs,将/var/lib/lxcfs/proc/stat文件mount到容器内,方法如下:
wget http://copr-be.cloud.fedoraproject.org/results/ganto/lxc3/epel-7-x86_64/01041891-lxcfs/lxcfs-3.1.2-0.2.el7.x86_64.rpm yum -y localinstall lxcfs-3.1.2-0.2.el7.x86_64.rpm
如果缺少其他依赖,可从如下地址下载对应的rpm包安装
https://copr-be.cloud.fedoraproject.org/results/ganto/lxc3/epel-7-x86_64/01041881-lxc/
Docker 启动服务的时候需要挂载,比如启动的时候设置cpu个数是3,则容器启动后,会在容器中获取到的实际cpu格式就是3
docker run -it --cpus 3 -v /root/clb/njet1.0:/root/clb/njet1.0 \ -v /var/lib/lxcfs/proc/stat:/proc/stat:rw \ -v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw centos:7 /bin/bash
3. k8s容器环境
方法一:
跟docker环境一样,在宿主机安装lxcfs, 然后在我们服务的yaml文件中进行volumn挂载的设置,映射到容器中
方法二:
可以参照阿里云的一个解决方案: https://developer.aliyun.com/article/566208
该方案介绍了通过 lxcfs 提供容器资源可见性的方法,可以帮助一些遗留系统更好的识别容器运行时的资源限制。
同时,在该文中介绍了利用DaemonSet的方式部署lxcfs FUSE,这不但极大简化了部署。也可以方便地利用Kubernetes自身的容器管理能力,支持lxcfs进程失效时自动恢复,在集群伸缩时也可以保证节点部署的一致性。这个技巧对于其他类似的监控或者系统扩展都是适用的。
另外该文还介绍了利用Kubernetes的扩展机制 Initializer,实现对 lxcfs 文件的自动化挂载。整个过程对于应用部署人员是透明的,可以极大简化运维复杂度。同时利用类似的方法,我们可以灵活地定制应用部署的行为,满足业务的特殊要求
DaemonSet部署lxcfs FUSE:
git clone https://github.com/denverdino/lxcfs-initializer cd lxcfs-initializer
其manifest文件如下:
apiVersion: apps/v1beta2 kind: DaemonSet metadata: name: lxcfs labels: app: lxcfs spec: selector: matchLabels: app: lxcfs template: metadata: labels: app: lxcfs spec: hostPID: true tolerations: - key: node-role.kubernetes.io/master effect: NoSchedule containers: - name: lxcfs image: registry.cn-hangzhou.aliyuncs.com/denverdino/lxcfs:3.0.4 imagePullPolicy: Always securityContext: privileged: true volumeMounts: - name: cgroup mountPath: /sys/fs/cgroup - name: lxcfs mountPath: /var/lib/lxcfs mountPropagation: Bidirectional - name: usr-local mountPath: /usr/local volumes: - name: cgroup hostPath: path: /sys/fs/cgroup - name: usr-local hostPath: path: /usr/local - name: lxcfs hostPath: path: /var/lib/lxcfs type: DirectoryOrCreate
kubectl apply -f lxcfs-daemonset.yaml
🧚OpenNJet 已经更新到1.2.2,更新了Proxy protocol V2协议,支持设置TLV 字段值新功能,修复了配置主动健康检查后,reload会导致进程core、upstream 轮询算法bug等问题,🔍 Gitee 了解详情。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
得物 Redis 设计与实践
一、前言 自建 Redis 系统是得物 DBA 团队自研高性能分布式 KV 缓存系统,目前管理的 ECS 内存总容量超过数十TB,数百多个 Redis 缓存集群实例,数万多个 Redis 数据节点,其中内存规格超过 1T 的大容量集群多个。 自建 Redis 系统采用 Proxy 架构,包含 ConfigServer、Proxy 等核心组件,还包括一个具备实例自动化部署、资源管理、诊断与分析等重要功能在内的完善的自动化运维平台。 本文将从系统架构及核心组件、自建 Redis 支持的重要特性、自动化运维平台的重要功能等多方面为大家介绍自建 Redis 系统。 二、自建 Redis 架构及核心组件 自建 Redis 分布式 KV 缓存系统由 ConfigServer、Redis-Proxy、Redis-Server 等核心组件构成,整体架构图如下所示: 下面为大家逐一介绍自建 Redis 各核心组件支持的重要功能和特性。 ConfigServer ConfigServer 是自建 Redis 系统中关键组件之一,跨多可用区多节点部署,采用 Raft 协议实现 ConfigServer 组件...
- 下一篇
ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南
作者:运维有术 前言 知识点 定级:入门级 KubeKey 安装部署 ARM 版 KubeSphere 和 Kubernetes ARM 版 KubeSphere 和 Kubernetes 常见问题 实战服务器配置 (个人云上测试服务器) 主机名 IP CPU 内存 系统盘 数据盘 用途 ks-master-1 172.16.33.16 6 16 50 200 KubeSphere/k8s-master ks-master-2 172.16.33.22 6 16 50 200 KubeSphere/k8s-master ks-master-3 172.16.33.23 6 16 50 200 KubeSphere/k8s-master 合计 10 18 48 150 600+ 实战环境涉及软件版本信息 服务器芯片:Kunpeng-920 操作系统:openEuler 22.03 LTS SP2 aarch64 KubeSphere:v3.4.0 Kubernetes:v1.26.5 Containerd:1.6.4 KubeKey: v3.0.10 1. 本文简介 本文介绍了如何在 o...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群