深入剖析Kubernetes / Kubernetes原来可以如此简单
张磊
Kubernetes社区资深成员与项目维护者
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 打通“容器技术”的任督二脉

    我希望通过对容器与Kubernetes项目的逐层剖析,能够让你面对容器化浪潮时不再踌躇无措,有一种拨云见日的酣畅淋漓。

  • 01 | 预习篇 · 小鲸鱼大事记(一):初出茅庐

    Docker项目,用一个近乎完美的方案解决了Pass项目令人头疼的打包问题。于是,它开源不久,便从PaaS领域中脱颖而出,迅速占领了所有云计算领域头条。

  • 02 | 预习篇 · 小鲸鱼大事记(二):崭露头角

    解决了应用打包的技术难题,同开发者与生俱来的的亲密关系,再加上PaaS概念已经深入人心的完美契机,是Docker项目一举走红的重要原因。

  • 03 | 预习篇 · 小鲸鱼大事记(三):群雄并起

    在2014~2015年间的容器生态大爆发中,Docker公司和Mesosphere公司,依托自身优势率先占据了有利位置,但这却并不是结局。

  • 04 | 预习篇 · 小鲸鱼大事记(四):尘埃落定

    Kubernetes社区的成功归功于,它以一种更加温和的方式,承接了Docker项目的未尽事业,即:以开发者为核心,构建一个相对民主和开放的容器生态。

  • 05 | 白话容器基础(一):从进程说开去

    对于Docker等大多数Linux容器来说,Cgroups技术是用来制造约束的主要手段,而Namespace技术则是用来修改进程视图的主要方法。

  • 06 | 白话容器基础(二):隔离与限制

    一个正在运行的Docker容器,其实就是一个启用了多个Linux Namespace的应用进程,而这个进程能够使用的资源量,则受Cgroups配置的限制。

  • 07 | 白话容器基础(三):深入理解容器镜像

    rootfs,是Linux容器文件系统实现的核心方式。它包含了一个操作系统的所有文件和目录,保证了Docker容器深入到操作系统级别的环境一致性。

  • 08 | 白话容器基础(四):重新认识Docker容器

    我以一个经典的Python应用为例,讲解了Docke容器使用的主要场景。然后,我再次解读了Linux容器的Namespace、Cgroups、rootfs。

  • 09 | 从容器到容器云:谈谈Kubernetes的本质

    Kubernetes为用户提供的不仅仅是一个工具,而是一套帮助使用容器构建分布式作业的依赖和框架。

  • 10 | Kubernetes一键部署利器:kubeadm

    在今天的这次分享中,我重点介绍了kubeadm这个部署工具的工作原理和使用方法。

  • 11 | 从0到1:搭建一个完整的Kubernetes集群

    今天,我们完全从0开始,在Bare-metal环境下使用kubeadm工具部署了一个完整的Kubernetes集群。专栏后续的讲解,也都会以这个集群为依赖。

  • 12 | 牛刀小试:我的第一个容器化应用

    从docker run这样的命令行操作,向kubectl apply YAML文件这样的声明式API的转变,是每一个容器技术学习者必须要跨过的第一道门槛。

  • 13 | 为什么我们需要Pod?

    Pod,实际上是在扮演传统基础设施里“虚拟机”的角色;而容器,则是这个虚拟机里运行的用户程序。

  • 14 | 深入解析Pod对象(一):基本概念

    Pod(而不是容器)才是Kubernetes项目中的最小编排单位。将这个设计落实到API对象上,容器(Container)就成了Pod属性里的一个普通的字段。

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

    在今天这篇文章中,我和你详细介绍了Pod对象更高阶的使用方法,希望通过对这些实例的讲解,你可以更深入地理解Pod API对象的各个字段。

  • 16 | 编排其实很简单:谈谈“控制器”模型

    今天,我以Deployment为例,详细讲解了Kubernetes项目如何通过一个称作“控制器模式”的设计方法,实现了对各种不同的对象或者资源的编排。

  • 17 | 经典PaaS的记忆:作业副本与水平扩展

    Deployment实际上是一个两层控制器,首先通过ReplicaSet的个数来描述应用的版本,然后再通过ReplicaSet的属性,来保证Pod的副本数量。

  • 18 | 深入理解StatefulSet(一):拓扑状态

    StatefulSet这个控制器的主要作用之一,就在是使用Pod模板创建Pod时,对它们进行编号,并且按照编号顺序逐一完成创建工作。

  • 19 | 深入理解StatefulSet(二):存储状态

    在今天这篇文章中,我为你详细介绍了StatefulSet处理存储状态的方法。然后,以此为基础,我为你简单总结了StatefulSet控制器的工作原理。

  • 20 | 深入理解StatefulSet(三):有状态应用实践

    在今天这篇文章中,我以MySQL集群为例,和你详细分享了一个实际的StatefulSet的编写过程。这个例子比较复杂,也可以说是本专栏里比较难掌握的一个案例。

  • 21 | 容器化守护进程的意义:DaemonSet

    在今天这篇文章中,我首先简单介绍了StatefulSet的滚动更新能力,然后重点讲解了本专栏的第三个重要编排对象:DaemonSet。

  • 22 | 撬动离线业务:Job与CronJob

    在今天这篇文章中,我将和你分享Job的编排方法、completions和parallelism字段的含义,以及Job Controller的执行原理。

  • 23 | 声明式API与Kubernetes编程范式

    从“使用Kubernetes部署应用”,到“使用Kubernetes编写应用”的蜕变过程,正是你从一个Kubernetes用户到玩家的晋级之路。

  • 24 | 深入解析声明式API(一):API对象的奥秘

    今天,我将分享Kubernetes声明式API的工作原理,以及如何遵循声明式API的设计,为Kubernetes添加一个名叫Network的API资源类型。

  • 25 | 深入解析声明式API(二):编写自定义控制器

    今天,我将为你剖析Kubernetes API编程范式的具体原理,并带你一起编写了一个自定义控制器。

  • 26 | 基于角色的权限控制:RBAC

    Role + RoleBinding + ServiceAccount的权限分配方式,是你要重点掌握的内容。

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

    Operator的工作原理,是利用自定义API资源,描述你要部署的“有状态应用”;然后在自定义控制器里,根据自定义API对象的变化,完成具体的部署和运维工作。

  • 28 | PV、PVC、StorageClass,这些到底在说啥?

    PVC描述的,是Pod想要使用的持久化存储的属性;PV描述的,则是一个具体的Volume的属性;而StorageClass描述的,则是PV和PVC的绑定关系。

  • 29 | PV、PVC体系是不是多此一举?从本地持久化卷谈起

    正是通过PV和PVC,以及StorageClass这套存储体系,这个后来新添加的持久化存储方案,对Kubernetes已有用户的“破坏”,几乎可以忽略不计。

  • 30 | 编写自己的存储插件:FlexVolume与CSI

    相比于FlexVolume,CSI的设计思想,把插件的职责从“两阶段处理”,扩展成了Provision、Attach和Mount三个阶段。

  • 31 | 容器存储实践:CSI插件编写指南

    在今天这篇文章中,我以一个DigitalOcean的CSI插件为例,和你分享了编写CSI插件的具体流程。

  • 32 | 浅谈容器网络

    容器要想跟外界通信,它发出的IP包就必须从Network Namespace里出来,来到宿主机上。而解决方法就是:为容器创建一个Veth Pair设备。

  • 33 | 深入解析容器跨主机网络

    在本篇文章中,我为你详细讲解了Flannel UDP和VXLAN模式的工作原理。这两种模式其实都可以称作“隧道”机制,也是很多其他容器网络插件的基础。

  • 34 | Kubernetes网络模型与CNI网络插件

    Kubernetes网络模型,用一个字概括就是“通”。容器与容器之间要“通”,容器与宿主机之间也要“通”,并且这个“通”还必须直接基于容器和宿主机的IP地址。

  • 35 | 解读Kubernetes三层网络方案

    在公有云上,我一般会推荐Flannel host-gw模式。但在私有部署环境里,Calico项目才能够覆盖更多的场景,并为你提供更加可靠的组网方案和架构思路。

  • 36 | 为什么说Kubernetes只有soft multi-tenancy?

    NetworkPolicy实际上只是宿主机上的一系列iptables规则。这跟传统IaaS里面的安全组(Security Group),其实是类似的原理。

  • 37 | 找到容器不容易:Service、DNS与服务发现

    实际上,Service机制,以及Kubernetes里的DNS插件,都是在帮助你解决同样一个问题,即:如何找到我的某一个容器?

  • 38 | 从外界连通Service与Service调试“三板斧”

    我分享了从外部访问Service的几种方式和具体的工作原理,以及当Service出现故障时,如何根据它的工作原理,按照一定的思路去定位问题的可行之道。

  • 39 | 谈谈Service与Ingress

    在实际的生产环境中,Ingress带来的灵活度和自由度,对于使用容器的用户来说,其实是非常有意义的。

  • 40 | Kubernetes的资源模型与资源管理

    我先为你讲解了Kubernetes对资源的定义方式和资源模型的设计,然后讲述了Kubernetes对Pod进行Eviction的具体策略和实践方式。

  • 41 | 十字路口上的Kubernetes默认调度器

    我和你详细分享了Kubernetes里默认调度器的设计与实现,并分析了默认调度器现在正在经历的重构、发展路线,以及未来的走向。

  • 42 | Kubernetes默认调度器调度策略解析

    在本篇文章中,我为你讲述了 Kubernetes 默认调度器里的主要调度算法。

  • 43 | Kubernetes默认调度器的优先级与抢占机制

    在本篇文章中,我为你详细讲述了 Kubernetes 里关于 Pod 的优先级和抢占机制的设计与实现。

  • 44 | Kubernetes GPU管理与Device Plugin机制

    在本篇文章中,我为你详细讲述了 Kubernetes 对 GPU 的管理方式,以及它所需要使用的 Device Plugin 机制。

  • 45 | 幕后英雄:SIG-Node与CRI

    在本篇文章中,我首先为你介绍了 SIG-Node 的职责,以及 kubelet 这个组件的工作原理。

  • 46 | 解读 CRI 与 容器运行时

    在本篇文章中,我为你详细解读了 CRI 的设计和具体工作原理,并为你梳理了实现CRI 接口的核心流程。

  • 47 | 绝不仅仅是安全:Kata Containers 与 gVisor

    在本篇文章中,我为你详细地介绍了拥有独立内核的安全容器项目,对比了 KataContainers 和 gVisor 的设计与实现细节。

  • 48 | Prometheus、Metrics Server与Kubernetes监控体系

    我为你介绍了 Kubernetes 当前监控体系的设计,讲解了 Prometheus 在其中的地位,以及以这个项目为核心的监控系统的架构设计。

  • 49 | Custom Metrics: 让Auto Scaling不再“食之无味”

    在本篇文章中,我为你详细讲解了 Kubernetes 里对自定义监控指标,即 Custom Metrics 的设计与实现机制。

  • 50 | 让日志无处可逃:容器日志收集与管理

    我比较建议你将应用日志输出到 stdout 和 stderr,然后通过在宿主机上部署 logging-agent 的方式来集中处理日志。

  • 51 | 谈谈Kubernetes开源社区和未来走向

    我为你详细讲述了 CNCF 和 Kubernetes 社区的关系,以及 Kubernetes 社区的运作方式。

  • 52 | 答疑:在问题中解决问题,在思考中产生思考

    在本篇文章中,我将会对本专栏部分文章最后的思考题,进行一次集中地汇总和答疑。希望能够帮助你更好地理解和掌握 Kubernetes 项目。

  • 结束语 | Kubernetes:赢开发者赢天下

    “深入剖析Kubernetes专栏”的结束,其实是你技术生涯全新的开始。我相信你一定能够带着这个赢开发者赢天下的启发,在云计算的海洋里继续乘风破浪,一往无前!

  • 特别放送 | 2019 年,容器技术生态会发生些什么?

    今天我想再和你做一次分享,一起聊聊在2019年,容器技术生态会发生些什么。

