这门课解决什么问题:把集群从“能跑”推向“可观测与自动化”

很多运维和后端开发在刚接触 Kubernetes 时,往往停留在用命令行把业务容器跑起来的阶段。一旦遇到多环境配置混乱、集群内部故障难排查、或者需要封装复杂中间件的部署逻辑时,就会感到吃力。这门课正是针对这类进阶痛点,解决的是从“基础部署”到“生产级可维护”的跨越。它不纠结于基础概念的科普,而是直接切入工作场景,用 Kustomize 处理多套环境的配置差异,用 Operator 将运维经验固化为自动化代码,并引入 Prometheus 和日志收集体系,让集群内部的状态和异常变得完全可见。如果你的业务已经上云,但排障还在靠肉眼盯终端,这门课能帮你补齐生产环境必备的工程化能力。

适合什么基础与建议学习路线

作为系列的第三篇,这门课默认你已经掌握基本的 Pod、Deployment 概念,并且能熟练使用 kubectl 操作集群。如果你完全没有接触过容器编排,建议先去补足前置基础,否则在二进制安装和 Operator 开发环节会非常吃力。对于符合基础要求的读者,建议先从 Kustomize 章节看起。这部分虽然看似简单,但它是后续管理多环境配置的基石,重点理解 overlay 覆盖机制和 patch 补丁的编写逻辑。熟悉配置管理后,再进入核心的 Operator 篇章,最后去啃 Prometheus 监控与日志收集。二进制安装单机集群的内容属于选学,主要帮你理解底层组件运作,时间紧的读者可以先跳过,直接进入应用层面的学习。

学完能独立做什么与资料配合练习建议

学完整套内容后,你能在实际工作中独立完成几项关键任务:一是为团队编写多环境(开发、测试、生产)的标准化配置文件,不再依赖全量复制 YAML;二是能够针对内部特定的复杂中间件,编写基础的 Operator 实现自动化运维与故障自愈;三是搭建一套完整的集群监控与告警大盘,并配置统一的日志收集链路。在资料使用方面,切忌只看视频不敲代码。Kustomize 章节的资料包包含了大量现成的 patch 示例,建议你对照着在自己的测试集群里跑一遍,尝试修改生成器配置。学习 Operator 时,不要直接复制资料里的现成代码,先自己理清业务逻辑并手写一遍基础框架,再与资料中的标准实现进行对比查漏。监控与日志部分则需要你手动把采集组件部署起来,观察真实的指标面板和日志滚动,这样才能把操作手感转化为自己的实战经验。


本课程是系列课程。之前更新过1(基于rancher) 2(基于kubeadm) .第三篇是进阶篇,把之前未讲到的知识点进行细化和进阶讲解、主要是应用,永远不会更

课程目录

*   第1章:kustomize快速上手使用 cplist.push('第1章:kustomize快速上手使用');/

  *   第1讲:课程内容、kustomize理解

  *   第2讲:kustomize抽取公共部分示列

  *   第3讲:使用overlay创建多“环境”配置

  *   第4讲:使用patch(补丁):配置修改

  *   第5讲:使用patch(补丁):修改配置(上节课作业)

  *   第6讲:使用生成器:configmap生成

  *   第7讲:使用vars设置环境变量(env)

*   第2章:二进制安装k8s1.20单集群版(选学) cplist.push('第2章:二进制安装k8s1.20单集群版(选学)');/

  *   第8讲:基本架构和环境、主机的设置

  *   第9讲:关于k8s的证书、配置和启动etcd

  *   第10讲:部署k8s-apiserver

  *   第11讲:配置kubectl、访问apiserver

  *   第12讲:部署controller-manager

  *   第13讲:部署kube-scheduler

  *   第14讲:部署kubelet

  *   第15讲:部署kube-proxy

  *   第16讲:部署网络组件flanneld

  *   第17讲:部署CoreDNS、测试服务

  *   第18讲:添加子节点到集群(1):kubelet

  *   第19讲:添加子节点到集群(2):kubeproxy

*   第2.5章:Kubeadm高可用部署篇(选学) cplist.push('第2.5章:Kubeadm高可用部署篇(选学)');/

  *   第20讲:k8s高可用集群开张篇

  *   第21讲:kubeadm高可用环境准备

  *   第22讲:kubeadm高可用集群部署(上)

  *   第23讲:kubeadm高可用集群部署(下)

*   第三章:准入控制器之WebHook实战 cplist.push('第三章:准入控制器之WebHook实战');/

  *   第24讲:Admission Controller入门

  *   第25讲:编写最简单的WebHook、本地测试

  *   第26讲:部署webhook到k8s中、例子:禁止特殊pod名称

  *   第27讲:实例:提交POD时修改镜像源

  *   第28讲:实例:指定命名空间修改POD镜像源

  *   第29讲:实例:创建POD时自动注入容器

*   第四章:k8s网络基础恶补篇 cplist.push('第四章:k8s网络基础恶补篇');/

  *   第30讲:K8s网络原理开张课

  *   第31讲:单Node多pod k8s网络通信

  *   第32讲:多节点网络通信原理(flannel-vxlan)

  *   第33讲:多节点网络原理(flannel-host-gw)

