![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
容器实战课程
文章平均质量分 88
容器实战课程
草办_sh
这个作者很懒,什么都没留下…
展开
-
加餐02 | 理解perf:怎么用perf聚焦热点函数?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。一、问题回顾什么情况下使用perf工具的,perf工具给我们带来了哪些信息?在调试网路延时的时候,我们使用了 ebpf 的工具之后,发现了节点上一个 CPU,也就是 CPU32 的 Softirq CPU Usage(在运行 top 时,%Cpu 那行中的 si 数值就是 Softirq CPU Usage)时不时地会增高一下。在发现CPU Usage 异常增高的时候,肯定需要排查是什么程序导致的,这个时候就用到了 perf。抓取数据,.翻译 2021-09-30 11:13:59 · 806 阅读 · 0 评论 -
加餐01 | 案例分析:怎么解决海量IPVS规则带来的网络延时抖动问题?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。一、问题背景虚拟机迁移到了 Kubernetes 平台上。迁移之后,用户发现他们的应用在容器中的出错率很高,相比在之前虚拟机上的出错率要高出一个数量级。分析了应用程序的出错日志,发现在 Kubernetes 平台上,几乎所有的出错都是因为网络超时导致的。经过网络环境排查和比对测试,我们排除了网络设备上的问题,那么这个超时就只能是容器和宿主机上的问题了。在虚拟机中的出错率是 0.001%,而在容器中的出错率是 0.01%~0.04%。偶发.翻译 2021-09-29 16:31:09 · 897 阅读 · 0 评论 -
加餐福利 | 课后思考题答案合集
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。翻译 2021-09-28 16:30:34 · 182 阅读 · 0 评论 -
20 | 容器安全(2):在容器中,我不以root用户来运行程序可以吗?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。翻译 2021-09-12 17:37:15 · 1851 阅读 · 0 评论 -
19 | 容器安全(1):我的容器真的需要privileged权限吗?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。下面说下容器安全的模块。容器的安全很大程度由容器的架构特性决定的:比如容器与宿主机共享Linux 内核,通过Namespace来做资源的隔离,通过 shim/runC 的方式来启动等。这些容器架构特性,在选择使用容器之后,作为容器的用户,其实没有多少能力去对架构层面做安全上的改动了。你可能会说用Kata Container、gVisor 就是安全“容器”了。不过,Kata 或者 gVisor 只是兼容了容器接口标准,而内部的实现完全是另外.翻译 2021-09-07 21:48:53 · 1912 阅读 · 0 评论 -
18 | 容器网络配置(3):容器中的网络乱序包怎么这么高?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。翻译 2021-09-05 17:28:15 · 1692 阅读 · 0 评论 -
17|容器网络配置(2):容器网络延时要比宿主机上的高吗?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。上一节说了网络接口配置中的,veth 的接口配置方式,是大部分容器缺省用的网络配置方式。veth 的方式:一个数据包要从容器里发送到宿主机外,需要先从容器里的eth0(veth_container)把包发送到宿主机上 veth_host ,然后再在宿主机上通过nat或者路由的方式,经由宿主机上的eth0 向外发送。...翻译 2021-09-01 17:10:28 · 742 阅读 · 0 评论 -
16 | 容器网络配置(1):容器网络不通了要怎么调试?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。下面了解下容器网络不通了怎么调试。一、问题再现在容器中ping 公网地址不通;在宿主机上是可以的。# docker run -d --name if-test centos:8.1.1911 sleep 36000244d44f94dc2931626194c6fd3f99cec7b7c4bf61aafc6c702551e2c5ca2a371# docker exec -it if-test bash [root@244d44f9.翻译 2021-08-31 21:48:34 · 1940 阅读 · 0 评论 -
15 | 容器网络:我修改了/proc/sys/net下的参数,为什么在容器中不起效?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。今天了解下和 Network Namespace 相关的一个问题,容器中的网络参数。一、问题再现容器中运行的应用程序,如果需要用到 tcp/ip 协议栈的话,常常需要修改一些内核中网络协议栈的参数。很大一部分网络参数都在 /proc 文件系统下的 /proc/sys/net/ 目录里。内核网络相关的参数1、直接到/proc 文件系统下的/proc/sys/net/ 目录里对参数做修改2、或者使用sysctl 工具来修改先在宿主机.翻译 2021-08-30 20:49:48 · 1598 阅读 · 0 评论 -
14 | 容器中的内存与I/O:容器写文件的延时为什么波动很大?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。Linux 中两种I/O模式:Direct I/O,Buffered I/O模式Buffered I/O 是Linux的系统调用 write() 缺省模式。这种模式的write()函数调用返回要快一些,使用的更普遍一些。当使用Buffered I/O的应用程序从虚拟机迁移到容器后,多了Memory Cgroup的限制后,write()写相同大小的数据块花费的时间,波动延时比较大。一、问题再现场景:从文件中每次读取一个64KB大小的数据.翻译 2021-08-29 16:27:38 · 806 阅读 · 0 评论 -
13 | 容器磁盘限速:我的容器里磁盘读写为什么不稳定?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。一、场景再现运行 代码 运行一下make image来做一个带 fio 的容器镜像,用来测试磁盘文件读写性能的工具。mkdir -p /tmp/test1docker stop fio_test1;docker rm fio_test1docker run --name fio_test1 --volume /tmp/test1:/tmp registery/fio:v1 fio -direct=1 -rw=write -ioengi.翻译 2021-08-24 21:56:34 · 1165 阅读 · 0 评论 -
12 | 容器文件Quota:容器为什么把宿主机的磁盘写满了?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。翻译 2021-08-24 14:34:34 · 780 阅读 · 0 评论 -
11 | 容器文件系统:我在容器中读写文件怎么变慢了?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。把 Linux 从 ubuntu18.04 升级到 ubuntu20.04 之后,在容器里用 fio 这个磁盘性能测试工具,在 ubuntu 20.04 宿主机上的容器中文件读写的性能只有 ubuntu18.04 宿主机上的 1/8 左右了。一、问题再现先启动一个 ubuntu18.04的虚拟机,Linux内核版本是4.15。虚拟机上用命令 docker run -it ubuntu:18.04 bash 启动一个容器接着容器里运行f.翻译 2021-08-01 14:42:59 · 985 阅读 · 0 评论 -
10 | Swap:容器可以使用Swap空间吗?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。swap空间:它就是一块磁盘空间,当内存写满的时候,就可以把内存中不常用的数据暂时写到这个 swap 空间上,这样一来内存空间就可以释放出来,用来满足新的内存申请的需求。它的好处是可以应对一些瞬时突发的内存增大需求,不至于因为内存一时不够而触发OOM killer,导致进程被杀死。那么容器里使用 swap 有什么影响呢?一、问题再现在一个有swap的机器上启动一个容器,设置好memory cgroup 限制。创建swap的命令:.翻译 2021-07-27 10:01:03 · 1156 阅读 · 0 评论 -
09 | Page Cache:为什么我的容器内存使用量总是在临界点?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。上一节我们知道,如果容器使用的物理内存超过了 memory.limit_in_bytes,容器中的进程会被 OOM Killer 杀死。不过在有一些容器使用场景中,容器应用有很多文件读写,你会发现整个容器的内存使用量已经接近 Memory Cgroup 上限值了,但是在容器中再申请内存,还是可以申请出来,并没有发生OOM。一、问题再现测试使用的代码:https://github.com/chengyli/training/tree/ma.翻译 2021-07-18 17:09:04 · 2265 阅读 · 0 评论 -
08 | 容器内存:我的容器为什么被杀了?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。一、问题再现容器在系统中被杀掉,只有一种情况,那就是容器中的进程使用了太多的内存。具体来说就是:容器里所有进程使用的内存量,超过了容器所在Memory Cgroup 里的内存限制,这时 Linux 系统就会主动杀死容器中的一个进程,往往这会导致整个容器的退出。测试代码: https://github.com/chengyli/training/tree/main/memory/oom启动一个容器,然后给容器的Cgroup 内存上限设.翻译 2021-07-15 10:01:22 · 907 阅读 · 0 评论 -
07 | Load Average:加了CPU Cgroup限制,为什么我的容器还是很慢?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。CPU Cgroup 无法控制 Load Average 的平均负载。而没有这个限制就会影响系统资源的合理调度,很可能导致我们的系统变得很慢。今天说下为什么加了CPU Cgroup的配置后,即使保证了容器的CPU资源,容器中的进程还是会运行的很慢。一、问题再现...翻译 2021-07-11 17:32:19 · 452 阅读 · 0 评论 -
06|容器CPU(2):如何正确地拿到容器CPU的开销?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。CPU开销的异常,往往是程序异常最明显的一个指标一、问题重现容器中运行top,"%Cpu(s)"那一行中显示的数值,并不是这个容器的 CPU 整体使用率,而是容器宿主机的 CPU 使用率。1.1、进程CPU使用率查看 /proc/[pid]/stat文件中有50多项信息,包括:进程的运行状态,父进程PID,进程优先级,进程使用的内存等等这里关注 stat文件中的 14项utime,15项stime。utime:表示进程的用户态部分在.翻译 2021-07-05 16:03:16 · 1462 阅读 · 1 评论 -
05|容器CPU(1):怎么限制容器的CPU使用?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。容器在Linux系统中最核心的两个概念是 Namespace 和 Cgroups。通过Cgroups 技术限制资源,可以分为很多类型,比如 CPU、Memory、Storage、Network。今天说下如何限制容器的CPU 使用。以k8s为例apiVersion: v1kind: Podmetadata: name: frontendspec: containers: - name: app image: .翻译 2021-07-04 14:45:53 · 569 阅读 · 0 评论 -
04 | 理解进程(3):为什么我在容器中的进程被强制杀死了?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。今天说下为啥容器中的进程被强制杀死了,帮助理解更好的管理进程,让容器中的进程可以优雅的退出。为啥优雅的停止很重要呢?实际生产环境中,不少应用在退出的时候需要做一些清理工作,比如清理一些远端的链接,或者清除一些本地的临时数据。这样的清理工作,可以尽可能避免远端或者本地的错误发生,比如减少丢包等问题。这些退出清理的工作,通常在SIGTERM 这个信号用户注册的 handler 里进行的。如果进程是被kill -9 ,就是进程收到了 SIG.翻译 2021-06-20 21:20:36 · 1366 阅读 · 0 评论 -
03|理解进程(2):为什么我的容器里有这么多僵尸进程?
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。一、问题再现例子:https://github.com/chengyli/training/tree/master/init_proc/zombie_proc目的:在容器中弄出来很多个僵尸进程(Zombie Process)。# docker run --name zombie-proc -d registry/zombie-proc:v102dec161a9e8b18922bd3599b922dbd087a2ad60c9b34afc.翻译 2021-05-30 14:53:13 · 579 阅读 · 0 评论 -
02 | 理解进程(1):为什么我在容器中不能kill 1号进程
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。1、问题容器中 kill -9 1为什么不起作用?2、解释2.1、如何理解init 进程init 进程 就是 1号进程Linux 操作系统中,打开电源执行BIOS/boot-loader之后,boot-loader 负责加载Linux 内核。Linux内核执行文件一般放在 /boot 目录下,文件名类似 vmlinuxz* ,在内核完成了操作系统的各种初始化后。 这个程序需要执行的第一个用户态进程就是init 进程。内核代码启动.翻译 2021-05-21 17:05:43 · 2278 阅读 · 0 评论 -
01-认识容器:容器的基本操作和实现原理
本文仅作为学习记录,非商业用途,侵删,如需转载需作者同意。1、运行一个镜像# docker run -d centos/httpd:latest解释:run 表示启动一个容器-d : daemon的首字母,表示后台运行centos/httpd:latest : 表示具体启动哪个镜像,默认从dockerhub上下载镜像就是一个特殊的文件系统,提供了容器中程序执行所需的所有文件容器中包含应用程序启动需要三类文件:1、相关的程序可执行文件2、库文件3、配置文件容器运行的时候就不再.翻译 2021-04-21 16:06:42 · 363 阅读 · 0 评论