深入剖析Kubernetes
张磊
Kubernetes社区资深成员与项目维护者
立即订阅
22715 人已学习
课程目录
已完结 56 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (5讲)
开篇词 | 打通“容器技术”的任督二脉
免费
01 | 预习篇 · 小鲸鱼大事记(一):初出茅庐
02 | 预习篇 · 小鲸鱼大事记(二):崭露头角
03 | 预习篇 · 小鲸鱼大事记(三):群雄并起
04 | 预习篇 · 小鲸鱼大事记(四):尘埃落定
容器技术概念入门篇 (5讲)
05 | 白话容器基础(一):从进程说开去
06 | 白话容器基础(二):隔离与限制
07 | 白话容器基础(三):深入理解容器镜像
08 | 白话容器基础(四):重新认识Docker容器
09 | 从容器到容器云:谈谈Kubernetes的本质
Kubernetes集群搭建与实践 (3讲)
10 | Kubernetes一键部署利器:kubeadm
11 | 从0到1:搭建一个完整的Kubernetes集群
12 | 牛刀小试:我的第一个容器化应用
容器编排与Kubernetes作业管理 (15讲)
13 | 为什么我们需要Pod?
14 | 深入解析Pod对象(一):基本概念
15 | 深入解析Pod对象(二):使用进阶
16 | 编排其实很简单:谈谈“控制器”模型
17 | 经典PaaS的记忆:作业副本与水平扩展
18 | 深入理解StatefulSet(一):拓扑状态
19 | 深入理解StatefulSet(二):存储状态
20 | 深入理解StatefulSet(三):有状态应用实践
21 | 容器化守护进程的意义:DaemonSet
22 | 撬动离线业务:Job与CronJob
23 | 声明式API与Kubernetes编程范式
24 | 深入解析声明式API(一):API对象的奥秘
25 | 深入解析声明式API(二):编写自定义控制器
26 | 基于角色的权限控制:RBAC
27 | 聪明的微创新:Operator工作原理解读
Kubernetes容器持久化存储 (4讲)
28 | PV、PVC、StorageClass,这些到底在说啥?
29 | PV、PVC体系是不是多此一举?从本地持久化卷谈起
30 | 编写自己的存储插件:FlexVolume与CSI
31 | 容器存储实践:CSI插件编写指南
Kubernetes容器网络 (8讲)
32 | 浅谈容器网络
33 | 深入解析容器跨主机网络
34 | Kubernetes网络模型与CNI网络插件
35 | 解读Kubernetes三层网络方案
36 | 为什么说Kubernetes只有soft multi-tenancy?
37 | 找到容器不容易:Service、DNS与服务发现
38 | 从外界连通Service与Service调试“三板斧”
39 | 谈谈Service与Ingress
Kubernetes作业调度与资源管理 (5讲)
40 | Kubernetes的资源模型与资源管理
41 | 十字路口上的Kubernetes默认调度器
42 | Kubernetes默认调度器调度策略解析
43 | Kubernetes默认调度器的优先级与抢占机制
44 | Kubernetes GPU管理与Device Plugin机制
Kubernetes容器运行时 (3讲)
45 | 幕后英雄:SIG-Node与CRI
46 | 解读 CRI 与 容器运行时
47 | 绝不仅仅是安全:Kata Containers 与 gVisor
Kubernetes容器监控与日志 (3讲)
48 | Prometheus、Metrics Server与Kubernetes监控体系
49 | Custom Metrics: 让Auto Scaling不再“食之无味”
50 | 让日志无处可逃:容器日志收集与管理
再谈开源与社区 (1讲)
51 | 谈谈Kubernetes开源社区和未来走向
答疑文章 (1讲)
52 | 答疑:在问题中解决问题,在思考中产生思考
特别放送 (1讲)
特别放送 | 2019 年,容器技术生态会发生些什么?
结束语 (1讲)
结束语 | Kubernetes:赢开发者赢天下
特别放送 | 云原生应用管理系列 (1讲)
基于 Kubernetes 的云原生应用管理,到底应该怎么做?
深入剖析Kubernetes
登录|注册

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

