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

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

Unschedulable
Initialized
Ready
PodScheduled
Unknown
Failed
Succeeded
Running
Pending
HostAliases
NodeName
NodeSelector
调度、网络、存储、安全相关的属性
举例Pod状态是Running但应用已停止服务的情况
Status字段的细分Conditions
Pod的当前状态
Lifecycle字段
ImagePullPolicy字段
Containers和Init Containers字段
容器要共享宿主机的Namespace
容器的Linux Namespace相关的属性
Pod级别的属性
Pod属性里的容器是一个普通的字段
Pod扮演传统部署环境里“虚拟机”的角色
Pod是Kubernetes项目中的最小编排单位
思考题
Pod对象的生命周期
Container的定义
Pod对象的属性
深入解析Pod对象之基本概念
如何理解Pod和Container的关系?

该思维导图由 AI 生成,仅供参考

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

Kubernetes中的Pod和Container是容器编排中的重要概念。Pod是最小的编排单位,包含调度、网络、存储和安全相关内容,类似于传统部署环境中的“虚拟机”,而容器则是运行在Pod中的“用户程序”。Pod的字段包括NodeSelector、NodeName和HostAliases等,对于理解Pod对象的设计和用法非常重要。Pod中的容器共享Linux Namespace,可以通过定义字段实现共享PID Namespace和宿主机的Namespace。此外,Pod中的容器定义包括ImagePullPolicy和Lifecycle字段,用于定义镜像拉取策略和容器生命周期钩子。Pod的状态包括Pending、Running、Succeeded、Failed和Unknown等,通过Status字段和Conditions细分状态可以了解Pod的运行情况。这些概念对于理解Kubernetes项目中的基本概念和容器编排至关重要。 在这篇文章中,详细讲解了Pod API对象,介绍了Pod的核心使用方法,并分析了Pod和Container在字段上的异同。Pod API对象是整个Kubernetes体系中最核心的一个概念,也是后面讲解各种控制器时都要用到的。读者可以通过学习本文,更好地理解和记忆Pod YAML中的核心字段,以及这些字段的准确含义。在下一篇文章中,作者承诺通过大量的实践,帮助读者巩固和进阶关于Pod API对象核心字段的使用方法。 总结:本文详细介绍了Kubernetes中的Pod和Container的重要概念,以及Pod的字段、容器共享Namespace、状态等内容。通过学习本文,读者能更好地理解和记忆Pod YAML中的核心字段,以及这些字段的准确含义。作者承诺在下一篇文章中,将通过大量的实践,帮助读者巩固和进阶关于Pod API对象核心字段的使用方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Kubernetes》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(83)

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

    作者回复: 课代表来了

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

    作者回复: 对啊

    2018-12-03
    2
    33
  • 安排
    你好,我进入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后已经默认开启了

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

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

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

    作者回复: 吃一堑长一智

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

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

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

    作者回复: 不会

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

    作者回复: 可以这么理解

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

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

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

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

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