深入剖析Kubernetes
张磊
Kubernetes社区资深成员与项目维护者
立即订阅
22715 人已学习
课程目录
已完结 56 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (5讲)
开篇词 | 打通“容器技术”的任督二脉
免费
01 | 预习篇 · 小鲸鱼大事记(一):初出茅庐
02 | 预习篇 · 小鲸鱼大事记(二):崭露头角
03 | 预习篇 · 小鲸鱼大事记(三):群雄并起
04 | 预习篇 · 小鲸鱼大事记(四):尘埃落定
容器技术概念入门篇 (5讲)
05 | 白话容器基础(一):从进程说开去
06 | 白话容器基础(二):隔离与限制
07 | 白话容器基础(三):深入理解容器镜像
08 | 白话容器基础(四):重新认识Docker容器
09 | 从容器到容器云:谈谈Kubernetes的本质
Kubernetes集群搭建与实践 (3讲)
10 | Kubernetes一键部署利器:kubeadm
11 | 从0到1:搭建一个完整的Kubernetes集群
12 | 牛刀小试:我的第一个容器化应用
容器编排与Kubernetes作业管理 (15讲)
13 | 为什么我们需要Pod?
14 | 深入解析Pod对象(一):基本概念
15 | 深入解析Pod对象(二):使用进阶
16 | 编排其实很简单:谈谈“控制器”模型
17 | 经典PaaS的记忆:作业副本与水平扩展
18 | 深入理解StatefulSet(一):拓扑状态
19 | 深入理解StatefulSet(二):存储状态
20 | 深入理解StatefulSet(三):有状态应用实践
21 | 容器化守护进程的意义:DaemonSet
22 | 撬动离线业务:Job与CronJob
23 | 声明式API与Kubernetes编程范式
24 | 深入解析声明式API(一):API对象的奥秘
25 | 深入解析声明式API(二):编写自定义控制器
26 | 基于角色的权限控制:RBAC
27 | 聪明的微创新:Operator工作原理解读
Kubernetes容器持久化存储 (4讲)
28 | PV、PVC、StorageClass,这些到底在说啥?
29 | PV、PVC体系是不是多此一举?从本地持久化卷谈起
30 | 编写自己的存储插件:FlexVolume与CSI
31 | 容器存储实践:CSI插件编写指南
Kubernetes容器网络 (8讲)
32 | 浅谈容器网络
33 | 深入解析容器跨主机网络
34 | Kubernetes网络模型与CNI网络插件
35 | 解读Kubernetes三层网络方案
36 | 为什么说Kubernetes只有soft multi-tenancy?
37 | 找到容器不容易:Service、DNS与服务发现
38 | 从外界连通Service与Service调试“三板斧”
39 | 谈谈Service与Ingress
Kubernetes作业调度与资源管理 (5讲)
40 | Kubernetes的资源模型与资源管理
41 | 十字路口上的Kubernetes默认调度器
42 | Kubernetes默认调度器调度策略解析
43 | Kubernetes默认调度器的优先级与抢占机制
44 | Kubernetes GPU管理与Device Plugin机制
Kubernetes容器运行时 (3讲)
45 | 幕后英雄:SIG-Node与CRI
46 | 解读 CRI 与 容器运行时
47 | 绝不仅仅是安全:Kata Containers 与 gVisor
Kubernetes容器监控与日志 (3讲)
48 | Prometheus、Metrics Server与Kubernetes监控体系
49 | Custom Metrics: 让Auto Scaling不再“食之无味”
50 | 让日志无处可逃:容器日志收集与管理
再谈开源与社区 (1讲)
51 | 谈谈Kubernetes开源社区和未来走向
答疑文章 (1讲)
52 | 答疑:在问题中解决问题,在思考中产生思考
特别放送 (1讲)
特别放送 | 2019 年,容器技术生态会发生些什么?
结束语 (1讲)
结束语 | Kubernetes:赢开发者赢天下
特别放送 | 云原生应用管理系列 (1讲)
基于 Kubernetes 的云原生应用管理,到底应该怎么做?
深入剖析Kubernetes
登录|注册