毫无疑问,Kubernetes已经成为容器领域当之无愧的事实标准。除了Google、Microsoft等技术巨擘们在容器领域里多年的博弈外,国内的BAT、滴滴、蚂蚁、今日头条等技术大厂,也都已将容器和Kubernetes列入未来的战略重心,无数中小型企业也正走在容器化的道路上。

从长远角度来看,Kubernetes项目将会成为企业服务器端技术栈中标准的一环,并连同它所推崇的容器化理念,成为广大后端技术人员和开发者的一门必修课。

但是,想要啃下Kubernetes这个“硬骨头”并不那么容易,初学者、从业者往往都会遇到诸多难题,比如:

  1. Kubernetes太复杂,概念太多,根本掌握不透;

  2. 文档都读了,培训也参加了,却还是摸不清Kubernetes的套路;

  3. Kubernetes项目更新频率简直飞起,完全跟不上社区的节奏;

  4. Kubernetes代码如此之多,开源项目定制开发真是让人头大。

为什么?因为Kubernetes并不是一个我们过去认知中的、“典型”的容器开源项目,除了研读大量的文档和代码外,更重要的是要深度理解Kubernetes的设计思想和初衷。

“万变不离其宗”。本专栏将摆脱技术文档沉闷的叙述风格,从开发者和使用者的真实逻辑出发,逐层剖析Kubernetes项目的核心特性,在生动有趣的讲述中,逐步揭示其蕴含的设计原则和试图表达的容器编排理念。

