深入剖析Kubernetes
张磊
Kubernetes社区资深成员与项目维护者
立即订阅
22653 人已学习
课程目录
已完结 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
登录|注册

27 | 聪明的微创新:Operator工作原理解读

张磊 2018-10-24
你好,我是张磊。今天我和你分享的主题是:聪明的微创新之 Operator 工作原理解读。
在前面的几篇文章中,我已经和你分享了 Kubernetes 项目中的大部分编排对象(比如 Deployment、StatefulSet、DaemonSet,以及 Job),也介绍了“有状态应用”的管理方法,还阐述了为 Kubernetes 添加自定义 API 对象和编写自定义控制器的原理和流程。
可能你已经感觉到,在 Kubernetes 中,管理“有状态应用”是一个比较复杂的过程,尤其是编写 Pod 模板的时候,总有一种“在 YAML 文件里编程序”的感觉,让人很不舒服。
而在 Kubernetes 生态中,还有一个相对更加灵活和编程友好的管理“有状态应用”的解决方案,它就是:Operator。
接下来,我就以 Etcd Operator 为例,来为你讲解一下 Operator 的工作原理和编写方法。
Etcd Operator 的使用方法非常简单,只需要两步即可完成:
第一步,将这个 Operator 的代码 Clone 到本地:
$ git clone https://github.com/coreos/etcd-operator
第二步,将这个 Etcd Operator 部署在 Kubernetes 集群里。
不过,在部署 Etcd Operator 的 Pod 之前,你需要先执行这样一个脚本:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入剖析Kubernetes》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(28)

  • 小熹
    CRD在ETCD里面是以JSON格式来存储的,而K8S的API对象是以protobuf格式存储,在资源对象数量多的时候JSON的序列化和反序列化性能会成为瓶颈。
    2018-11-18
    1
    17
  • 程序修行
    已经到了看不懂的时候了~。丧心
    2018-12-20
    1
    7
  • ethfoo
    etcd operator现在使用empty dir存储etcd数据,万一真的出现大部分节点挂掉,但是数据备份又不是实时的,会存在部分数据丢失的情况吧?那为什么etcd operator不使用pv呢?

    作者回复: 要是大部分数据丢失备份又不实时的时候,用pv把数据找回来就能完美work,那还要raft干啥。

    2018-10-24
    2
    7
  • Vincen
    是否可以将operator和自定义控制器划等号

    作者回复: 原理上是一个东西

    2018-10-24
    4
  • 小小笑儿
    感觉operator就是一个自定义的controller,需要有一定的开发能力来实现。
    2018-10-24
    4
  • johnson.skiii
    张大,请教个问题。

    如果ETCD每个pod不绑定pv的话,那么当其中一个挂掉的话,etcd operator会再启动一个pod,但是启动到那一台worker未知;那么,由于raft机制,leader会同步数据给这个新的pod,这个过程可能会很耗时;

    与其这样,能否限定运行etcd的pod使用特定的pv,这样当出现pod挂掉的情况,leader同步数据也会更快。

    作者回复: 恢复数据这个操作还是要的

    2018-12-09
    3
  • 虎虎❤️
    不错,可以试着添加 workqueue 来练练手。可以多布置些作业,有的时候还真是不擅长给自己找活干。。
    2018-10-24
    2
  • IOVE.-Minn
    能解答下思考题么?
    2019-01-16
    1
  • hochuenw
    老师请问怎么看metacontroller这个项目

    作者回复: 概念很好的,适合云上的用户玩,但是不适合自己定制开发

    2018-10-27
    1
  • DJH
    请教老师,EtcdBackup和EtcdRestore资源创建(并运行)后会自动删除吗?是否需要手工删除?

    作者回复: 需要自己清理

    2018-10-24
    1
  • Vincen
    厉害了,全是干货!
    2018-10-24
    1
  • Geek_54edc1
    应该是client端与apiserver交互存在性能瓶颈
    2019-11-09
  • 阿硕
    Prometheus 项目的 Operator已经在使用了,但想要修改crd的配置,是否要从go源码提交修改呢?
    2019-11-03
  • Simon Wu
    Etcd operator已经支持pvc了,依靠备份机制还是有一段时间的数据丢失,就看你的业务允不允许。
    2019-10-22
  • saup007
    operator 不能直接维护存储状态吗?(pod 绑定 pv),必须要借助StatefulSet吗
    2019-08-14
  • po
    请教一个问题,etcd operator 使用empty dir存储etcd数据,那么在集群突然断电或者关机的情况下,再启动集群,那么所有etcd的pod数据都是为空,那raft算法在这个时候也没法工作了吧?这个问题要怎么解决呢?我看现在openshift集群的etcd就是用operator部署的,请老师解答下,谢谢。
    2019-05-13
  • qingbo
    我看到这种非StatefulSet的pod有DNS记录的时候好奇了一下,发现是指定了subdomain和service名字一样才可以。不知道是后来加进k8s的还是一开始就有,以前觉得除了StatefulSet的pod都没有DNS的……

    作者回复: 需要service

    2019-04-18
  • lpf32
    API Object的event是无状态的,会被广播到每个operator,所以多个operator并没有提高太多性能,所以一般只会有一个operator,这就是性能瓶颈的原因吧。不适合CRD可能是那些更新比较的快的场景吧。望老师指教。
    2019-01-22
  • Davy Jones
    问下,日志在哪里啊,如果,集群出了问题,从哪里排查呢,kubectl apply -f example/example-etcd-cluster.yaml之后,6443就死掉了,systemctl status kubelet.service -l提示
    kubelet[1604]: E0121 17:14:46.952765 1604 kubelet.go:2236] node "master" not found
    2019-01-21
  • 蝴蝶效应
    请教一下老师,如果一个被部署了多个实例,那它们之间的本地缓存是怎么保持同步的呢?比如说,我修改了一个 etcd cluster 的属性,那么在有多个 operator 实例存在的情况下哪一个实例会处理这个变化呢?
    2019-01-20
收起评论
28
返回
顶部