05 | 白话容器基础(一):从进程说开去

张磊 2018-09-03
你好,我是张磊。今天我和你分享的主题是:白话容器基础之从进程说开去。
在前面的 4 篇预习文章中,我梳理了“容器”这项技术的来龙去脉,通过这些内容,我希望你能理解如下几个事实:
容器技术的兴起源于 PaaS 技术的普及;
Docker 公司发布的 Docker 项目具有里程碑式的意义;
Docker 项目通过“容器镜像”,解决了应用打包这个根本性难题。
紧接着,我详细介绍了容器技术圈在过去五年里的“风云变幻”,而通过这部分内容,我希望你能理解这样一个道理:
容器本身没有价值,有价值的是“容器编排”。
也正因为如此,容器技术生态才爆发了一场关于“容器编排”的“战争”。而这次战争,最终以 Kubernetes 项目和 CNCF 社区的胜利而告终。所以,这个专栏后面的内容,我会以 Docker 和 Kubernetes 项目为核心,为你详细介绍容器技术的各项实践与其中的原理。
不过在此之前,你还需要搞清楚一个更为基础的问题:
容器,到底是怎么一回事儿?
在第一篇预习文章《小鲸鱼大事记(一):初出茅庐》中,我已经提到过,容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去,这不就是 PaaS 最理想的状态嘛。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(101)

  • Hurt 置顶
    为什么clone()时 还有线程呢 是写错了吗 还是有线程的启动啊

    作者回复: 看得非常认真!严格说,clone()是线程操作,但linux 的线程是用进程实现的

    2018-09-03
    4
    49
  • atompi 置顶
    下一讲:隔离与限制,会介绍Cgroups的
    2018-09-03
    24
  • blackpiglet
    1 用 namespace 框住app。
    2 PID, UTS, network, user, mount, IPC, cgroup

    虽然本质上理解,namespace 和 cgroup 是内核特性,容器本质上就是一个加了限定参数的进程,效果上看,图画的也没毛病。
    这么看,是不是说容器的安全性,也就是隔离性,就是没办法达到虚拟机的级别呢?

    作者回复: 没错,已经进门了哈

    2018-09-03
    1
    64
  • manatee
    想请问下老师,如果说容器只是跑在系统上的一个进程,那容器和宿主机不同os
    又是怎么实现的呢,请帮忙解惑,谢谢。
    2018-09-07
    3
    55
  • 包子
    老师有个问题一直困扰,容器是一个单进程,那比如我有一个镜像里面集成了jdk, netstat, ping等,虽然这个容器启动时里面是一个java进程,但是我可以进到容器里面执行各种命令,比如netstat等,那这些命令在容器的运行过程中是在运行的吗?

    作者回复: 是在运行的。但它们不受docker的控制,就像野孩子。所以单进程意思不是只能运行一个进程,而是只有一个进程是可控的。

    2018-09-03
    46
  • 登高
    👍docker是没有上过历史课的进程

    作者回复: 查水表!

    2018-09-04
    35
  • 寻找自我
    做了几年内核开发,看过docker源码,用lxc搞了一个容器轮子。浙大SEL实验室确实很早就在进行docker的研究,以前也跟进看过很多文章。lxc不是新东西,不过还是很多人不懂原理,博主文章通俗易懂,点赞!
    2018-09-03
    20
  • huan
    第一个问题,我感觉docker engine 最好虚线标识,表示他只是一种启动时用,运行时并不需要,真实进程是直接run在host os上

    作者回复: 听起来不错哦

    2018-09-03
    20
  • jssfy
    进一步,1. 如果容器镜像os支持某硬件的驱动,但是宿主机os如果不支持该硬件驱动的话,是否也白搭
    2. 是否可以理解为 镜像只是提供了一套镜像文件系统中的各种文件,而各种内核相关的模块或者特性支持,完全依赖于宿主机?

    作者回复: 说的没毛病。

    2018-09-08
    1
    14
  • Yuk亮
    镜像的运行对host os有要求吗? 比如打包的镜像原来的kernel和运行时的kernel不一致,又或者镜像的发行版是centos,能运行在host为ubuntu的机器上吗

    作者回复: 只要应用本身对内核没要求,那就完全没问题

    2018-09-03
    10
  • 贾鹏
    user ns这块我理解的不太清楚,默认情况下容器里的root和宿主机root感觉是一样的(通过/proc/pid/uid_map看映射关系是把容器uid 0映射到宿主机0了),而且在容器中能把主机cpu下线。感觉userns-remap特性好像也解决不了这个cpu下线的问题。希望得到老师的解惑,谢谢。或者如果方便的话能不能加下微信呢: jp6439

    作者回复: user ns只修改user/group相关的视图。不过不太明白把cpu下线是什么情况?

    2018-09-03
    10
  • extraterrestrial!!
    能再推荐点扩展阅读材料就更好了,比如有一些不同资源使用namespace的程序例子,从内核的视角用没用namespace有啥区别,以及namespace的实现之类的~

    作者回复: 收到,后面推荐

    2018-09-03
    10
  • Maiza
    真的是白话 😄,终于搞懂了 namespace 了,话说 cgroup 是啥 。。。
    2018-09-03
    8
  • Kaer
    虚拟化和容器的最大区别可以理解这个吗:1:虚拟化是同一台物理机不同的操作系统隔离应用进程2:但是容器是同一个操作系统的不同进程隔离。 简单来说就是:一个是操作系统级别隔离,一个是进程间隔离。

    作者回复: 实际上是 硬件级别 的隔离 VM可是有虚拟硬件的

    2018-09-03
    7
  • 贾鹏
    ipc pid mnt net uts user cgroup

    作者回复: cgroup ns是个新东西,能知道这个的可以做老师了哈

    2018-09-03
    7
  • 包子
    老师有个问题一直困扰,容器是一个单进程,那比如我有一个镜像里面集成了jdk, netstat, ping等,虽然这个容器启动时里面是一个java进程,但是我可以进到容器里面执行各种命令,比如netstat等,那这些命令在容器的运行过程中是在运行的吗?
    ---------
    作者回复
    是在运行的。但它们不受docker的控制,就像野孩子。所以单进程意思不是只能运行一个进程,而是只有一个进程是可控的。

    老师接着这个问题有几个问题
    1. 这些不被docker管理的进程在哪里能看得到?这些进程是否会很占用硬件资源?比如netstat
    2. 关于mac上运行的docker,比如容器进程依赖linux内核的版本4.2才能正确运行(镜像的内核版本是4.2的),那么既然docker只是用资源隔离的形式运行的。那我在mac起的这个容器时是否能正确运行?他会加载完整的linux操作系统吗?

    作者回复: ps同样可以看到。win mac docker上跑其实都是个虚拟机

    2018-09-04
    6
  • 李晶
    有一个问题 所以通过pid 可以判断自己是在docker里面还是在宿主机上。怎么通过命令行知道自己现在是在container里面还是在外面?

    作者回复: 有很多种方法。比如查看/proc/1/cgroup下的文件结构

    2018-09-03
    6
  • Jay
    老师,Cgroups是不是没有细讲?

    作者回复: 当然是下一篇

    2018-09-03
    6
  • 终身学习
    在docker出来之前是怎么用容器的,有想到把操作系统包进去吗?容器技术又是基于什么原因出现的呢?

    作者回复: 那时候各家有各家的方法,也打包操作系统,叫rootfs,请关注后面镜像部分的讲解

    2018-09-03
    5
  • kyleqian
    chroot没提到啊,这个应该是一种很关键的资源隔离机制吧。

    作者回复: 哈哈,下一篇马上就来

    2018-09-03
    5
收起评论
99+
返回
顶部