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

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

     2
     145
  • Jeff.W
    2018-09-30
    pod是一个小家庭,它把密不可分的家庭成员(container)聚在一起,Infra container则是家长,掌管家中共通资源,家庭成员通过sidecar方式互帮互助,其乐融融~
    
     71
  • Q宝的宝
    2018-09-21
    痛快,每一篇都鞭辟入里。
    
     46
  • 特里王
    2019-02-05
    感谢张磊,这是本人看过解释 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 的局限性。
    展开
    
     31
  • 风轨
    2018-09-21
    刚上网查了,Linux 支持7种namespace:
    1. cgroup用于隔离cgroup根目录;
    2. IPC用于隔离系统消息队列;
    3. Network隔离网络;
    4. Mount隔离挂载点;
    5. PID隔离进程;
    6. User隔离用户和用户组;
    7. UTS隔离主机名nis域名。

    pod里网络和文件系统应该是用得最多的,其他的应用程序基本不用吧?
    展开
     1
     26
  • huan
    2018-09-21
    重要理解了这个核心概念,透透透!不但解决了我前几天war和tomcat做一起,完成镜像的频繁打包问题,而且还想到怎么用puppeteer做一个init container,然后注入到nodejs主容器,从而解决chrome headless太大不容易安装的问题,爽爽爽!
     1
     22
  • 虎虎❤️
    2018-09-21
    讲的真的用心,水平也高。被圈粉,希望一直能出专栏。您一定有一票粉丝支持和跟随的!继续加油。
    
     17
  • 刘榴
    2018-09-21
    好专栏啊,再写成书继续支持
    
     14
  • 三环没有少
    2018-11-26
    如果写成一本书,一定会是最畅销的 k8s 书籍
     1
     11
  • 小新是也
    2018-09-24
    war包跟tomcat这个栗子举得恰到好处啊
    
     11
  • Racoon
    2018-10-09
    k8s.gcr.io/pause
    在node节点上一直看到有这个镜像,搞不懂是干嘛的
    如今一看 豁然开朗
    
     10
  • songyy
    2018-10-16
    为什么说“Docker in Docker”这种方式在生产环境后患无穷呀?

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

    
     9
  • 北卡
    2018-09-24
    看得太爽了。请教一个问题:
    war和tamcat这种情况。
    如果把war独立出来做一个镜像的话,应该用什么做基础镜像呢?
    我现在做镜像的时候通常都是用debian做基础镜像,但如果只是为了复制这个.war包的话,用debian感觉蛮浪费的。应该怎样做到最小呢,而且要支持cp命令。

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

    
     9
  • wilson
    2018-09-22
    从事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在宿主机上的目录。这一块在容器基础部分有详细的解释。

     2
     8
  • 草原之巅
    2018-11-20
    张磊真牛逼! 堪称高手中的高手!
    
     6
  • fatCat
    2018-09-21
    以前看博客文章,都是哎呀妈呀脑瓜疼脑瓜疼,现在终于不疼了不疼了~~~
    
     5
  • 你好吗?我很好!
    2019-03-20
    请问大家这个只有纯内容的war包镜像怎么制作呀?有哪个镜像的Dockerfile可以参考的吗?
     1
     4
  • 骨汤鸡蛋面
    2018-11-04
    张老师,我们公司一直有一个问题: 我们用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进程的话当然可以。否则的话就是同一个容器。

    
     4
  • 巩夫建
    2018-09-21
    非常棒,释义了pod的理念。有个小问题,像我之前一个docker中跑tomcat和nginx两个进程,共用同一个文件,如果拆成三部分,第一init container 文件镜像,第二 tomcat镜像,第三 nginx镜像,如何保证init container 启动后启动tomcat,最后启动nginx,还有这种优点有什么?目前只想到镜像高复用,谢谢作者。

    作者回复: nginx容器启动前做检查即可。主要好处就是解偶。

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

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

     1
     4
我们在线,来聊聊吧