暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
21丨容器化守护进程的意义:DaemonSet.pdf
168
20页
0次
2023-06-26
10墨值下载
21 | 容器化守护进程的意义:DaemonSet
2018-10-10 张磊
深入剖析Kubernetes
进入课程
讲述:张磊
时长 17:27 大小 8.00M
你好,我是张磊。今天我和你分享的主题是:容器化守护进程的意义之 DaemonSet。
在上一篇文章中,我和你详细分享了使用 StatefulSet 编排“有状态应用”的过程。从中不
难看出,StatefulSet 其实就是对现有典型运维业务的容器化抽象。也就是说,你一定有方
法在不使用 Kubernetes、甚至不使用容器的情况下,自己 DIY 一个类似的方案出来。但
是,一旦涉及到升级、版本管理等更工程化的能力,Kubernetes 的好处,才会更加凸现。
比如,如何对 StatefulSet 进行“滚动更新”(rolling update)?
很简单。你只要修改 StatefulSet 的 Pod 模板,就会自动触发“滚动更新”:
复制代码
下载APP
在这里,我使用了 kubectl patch 命令。它的意思是,以“补丁”的方式(JSON 格式的)
修改一个 API 对象的指定字段,也就是我在后面指定
的“spec/template/spec/containers/0/image”。
这样,StatefulSet Controller 就会按照与 Pod 编号相反的顺序,从最后一个 Pod 开始,
逐一更新这个 StatefulSet 管理的每个 Pod。而如果更新发生了错误,这次“滚动更新”就
会停止。此外,StatefulSet 的“滚动更新”还允许我们进行更精细的控制,比如金丝雀发
布(Canary Deploy)或者灰度发布,这意味着应用的多个实例中被指定的一部分不会被更
新到最新的版本。
这个字段,正是 StatefulSet 的 spec.updateStrategy.rollingUpdate 的 partition 字段。
比如,现在我将前面这个 StatefulSet 的 partition 字段设置为 2:
其中,kubectl patch 命令后面的参数(JSON 格式的),就是 partition 字段在 API 对象
里的路径。所以,上述操作等同于直接使用 kubectl edit 命令,打开这个对象,把
partition 字段修改为 2。
这样,我就指定了当 Pod 模板发生变化的时候,比如 MySQL 镜像更新到 5.7.23,那么只
有序号大于或者等于 2 的 Pod 会被更新到这个版本。并且,如果你删除或者重启了序号小
于 2 的 Pod,等它再次启动后,也会保持原先的 5.7.2 版本,绝不会被升级到 5.7.23 版
本。
StatefulSet 可以说是 Kubernetes 项目中最为复杂的编排对象,希望你课后能认真消化,
动手实践一下这个例子。
1
2
$ kubectl patch statefulset mysql --type='json' -p='[{"op": "replace", "path": "/spec/te
statefulset.apps/mysql patched
1
2
$ kubectl patch statefulset mysql -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"
statefulset.apps/mysql patched
复制代码
of 20
10墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文档被以下合辑收录

深入剖析Kubernetes(共51篇)
课程介绍 过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和 K8S 项目作为技术重心,试图“放长线钓大鱼”。 但容器技术本身偏向运维,namespace 资源隔离、cgroups 资源限制等概念,对开发者来说,理解起来比较困难。尤其在实施 K8S 落地时,总有一些问题被反复提及,比如: 为什么容器里只能跑“一个进程”? 之前一直用的某个 JVM 参数,在容器里怎么不好使了? 为什么 Kubernetes 不能固定 IP 地址?容器网络连不通,该如何 Debug? K8S 中 StatefulSet 和 Operator 到底什么区别?PV 和 PVC 又该怎么用? 这些问题的答案和原理并不复杂,但很难一两句话解释清楚。因为容器技术涉及操作系统、网络、存储、调度、分布式原理等方方面面的知识,是个名副其实的全栈技术。 而其技术体系里那些“牵一发而动全身”的主线,比如 Linux 进程模型对容器本身的重要意义,“控制器”模式对整个 K8S 项目提纲挈领的作用等等,不会详细展现在 Docker 或 Kubernetes 官方文档中,但它们才是掌握容器技术体系的精髓所在,这也是张磊的《深入剖析 Kubernetes》专栏的核心内容。 张磊花费数月时间,经过多次改版,构建出如今的知识框架,适合所有初学者和进阶容器技术的伙伴,帮你逐层理清容器背后的技术本质与设计思想,并结合对其核心特性的剖析与实践,加深你对容器技术的理解。 本专栏共包括如下四大模块: 1. “白话”容器技术基础:用饶有趣味的解说,梳理容器技术生态的发展脉络,讲述容器技术的来龙去脉与实现原理,让你知其然,并且知其所以然。 2. Kubernetes 集群的搭建与实践:以浅显易懂的语言,讲述 Kubernetes 集群背后的原理,并从 0 开始搭建一套 Kubernetes 集群,带你领略 Kubernetes 集群的“一键安装”。 3. 容器编排与 Kubernetes 核心特性剖析:这个模块从分布式系统设计的视角出发,归纳出这些特性中体现出来的普遍方法,然后再逐一阐述 Kubernetes 项目关于编排、调度和作业管理的各项核心特性。 4. Kubernetes 开源社区与生态:磊哥会带你思考如何同团队一起平衡内外部需求,逐渐成为社区中不可或缺的一员。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