![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
容器实战高手课
文章平均质量分 95
ibmleeca
这个作者很懒,什么都没留下…
展开
-
09 | Page Cache:为什么我的容器内存使用量总是在临界点?
上一讲,我们讲了 Memory Cgroup 是如何控制一个容器的内存的。我们已经知道了,如果容器使用的物理内存超过了 Memory Cgroup 里的 memory.limit_in_bytes 值,那么容器中的进程会被 OOM Killer 杀死。不过在一些容器的使用场景中,比如容器里的应用有很多文件读写,你会发现整个容器的内存使用量已经很接近 Memory Cgroup 的上限值了,但是在容器中我们接着再申请内存,还是可以申请出来,并且没有发生 OOM。这是怎么回事呢?今天这一讲我就来聊聊这个转载 2021-10-19 13:01:22 · 705 阅读 · 0 评论 -
02 | 理解进程(1):为什么我在容器中不能kill 1号进程?
你好,我是程远。今天,我们正式进入理解进程的模块。我会通过 3 讲内容,带你了解容器 init 进程的特殊之处,还有它需要具备哪些功能,才能保证容器在运行过程中不会出现类似僵尸进程,或者应用程序无法 graceful shutdown 的问题。那么通过这一讲,我会带你掌握 init 进程和 Linux 信号的核心概念。一、问题再现接下来,我们一起再现用 kill 1 命令重启容器的问题。我猜你肯定想问,为什么要在容器中执行 kill 1 或者 kill -9 1 的命令呢?其实这是我们团队里的一转载 2021-10-17 23:08:37 · 1105 阅读 · 0 评论 -
08 | 容器内存:我的容器为什么被杀了?
一、问题再现容器在系统中被杀掉,只有一种情况,那就是容器中的进程使用了太多的内存。具体来说就是:容器里所有进程使用的内存量,超过了容器所在Memory Cgroup 里的内存限制,这时 Linux系统就会主动杀死容器中的一个进程,往往这会导致整个容器的退出。测试代码: https://github.com/chengyli/training/tree/main/memory/oom启动一个容器,然后给容器的 Cgroup 内存上限设置为 512MB#!/bin/bashdocker st转载 2021-10-06 11:13:12 · 687 阅读 · 0 评论 -
07 | Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?
CPU Cgroup 无法控制 Load Average 的平均负载。而没有这个限制就会影响系统资源的合理调度,很可能导致我们的系统变得很慢。今天说下为什么加了CPU Cgroup的配置后,即使保证了容器的CPU资源,容器中的进程还是会运行的很慢。一、问题再现问题:发现明明容器里的 CPU甚至宿主机上的CPU 使用率都很低,但是机器的Load Average 却很高,容器里的进程运行也很慢。如上面的图片,CPU使用率很低,id值空闲很高。但是Load Average 的值高达9.09,就意味着.转载 2021-10-06 10:43:48 · 298 阅读 · 0 评论 -
06|容器CPU(2):如何正确地拿到容器CPU的开销?
无论是容器的所有者还是容器平台的管理者,我们想要精准的对运行着众多容器的云平台做监控,快速排查例如应用的处理能力下降,节点负载过高等问题,就绕不开容器CPU开销。CPU开销的异常,往往是程序异常最明显的一个指标。一、问题重现容器中运行top,"%Cpu(s)"那一行中显示的数值,并不是这个容器的 CPU 整体使用率,而是容器宿主机的 CPU 使用率。1.1、进程 CPU 使用率Linux中每个进程的 CPU 使用率,我们都可以用top命令查看。比如,每个进程在top命令输出中都有对应的一行,1.转载 2021-10-06 09:17:01 · 787 阅读 · 0 评论 -
05|容器CPU(1):怎么限制容器的CPU使用?【request、limit】
从这一将开始,我们进入容器CPU这个模块。容器在Linux系统中最核心的两个概念是 Namespace 和 Cgroups。 通过Cgroups 技术限制资源,可以分为很多类型,比如 CPU、Memory、Storage、Network等等。今天说下如何限制容器的CPU 使用。我们拿Kubernetes平台做例子,具体来看下面这个pod/container里的spec定义,在CPU资源相关的定义中有两项内容,分别是Request CPU和Limit CPU。apiVersion: v1ki转载 2021-10-05 13:15:20 · 2350 阅读 · 0 评论 -
04 理解进程(3):为什么我在容器中的进程被强制杀死了?【init进程转发】
今天我们来讲容器中 init 进程的最后一讲,为什么容器中的进程被强制杀死了。理解了这个问题,能够帮助你更好地管理进程,让容器中的进程可以 graceful shutdown。我先给你说说,为什么进程管理中做到这点很重要。在实际生产环境中,我们有不少应用在退出的时候需要做一些清理工作,比如清理一些远端的链接,或者是清除一些本地的临时数据。这样的清理工作,可以尽可能避免远端或者本地的错误发生,比如减少丢包等问题的出现。而这些退出清理的工作,通常是在 SIGTERM 这个信号用户注册的 handler 里进转载 2021-09-29 18:52:19 · 344 阅读 · 0 评论 -
03 理解进程(2):为什么我的容器里有这么多僵尸进程?
今天我们来聊一聊容器里僵尸进程这个问题。说起僵尸进程,相信你并不陌生。很多面试官经常会问到这个知识点,用来考察候选人的操作系统背景。通过这个问题,可以了解候选人对 Linux 进程管理和信号处理这些基础知识的理解程度,他的基本功扎不扎实。所以,今天我们就一起来看看容器里为什么会产生僵尸进程,然后去分析如何怎么解决。通过这一讲,你就会对僵尸进程的产生原理有一个清晰的认识,也会更深入地理解容器 init 进程的特性。问题再现我们平时用容器的时候,有的同学会发现,自己的容器运行久了之后,运行 ps转载 2021-09-28 19:08:43 · 364 阅读 · 0 评论 -
02 理解进程(1):为什么我在容器中不能kill 1号进程?
问题再现接下来,我们一起再现用 kill 1 命令重启容器的问题。我猜你肯定想问,为什么要在容器中执行 kill 1 或者 kill -9 1 的命令呢?其实这是我们团队里的一位同学提出的问题。这位同学当时遇到的情况是这样的,他想修改容器镜像里的一个 bug,但因为网路配置的问题,这个同学又不想为了重建 pod 去改变 pod IP。如果你用过 Kubernetes 的话,你也肯定知道,Kubernetes 上是没有 restart pod 这个命令的。这样看来,他似乎只能让 pod 做个原地重启转载 2021-09-28 15:36:14 · 444 阅读 · 0 评论 -
01 认识容器:容器的基本操作和实现原理
作为一名工程师,我猜在过去的几年时间里,你肯定用过或者听人提起过容器(Container)。说实话,容器这东西一点都不复杂,如果你只是想用的话,那跟着Docker 官网的说明,应该十来分钟就能搞定。简单来说,它就是个小工具,可以把你想跑的程序,库文件啊,配置文件都一起“打包”。然后,我们在任何一个计算机的节点上,都可以使用这个打好的包。有了容器,一个命令就能把你想跑的程序跑起来,做到了一次打包,就可以到处使用。当然,空讲原理也没什么感觉,所以我还是会先带着你启动一个容器玩玩,然后咱们再一起来探讨容器里面转载 2021-09-27 11:15:08 · 515 阅读 · 0 评论