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

15 | 深入解析Pod对象(二):使用进阶

Downward API支持的字段
示例Pod定义
容器能够直接获取Pod API对象本身的信息
创建ConfigMap对象
示例Pod定义
保存不需要加密的配置信息
Secret对象内容需经过Base64转码
创建Secret对象
示例Pod定义
存放加密数据到Etcd中
PodPreset对Pod对象的影响
示例PodPreset定义
Pod预设置功能
restartPolicy
readinessProbe
livenessProbe
InClusterConfig
默认Service Account
ServiceAccountToken
Kubernetes内置的服务账户
Downward API
ConfigMap
Secret
Kubernetes的探测机制是否满足需求
应用的健康检查方法
PodPreset
容器健康检查和恢复机制
Service Account
Projected Volume
思考题
深入解析Pod对象之使用进阶
Pod对象的高阶使用方法

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

你好,我是张磊。今天我和你分享的主题是:深入解析 Pod 对象之使用进阶。
在上一篇文章中,我深入解析了 Pod 的 API 对象,讲解了 Pod 和 Container 的关系。
作为 Kubernetes 项目里最核心的编排对象,Pod 携带的信息非常丰富。其中,资源定义(比如 CPU、内存等),以及调度相关的字段,我会在后面专门讲解调度器时再进行深入的分析。在本篇,我们就先从一种特殊的 Volume 开始,来帮助你更加深入地理解 Pod 对象各个重要字段的含义。
这种特殊的 Volume,叫作 Projected Volume,你可以把它翻译为“投射数据卷”。
备注:Projected Volume 是 Kubernetes v1.11 之后的新特性
这是什么意思呢?
在 Kubernetes 中,有几种特殊的 Volume,它们存在的意义不是为了存放容器里的数据,也不是用来进行容器和宿主机之间的数据交换。这些特殊 Volume 的作用,是为容器提供预先定义好的数据。所以,从容器的角度来看,这些 Volume 里的信息就是仿佛是被 Kubernetes“投射”(Project)进入容器当中的。这正是 Projected Volume 的含义。
到目前为止,Kubernetes 支持的 Projected Volume 一共有四种:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了Kubernetes中Pod对象的高级使用方法,重点讨论了Projected Volume的概念及其在容器中提供预定义数据的应用。通过详细讲解如何将加密数据存放到Etcd中,并在Pod的容器中挂载Volume的方式访问这些数据,读者可以深入了解Pod对象的高级特性。此外,文章还涉及了ConfigMap、Downward API和Service Account的使用方法,以及容器健康检查和恢复机制的定义。整体而言,本文通过实例详细介绍了Projected Volume的使用方法,为读者提供了深入了解Pod对象高阶使用的指导。对于想要深入了解Kubernetes的读者具有很高的参考价值。

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

全部留言(110)

  • 最新
  • 精选
  • 我来也
    在使用PodPreset对象时,发现并未生效,最终才知道是因为当初安装时未启用 Pod Preset.然后参考[https://kubernetes.io/docs/concepts/workloads/pods/podpreset/#enable-pod-preset] 修改 [/etc/kubernetes/manifests/kube-apiserver.yaml] 中的spec.containers.command: 修改原[ - --runtime-config=api/all=true]为[- --runtime-config=api/all=true,settings.k8s.io/v1alpha1=true], 新加一行[- --enable-admission-plugins=PodPreset] 可以等自动生效也可以强制重启[systemctl restart kubelet]. 然后再重新创建,就可以在pod中看见spec.containers.env.name:DB_PORT等信息了.

    作者回复: 对。新特性需要先启用。

    2018-09-27
    15
    45
  • 北卡
    我记得deployment所创建的pod restart策略只支持aways。是我使用的版本太低了吗?

    作者回复: deployment确实是这么要求的啊。不过你可以想想为什么。

    2018-09-27
    6
    22
  • snakorse
    probe的原理是通过sidecar容器来实现的吗

    作者回复: 不是的,exec

    2018-09-26
    18
  • 章宇军
    “需要注意的是,Secret 对象要求这些数据必须是经过 Base64 转码的,以免出现明文密码的安全隐患。” base64 等同于明文吧……我理解是主要是为了 binary 类型的数据。

    作者回复: 没错。Secret里要保存的东西很可能是一个文件,所以它的类型是map[string][]byte。但从设计的角度来说,Secret也需要避免用户把credential string直接写在yaml里。

    2018-10-20
    2
    13
  • 寞月
    老师好,probe我们在生产实际应用中,有个问题。就是,每次新部署的时候,旧容器要做graceful delete,这个会触发kubelet的delete逻辑。 只有在容器被kill以后,k8s才会remove 这个探针。即,容器已经收到kill信号在停服务了,但是探针还在检测于是一直报错。 不知道有没有配置可解决这个问题。

    作者回复: 嗯,代码实现目前就是这样的。有具体的影响吗?除了报错比较多之外。

    2018-10-19
    2
    11
  • 龙坤
    老师你好,有句话不太明白 原文:“相信你一定有过这样的想法:我现在有了一个 Pod,我能不能在这个 Pod 里安装一个 Kubernetes 的Client,这样就可以从容器里直接访问并且操作这个 Kubernetes 的 API 了呢?” 1. 这里可以举个简单例子吗? 2.“kubernetes的client”指的是什么? 3. 操作“kubernetes的API”这里的API由指什么? 小白问题,过不了这关,听得有点晕。见谅

    作者回复: client library,kubernetes 对外暴露的api

    2018-09-27
    4
    9
  • Pixar
    复习了下容器的检查探针, 有几个点还是没太明白, 还望老师能解答下: 1. restartPolicy : 这个restartPolicy是重启的Pod的Container, 那么重启的时机是根据Container结束时返回的状态码吗? 2. restart 和 probe的关系: Pod某个容器的livenessProbe 返回fail, 这个时候Container并没有结束, 只是状态检查是失败的, 那为什么Container也会重启呢? 这个重启动作是谁发起的呢? 3. readnessProbe: 如果某个Pod含多个Container, 且每个都有readnessProbe, 那是不是说只有全部Container的Probe返回success, 该Pod才会是 readness呢?

    作者回复: 很简单。restart policy 要尊重 liveness probe

    2018-12-02
    2
    7
  • 微思
    在讲述livenessProbe的时候说到:虽然是 Restart(重启),但实际却是重新创建了容器;那之前那个还在运行的liveness容器被自动销毁了吗?

    作者回复: 对

    2018-09-26
    7
  • 我来也
    文章中的代码 dapi-volume.yaml 格式不对,被取消了缩进,导致直接贴出来使用会报错. 还有按文章中的命令 kubectl create secret generic user --from-file=./username.txt ,在pod中[ kubectl exec -it test-projected-volume -- /bin/sh]展示的目录不是user,而是username.txt. 可以通过[kubectl edit secrets user]手动修改data:下的字段名.

    作者回复: 请仔细看,我在文稿列出来的exec的输出,是第二种方法、也就是写YAML文件方法创建的Secret。而你列出来的是第一种方法创建的Secret。他俩本来就是不一样的。

    2018-09-26
    2
    4
  • 风行传说
    老师,我想问一下,您文章里面讲到的pod.spec.volumes.projected.sources下的这四种对象中的configMap secret 和pod.spec.volumes下的configMap secret是否有区别,如果没有区别那为何相同的功能对象要设置在两个不同的对象下面呢?这点让我不是特别理解,希望您能给予一下解答,谢谢!

    作者回复: 很简单啦。projected volume 是新api,四个定义在一起。后者是老api,分开的。以后尽量用新api。

    2018-09-26
    2
    4
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部