深入剖析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
登录|注册

13 | 为什么我们需要Pod?

张磊 2018-09-21
你好,我是张磊。今天我和你分享的主题是:为什么我们需要 Pod。
在前面的文章中,我详细介绍了在 Kubernetes 里部署一个应用的过程。在这些讲解中,我提到了这样一个知识点:Pod,是 Kubernetes 项目中最小的 API 对象。如果换一个更专业的说法,我们可以这样描述:Pod,是 Kubernetes 项目的原子调度单位。
不过,我相信你在学习和使用 Kubernetes 项目的过程中,已经不止一次地想要问这样一个问题:为什么我们会需要 Pod?
是啊,我们在前面已经花了很多精力去解读 Linux 容器的原理、分析了 Docker 容器的本质,终于,“Namespace 做隔离,Cgroups 做限制,rootfs 做文件系统”这样的“三句箴言”可以朗朗上口了,为什么 Kubernetes 项目又突然搞出一个 Pod 来呢?
要回答这个问题,我们还是要一起回忆一下我曾经反复强调的一个问题:容器的本质到底是什么?
你现在应该可以不假思索地回答出来:容器的本质是进程。
没错。容器,就是未来云计算系统中的进程;容器镜像就是这个系统里的“.exe”安装包。那么 Kubernetes 呢?
你应该也能立刻回答上来:Kubernetes 就是操作系统!
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(111)

  • 段帅民
    这文章读起来像吃脆苹果,爽,这是我订阅专栏中写的最好的,没有之一

    作者回复: 这是我见过最形象的评论……

    2018-09-21
    2
    126
  • Jeff.W
    pod是一个小家庭,它把密不可分的家庭成员(container)聚在一起,Infra container则是家长,掌管家中共通资源,家庭成员通过sidecar方式互帮互助,其乐融融~
    2018-09-30
    62
  • Q宝的宝
    痛快,每一篇都鞭辟入里。
    2018-09-21
    46
  • 风轨
    刚上网查了,Linux 支持7种namespace:
    1. cgroup用于隔离cgroup根目录;
    2. IPC用于隔离系统消息队列;
    3. Network隔离网络;
    4. Mount隔离挂载点;
    5. PID隔离进程;
    6. User隔离用户和用户组;
    7. UTS隔离主机名nis域名。

    pod里网络和文件系统应该是用得最多的,其他的应用程序基本不用吧?
    2018-09-21
    1
    22
  • huan
    重要理解了这个核心概念,透透透!不但解决了我前几天war和tomcat做一起,完成镜像的频繁打包问题,而且还想到怎么用puppeteer做一个init container,然后注入到nodejs主容器,从而解决chrome headless太大不容易安装的问题,爽爽爽!
    2018-09-21
    1
    21
  • 特里王
    感谢张磊,这是本人看过解释 Pod 以及为何要有 Pod 这个设计最好的文章(看过估计20篇,这是第一篇中文的)。

    云计算系统的操作系统是 k8s ,容器就相当于是其进程,而 Pod 则是进程组。这样解释给有 Linux 运维底子的人听,基本上一下子就明白过来了。赞!但容器镜像是「 .exe 」安装包似乎有点不妥,个人觉得是二进制可执行安装包似乎更恰当和通用一些。

    Pod 的另一个重要意义,容器设计模式,通过这篇里有了更深的认知,在迁移传统基于虚拟机的应用时起到了关键作用。

    其实 k8s.gcr.io/pause 是前不久读了好几遍(因为讲的比较生涩) Ian Lewis 的 The Almighty Pause Container 这篇才基本明白原理。再读这篇算是巩固和解惑了。

    「而后这个 /app 目录,就挂载了一个名叫 app-volume 的 Volume 」惭愧,作为有18年实践经验的 Linux 老司机居然也愣了几十秒,继续往下看解释后才恍然大悟 volume 和 mountPath 是 bind mount (建议附注一下是绑定挂载)。

    最后的总结也非常棒,「 Pod 实际上是在扮演传统基础设施里"虚拟机"的角色;而容器则是这个虚拟机里的应用程序」。要完成传统基于虚拟机的应用到微服务架构的迁移,核心思想是:分析应用组成(组件、进程),将其拆分成松耦合的容器(以容器镜像方式分发),利用 Init Container 来解决顺序和依赖关系。

    这个课程,光这一篇就值回票价了。居然还附带学习到了 Docker Swarm 的局限性。
    2019-02-05
    17
  • 虎虎❤️
    讲的真的用心,水平也高。被圈粉,希望一直能出专栏。您一定有一票粉丝支持和跟随的!继续加油。
    2018-09-21
    15
  • 刘榴
    好专栏啊,再写成书继续支持
    2018-09-21
    12
  • 三环没有少
    如果写成一本书,一定会是最畅销的 k8s 书籍
    2018-11-26
    1
    11
  • Racoon
    k8s.gcr.io/pause
    在node节点上一直看到有这个镜像,搞不懂是干嘛的
    如今一看 豁然开朗
    2018-10-09
    10
  • 小新是也
    war包跟tomcat这个栗子举得恰到好处啊
    2018-09-24
    10
  • 北卡
    看得太爽了。请教一个问题:
    war和tamcat这种情况。
    如果把war独立出来做一个镜像的话,应该用什么做基础镜像呢?
    我现在做镜像的时候通常都是用debian做基础镜像,但如果只是为了复制这个.war包的话,用debian感觉蛮浪费的。应该怎样做到最小呢,而且要支持cp命令。

    作者回复: 市面上的小镜像多的很啊,busybox,alpine

    2018-09-24
    9
  • 草原之巅
    张磊真牛逼! 堪称高手中的高手!
    2018-11-20
    6
  • songyy
    为什么说“Docker in Docker”这种方式在生产环境后患无穷呀?

    作者回复: 因为是坑的二次方

    2018-10-16
    6
  • wilson
    从事Linux运维工作多年,有一点一直有点不明白,这里到底谁挂载到谁上面:
    volumeMounts:
          -mountpath: /app
            name: app-volume

    文中有有这句话说"而后这个 /app 目录,就挂载了一个名叫 app-volume的Volume"
    这里是说将app-volume挂载到/app上,但是app是个目录,那我想问的是app-volume是个目录还是设备?
    同样下面:
    volumeMounts:
        -mountpath:/root/apache-tomcat-7.0.42-v2/webapps
           name:app-volume
    ---Tomecat容器同样声明了挂载app-volume到自己的webapps目录下

    这里又说把app-volume挂载到webapps下,webapps明显是个目录,那app-volume是个目录吗?

    但是我清楚记得在Linux下。如果要挂载一个分区设备到一个目录或者一个目录到另外一个主机目录下应该是:
    mount -t xxfs src_dir dest_dir
    比如: mount -t xfs /dev/sda /opt/app
               mount -t nfs /share/data 192.168.0.100:/data
    上面的挂载的app-volume到底是设备还是文件,或者是去的一个别名?

    作者回复: volume的挂载是bind mount,不是设备,它的功能就是把文件或目录绑定挂载在一起,所以你这里的纠结谁在谁上面是没有意义的……唯一需要明确的是,bind mount的挂载点,是容器volume在宿主机上的目录。这一块在容器基础部分有详细的解释。

    2018-09-22
    1
    6
  • fatCat
    以前看博客文章,都是哎呀妈呀脑瓜疼脑瓜疼,现在终于不疼了不疼了~~~
    2018-09-21
    5
  • 你好吗?我很好!
    请问大家这个只有纯内容的war包镜像怎么制作呀?有哪个镜像的Dockerfile可以参考的吗?
    2019-03-20
    1
    4
  • 骨汤鸡蛋面
    张老师,我们公司一直有一个问题: 我们用docker 管理测试环境,对于springboot 项目,一向是java -jar xx.jar 的方式启动,但因为是测试环境,经常代码本身有问题导致java(也就是容器主进程)启动不起来,进而触发健康检查重新调度该服务,然后开发总是抱怨看不到事故现场。我打算自己实现一个程序(我们称为nile),容器启动时先启动nile确保容器可以启动起来,再由nile启动java进程。这时还可以让nile 读取用户配置 自定义设置jvm 参数、nile向zk汇报一些应用情况等。这个做法呢,nile可以算是java 的sidecar,按您文章的说法,nile和java 是拓扑关系而不是对等关系,这个时候我一个pod里分别是nile和java容器是否可能呢?

    作者回复: 如果nile不负责管理java进程的话当然可以。否则的话就是同一个容器。

    2018-11-04
    4
  • extraterrestrial!!
    容器不能管理多进程那块,能不能每个容器都默认搬一套系统的init过去,而不要让普通应用进程做进程1,这样是不是就可以支持容器里面管理多进程了?

    作者回复: 对。不过我们现在讲的古典互联网技术不太建议这么做,这是原始互联网时代的思路。

    2018-09-21
    1
    4
  • Eddie LAU
    此专栏追到现在,老师用通俗的语言阐述了k8s的原理的同时也极力推崇k8s。我在学习使用的过程中也确实体会到了其各种优势。但是反过来想,老师是否可以简单举两个例子说下k8s目前为止依然存在的一些缺陷和不足呢?方便我们在应用过程中加以注意。

    作者回复: 不足之处肯定要在具体剖析特性的时候才会讲到。另外,这Kubernetes可不是推崇的问题,你会觉得我在推崇Linux吗?

    2018-09-23
    3
收起评论
99+
返回
顶部