*   第五章:Operator和kubeBuilder入门 cplist.push('第五章:Operator和kubeBuilder入门');/

  *   第34讲:Operator入门、基本环境讲解

  *   第35讲:创建第一个项目、创建CRD

  *   第36讲:最简单的控制器代码、运行控制器

  *   第37讲:初步发布到k8s中

  *   第38讲:自定义资源字段验证的基本方法

  *   第39讲:[不用学,看看即可]创建webhook进行深入验证(选学,后面要重录)

  *   第40讲:实例(1):提交资源和创建POD

  *   第41讲:实例(2):资源删除判断(上)

  *   第42讲:实例(2):资源删除判断(下)--支持多副本

  *   第43讲:实例(3)副本收缩处理

  *   第44讲:监听CR创建出来的POD

  *   第45讲:自动重建手工删除的POD

  *   第46讲:实例(6):添加事件支持(events)

  *   第47讲:实例(7):支持资源的状态展现

  *   第48讲:初步完成集成测试(选学)

*   第六章:k8s和prometheus实战速学 cplist.push('第六章:k8s和prometheus实战速学');/

  *   第49讲:prometheus最简部署、kube-state-metrics部署

  *   第50讲:prometheus拉取kube-state-metrics、node_exporter部署

  *   第51讲:prometheus服务自动发现(1):快速入门

  *   第52讲:prometheus服务自动发现(2):修改标签

  *   第53讲:prometheus服务自动发现(3):POD监控的快速配置(kubelet)

  *   第54讲:Prometheus Adapter快速和安装

  *   第55讲:Prometheus基本查询(1):基本概念、即时向量查询

  *   第56讲:Prometheus基本查询(2):使用gin实现自定义指标(初步)

  *   第57讲:Prometheus基本查询(3):区间查询、聚合操作符

  *   第58讲:自动发现我们的业务Service并进行抓取

  *   第59讲:Prometheus Adapter(2):创建自定义指标

  *   第60讲:使用HPA进行业务POD的扩容(简易操作)

  *   第61讲:AlertManager快速入门、安装

  *   第62讲:AlertManager快速入门(2):告警规则配置

  *   第63讲:AlertManager快速入门(3):微信告警快速配置

  *   第64讲:AlertManager快速入门(4): 告警模板快速使用

  *   第65讲:AlertManager快速入门(4): 告警模板恢复发送

  *   第66讲:AlertManager快速入门(5):告警分组发送给webhook和微信

  *   第67讲:AlertManager快速入门(6): 告警抑制的基本配置和使用场景

  *   第68讲:AlertManager快速入门(7): 静默配置(silence)

*   第七章:k8s日志收集入门之fluent-bit cplist.push('第七章:k8s日志收集入门之fluent-bit');/

  *   第69讲:开张课、 部署fluent-bit、第一个配置

  *   第70讲:Output:把日志输出到ElasticSearch里(初步)

  *   第71讲:收集指定POD日志的基本方法

  *   第72讲:解析器(parser)的了解、gin日志输出(logrus)

  *   第73讲:抓取所有pod日志、filter 入门、增加记录字段(节点名称)

  *   第74讲:filter(2) :使用kubenetes过滤器一把梭显示元信息

*   第八章:自定义POD调度入门(scheduling-framework) cplist.push('第八章:自定义POD调度入门(scheduling-framework)');/

  *   第75讲:基本概念:调度框架、扩展点、基本代码

  *   第76讲:基本编译和部署、效果展示

  *   第77讲:prefilter小示例:控制POD最大调度数量

  *   第78讲:设置调度插件参数的基本方法

  *   第79讲:示例:使用Filter过滤不可调度的节点

  *   第80讲:示例:Score打分的最简单写法、归一化处理

  *   第81讲:preScore插件干涉调度打分示例

  *   第82讲:Reserve阶段和Permit阶段:示例判断前置POD

  *   第83讲:PreBind阶段和Bind、PostBind阶段说明

*   第九章:k8s+harbor的极简入门 cplist.push('第九章:k8s+harbor的极简入门');/

  *   第84讲:基本概念、快速无脑安装harbor

  *   第85讲:创建用户、向harbor发布第一个镜像

  *   第86讲:k8s上使用harbor私有镜像(nodeport)

  *   第87讲:golang上调用harbor API的姿势

*   第十章:泛型改造k8s开发代码篇 cplist.push('第十章:泛型改造k8s开发代码篇');/

  *   第88讲:使用泛型编写通用获取k8s资源的函数

  *   第89讲:使用泛型编写通用排序k8s资源的函数

  *   第90讲:泛型通用排序k8s资源(2) 传递自定义排序业务

  *   第91讲:泛型通用遍历k8s资源

  *   第92讲:曾经”恶心”的切片类型转换用泛型解决

  *   第93讲:相对通用的泛型Informer EventHandler

*   第十一章:(补充)k8s leader选主代码实战入门 cplist.push('第十一章:(补充)k8s leader选主代码实战入门');/

  *   第94讲:选主基本概念、快速无脑启动代码

  *   第95讲:结合SharedInformer进行应用程序选主

*   第十二章:FakeClient的妙用 cplist.push('第十二章:FakeClient的妙用');/

  *   第96讲:最基本的fake client创建和代码技巧

  *   第97讲:Fake client给POD添加/修改注解

*   第十三章:k8s开发中分级日志库的使用 cplist.push('第十三章:k8s开发中分级日志库的使用');/

  *   第98讲:运维开发中的分级日志:库的使用

  *   第99讲:实例训练:一个完整的分级日志函数编写