作者简介

张磊,《Docker容器与容器云》作者,Kubernetes社区资深成员与项目维护者,Kubernetes容器运行时和集群调度等多个核心特性的作者之一。

张磊曾先后任职于浙江大学计算机与软件研究所,Hyper/Kata虚拟化容器团队,微软研究院(Microsoft Research),长期专注并活跃于容器集群管理与云计算数据中心领域,连续三次被微软授予该领域“最有价值专家”(MVP)称号。

专栏模块

本专栏分为如下几个模块。

  1. “白话”容器技术基础: 用饶有趣味的解说,梳理容器技术生态的发展脉络,讲述容器技术的来龙去脉与实现原理,让你知其然,并且知其所以然。

  2. Kubernetes集群的搭建与实践: 以浅显易懂的语言,讲述Kubernetes集群背后的原理,并从0开始搭建一套Kubernetes集群,带你领略Kubernetes集群的“一键安装”。

  3. 容器编排与Kubernetes核心特性剖析: 这个模块是专栏重中之重的内容,从分布式系统设计的视角出发,抽象和归纳出这些特性中体现出来的普遍方法,然后带着这些指导思想去逐一阐述Kubernetes项目关于编排、调度和作业管理的各项核心特性。

  4. Kubernetes开源社区与生态: 我会和你一起探讨容器社区技术演进之路,带你思考如何同团队一起平衡内外部需求,逐渐成为社区中不可或缺的一员。

专栏详细目录如下:

适宜人群

  • 具备一定服务端基础知识,对容器感兴趣的互联网从业者;
  • 想要进阶容器技术的软件开发人员;
  • 希望在容器时代大展拳脚的运维工程师和架构师;
  • 希望了解和学习容器技术背后原理的技术管理者、技术销售和市场从业者。
你觉得怎么样?期待您评价: