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
《深入剖析 Kubernetes》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(82)
- 最新
- 精选
- blackpiglet对于 Pod 状态是 Ready,实际上不能提供服务的情况能想到几个例子: 1. 程序本身有 bug,本来应该返回 200,但因为代码问题,返回的是500; 2. 程序因为内存问题,已经僵死,但进程还在,但无响应; 3. Dockerfile 写的不规范,应用程序不是主进程,那么主进程出了什么问题都无法发现; 4. 程序出现死循环。
作者回复: 课代表来了
2301 - 细雨问一下老师,infra 网络的镜像为什么取名字叫 pause 呀,难道它一直处于“暂停状态”吗?
作者回复: 对啊
232 - 安排你好,我进入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了?
312 - 徐海浪以前我对容器的认识还不深,竟然用tail -f Catalina.out作为前台进程,这样即使tomcat进程挂掉,容器还是正在运行。应用不可用tomcat进程还在经常会遇到,比如内存溢出,或者应用依赖的数据库等外部系统动荡导致应用不正常。怎么在应用的角度来决定容器是否应该退出?应用提供一个健康检查url,跑前台shell定期检查该url,状态不对则shell退出,从而容器退出。
作者回复: 吃一堑长一智
911 - 姜戈通过node selector将任务调度到了woker1 成功运行之后 再修改worker1的label, 任务会重新调度吗?
作者回复: 不会
8 - hexinzhe比较想要知道优雅停机方面的更详细内容,比如说terminationgraceperiodseconds与prestop之间的关系,两者怎么用
作者回复: 前者就是sig term的超时时间。后者是要你自己编写逻辑处理的。
38 - ethfoo如果pod加了健康检查,是不是就不关心应用进程是不是容器的初始化进程呢?因为应用进程挂了,虽然容器不会自动退出,但是kubelet会主动去kill掉这个容器
作者回复: 可以这么理解
8 - 混沌渺无极各位,中秋节好。 如果entrypoint是一个一直运行的命令,那postStart会执行吗?还是启动一个协程成执行entrypoint,然后再运行一个协程执行这个postStart,所以这两个命令的执行状态是独立的,没有真正的先后关系。
作者回复: 文中不是已经解释了?当然会执行,不管entrypoint。
6
收起评论