深入剖析 Kubernetes
张磊
Kubernetes 社区资深成员与项目维护者
112983 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 57 讲
再谈开源与社区 (1讲)
结束语 (1讲)
深入剖析 Kubernetes
15
15
1.0x
00:00/00:00
登录|注册

14 | 深入解析Pod对象(一):基本概念

你好,我是张磊。今天我和你分享的主题是:深入解析 Pod 对象之基本概念。
在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念。而在今天这篇文章中,我会和你分享 Pod 对象的更多细节。
现在,你已经非常清楚:Pod,而不是容器,才是 Kubernetes 项目中的最小编排单位。将这个设计落实到 API 对象上,容器(Container)就成了 Pod 属性里的一个普通的字段。那么,一个很自然的问题就是:到底哪些属性属于 Pod 对象,而又有哪些属性属于 Container 呢?
要彻底理解这个问题,你就一定要牢记我在上一篇文章中提到的一个结论:Pod 扮演的是传统部署环境里“虚拟机”的角色。这样的设计,是为了使用户从传统环境(虚拟机环境)向 Kubernetes(容器环境)的迁移,更加平滑。
而如果你能把 Pod 看成传统环境里的“机器”、把容器看作是运行在这个“机器”里的“用户程序”,那么很多关于 Pod 对象的设计就非常容易理解了。
比如,凡是调度、网络、存储,以及安全相关的属性,基本上是 Pod 级别的。
这些属性的共同特征是,它们描述的是“机器”这个整体,而不是里面运行的“程序”。比如,配置这个“机器”的网卡(即:Pod 的网络定义),配置这个“机器”的磁盘(即:Pod 的存储定义),配置这个“机器”的防火墙(即:Pod 的安全定义)。更不用说,这台“机器”运行在哪个服务器之上(即:Pod 的调度)。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(82)

  • 最新
  • 精选
  • blackpiglet
    对于 Pod 状态是 Ready,实际上不能提供服务的情况能想到几个例子: 1. 程序本身有 bug,本来应该返回 200,但因为代码问题,返回的是500; 2. 程序因为内存问题,已经僵死,但进程还在,但无响应; 3. Dockerfile 写的不规范,应用程序不是主进程,那么主进程出了什么问题都无法发现; 4. 程序出现死循环。

    作者回复: 课代表来了

    2
    301
  • 细雨
    问一下老师,infra 网络的镜像为什么取名字叫 pause 呀,难道它一直处于“暂停状态”吗?

    作者回复: 对啊

    2
    32
  • 安排
    你好,我进入shell容器,然后执行ps ax,跟例子的结果不一样。例子代码也一样,添加了shareProcessNamespace: true了,为什么不行呢,请问可能出现的原因在哪里 / # ps PID USER TIME COMMAND 1 root 0:00 sh 10 root 0:00 ps 请问怎么开启sharepid功能呢?

    作者回复: apiserver 加—feature-gates=PodShareProcessNamespace=true 1.11后已经默认开启了

    20
  • 两两
    pod runing好理解,但k8s怎么知道容器runing呢,通过什么标准判断?应用死循环,k8s怎么能感知?

    作者回复: liveness和readiness啥区别?

    14
  • 杨孔来
    老师,如果pod中的image更新了(比如 通过jenkins发布了新版本),我想通过重启pod,获取最新的image,有什么命令,可以优雅的重启pod,而不影响当前pod提供的业务吗

    作者回复: 不是讲了prestop hook了?

    3
    12
  • 徐海浪
    以前我对容器的认识还不深,竟然用tail -f Catalina.out作为前台进程,这样即使tomcat进程挂掉,容器还是正在运行。应用不可用tomcat进程还在经常会遇到,比如内存溢出,或者应用依赖的数据库等外部系统动荡导致应用不正常。怎么在应用的角度来决定容器是否应该退出?应用提供一个健康检查url,跑前台shell定期检查该url,状态不对则shell退出,从而容器退出。

    作者回复: 吃一堑长一智

    9
    11
  • 姜戈
    通过node selector将任务调度到了woker1 成功运行之后 再修改worker1的label, 任务会重新调度吗?

    作者回复: 不会

    8
  • hexinzhe
    比较想要知道优雅停机方面的更详细内容,比如说terminationgraceperiodseconds与prestop之间的关系,两者怎么用

    作者回复: 前者就是sig term的超时时间。后者是要你自己编写逻辑处理的。

    3
    8
  • ethfoo
    如果pod加了健康检查,是不是就不关心应用进程是不是容器的初始化进程呢?因为应用进程挂了,虽然容器不会自动退出,但是kubelet会主动去kill掉这个容器

    作者回复: 可以这么理解

    8
  • 混沌渺无极
    各位,中秋节好。 如果entrypoint是一个一直运行的命令,那postStart会执行吗?还是启动一个协程成执行entrypoint,然后再运行一个协程执行这个postStart,所以这两个命令的执行状态是独立的,没有真正的先后关系。

    作者回复: 文中不是已经解释了?当然会执行,不管entrypoint。

    6
收起评论
显示
设置
留言
82
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部