张磊 2018-09-26
你好,我是张磊。今天我和你分享的主题是:深入解析 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(60)

  • huan
    不实践,就无法理解为什么pod这么设计,这里给了我自己的实践的记录:

    https://github.com/huan9huan/k8s-practice/tree/master/15-pod-advanced

    仅供参考。
    2018-09-26
    1
    28
  • Geek_zz
    信息量大,要多看两遍
    2018-09-26
    12
  • 我来也
    在使用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
    5
    10
  • snakorse
    probe的原理是通过sidecar容器来实现的吗

    作者回复: 不是的,exec

    2018-09-26
    7
  • Dale
    Kubernetes 的 livenessProbe 和 readinessProbe 两个在项目中都用到了,最基本的是定时检测服务端口是否在,毕竟好的是请求服务,例如针对http服务,发起一个请求,查看服务是否正常,因为有时候端口在,服务不一定正常。
    2018-09-26
    5
  • Vincent
    按照老师的操作执行这个命令报错了
    [root@node1 k8s]# kubectl create -f preset.yaml
    error: unable to recognize "preset.yaml": no matches for kind "PodPreset" in version "settings.k8s.io/v1alpha1"


    求解
    2018-10-16
    3
    4
  • huan
    目前项目使用了forever之类的wrapper进程来管理工作进程,forever是根据工作进程的状态做重启操作(也可以使用forever的api接口做health检查)。另外,日志都是使用append的形式,而不是覆盖,这样可以不用掩盖错误的发生。
    2018-09-26
    4
  • QQ怪
    我公司也在用livenessprobe和readinessprobe,第一个是就绪探针在确定容器是否已经就绪可以接受流量,而第二个是存活容器来确定容器是否假死,如果遇到假死则开始重启p
    2019-04-22
    1
    3
  • 北卡
    我记得deployment所创建的pod restart策略只支持aways。是我使用的版本太低了吗?

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

    2018-09-27
    1
    3
  • 我来也
    文章中的代码 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
    3
  • fhchina
    是projected volume 1.11以后,不是persistent volume
    2018-09-26
    3
  • 假装乐
    讲的详细量又大哈
    2018-09-26
    3
  • Destiny
    和openshift哪个较好
    2019-04-29
    2
  • 驕莎
    使用yaml文件创建secret对象部分的验证阶段有问题:
    $ kubectl exec -it test-projected-volume -- /bin/sh
    $ ls /projected-volume/
    user
    pass
    $ cat /projected-volume/user
    root
    $ cat /projected-volume/pass
    1f2d1e2e67df

    上面/projected-volume/user里面的内容应该是admin,而非root

    另外一个问题,之前课程建议使用kubectl apply的方式创建和更新对象,为什么这篇里面还是全用kubectl create的方式呢?
    2019-04-23
    2
  • 蜗牛
    复习了下容器的检查探针, 有几个点还是没太明白, 还望老师能解答下:
    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
  • lingtony
    老师好,probe我们在生产实际应用中,有个问题。就是,每次新部署的时候,旧容器要做graceful delete,这个会触发kubelet的delete逻辑。 只有在容器被kill以后,k8s才会remove 这个探针。即,容器已经收到kill信号在停服务了,但是探针还在检测于是一直报错。 不知道有没有配置可解决这个问题。

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

    2018-10-19
    2
  • 龙坤
    老师你好,有句话不太明白
    原文:“相信你一定有过这样的想法:我现在有了一个 Pod,我能不能在这个 Pod 里安装一个 Kubernetes 的Client,这样就可以从容器里直接访问并且操作这个 Kubernetes 的 API 了呢?”

    1. 这里可以举个简单例子吗?
    2.“kubernetes的client”指的是什么?
    3. 操作“kubernetes的API”这里的API由指什么?

    小白问题,过不了这关,听得有点晕。见谅

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

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

    作者回复: 对

    2018-09-26
    2
  • Tim Zhang
    pv是1.11以后?

    作者回复: 再仔细看看……

    2018-09-26
    2
  • Geek_6bab38
    我创建了 podPreset 包含 redis 6379等 关联了role frontend
    但是 我创建了Pod website
    用kubectl get pod website -o yaml 查看,没有看到有文章中的
          env:
            - name: DB_PORT
              value: "6379"
    信息,是我哪里操作不对?还是哪里有问题呢?期待老师的回复,感谢
    2018-11-22
    1
收起评论
60
返回
顶部