Kubernetes 手册(三)
原文:
zh.annas-archive.org/md5/5052204F13641918EE166946F5C50D62译者:飞龙
第八章:其他重要的 Kubernetes 内容
Kubernetes 还有很多内容无法在一本书中涵盖。如果我们尝试,将填满整整一套书!
在本章中,我们将简要提及 Kubernetes 的以下领域,这将带您进入下一个级别:
-
DaemonSets
-
StatefulSets
-
作业
-
定时作业
-
自动缩放
-
RBAC
-
存储
-
Helm
其中许多内容将成为未来版本书籍中的独立章节。现在,让我们先尝尝每个领域。
显然,还有更多内容,但就像我们已经说过的 - 它可以填满整整一套书!
DaemonSets
DaemonSets 是apps API 组中的一种资源,它们管理 Pods。它们的用例是当您需要在集群中的每个节点上运行特定 Pod 的副本时。一些例子包括;监控 Pods和日志 Pods,您需要在集群中的每个节点上运行它们。
正如您所期望的,它实现了一个控制器和一个监视循环。这意味着您可以动态地向集群中添加和删除节点,而 DaemonSet 将确保您始终在每个节点上有一个 Pod 副本。
以下命令显示了kube-system命名空间中存在的两个 DaemonSets,在新安装的 3 节点集群上。
输出被修剪以适应页面。
kubectl get ds -n kube-system
NAME DESIRED CURRENT READY NODE SELECTOR
kube-proxy 3 3 3 beta.kubernetes.io/arch=amd64
weave-net 3 3 3 <none>
请注意,每个 DaemonSet 的期望状态为 3 个副本。您不需要在 DaemonSet YAML 文件中指定这一点,因为它是根据集群中的节点数自动暗示的。
DaemonSets 在apps/v1 API 组中是稳定的,并且可以通过通常的kubectl get和kubectl describe命令等进行管理。如果您已经了解 Pods 和部署,您会发现 DaemonSets 非常简单。
StatefulSets
StatefulSets 是apps/v1 API 组中的稳定资源。它们的用例是有状态的 Pods - 即不打算是短暂的 Pods。
微服务应用程序的有状态组件通常是最难实现的,而像 Kubernetes 这样的平台在处理它们的功能方面进展缓慢。StatefulSets 是改进这一点的一步。
将它们视为类似于部署是有用的。例如,我们在 YAML 文件中定义它们,然后将其作为期望状态POST到 API 服务器。控制器在集群上实现工作,后台监视循环确保当前状态与期望状态匹配。然而,StatefulSet 和 Deployment 之间有一个主要区别 - 通过 StatefulSet 部署的 Pod 是不可互换的。这意味着当 StatefulSet 管理的 Pod 失败时,会被具有相同 ID 和 IP 等的另一个 Pod 替换。
StatefulSets 的潜在用例是应用程序中维护状态的任何服务。这些可以包括:
-
需要访问特定命名卷的 Pod
-
需要持久网络标识的 Pod
-
必须按特定顺序上线 Pod 的情况
StatefulSet 保证所有这些在 Pod 失败和后续重新调度操作中都会被维护。
由于有状态应用程序的更复杂性,StatefulSets 的配置可能会很复杂。
作业和 CronJobs
作业,又称批处理作业,是batch/v1 API 组中的稳定资源。当您需要运行特定数量的特定 Pod,并且需要保证它们都能成功完成时,它们就会很有用。
值得注意的一些微妙之处:
-
作业没有期望状态的概念
-
作业中的 Pod 是短暂的
这两个概念将作业与其他对象(如部署、守护进程集和 StatefulSets)分开。而那些对象会持续运行指定数量的某个 Pod,作业管理指定数量的某个 Pod,并确保它们完成并成功退出。
作业对象实现了通常的控制器和监视循环。如果作业对象生成的 Pod 失败,作业将在其位置创建另一个。作业本身直到所需数量的 Pod 成功完成才会完成。
用例包括典型的批处理工作负载。
有趣的是,作业即使只需要运行一个 Pod 完成也是有用的。基本上,每当您需要运行一个或多个短暂的 Pod,并且需要保证它们成功完成时,作业对象就是您的朋友!
CronJobs只是根据时间表运行的作业。
自动缩放
部署章节向我们展示了如何手动扩展 Pod 副本的数量。然而,手动扩展一组 Pod 并不会扩展(原谅双关语)。例如,如果您的应用程序在凌晨 4:20 需求激增,如果您需要呼叫操作员,然后登录到集群并手动增加副本数量,这远非理想。如果您需要扩展集群中的节点数量,情况也是一样。
考虑到这些挑战,Kubernetes 提供了几种自动扩展技术。
**水平 Pod 自动缩放器(HPA)**根据需求动态增加和减少部署中的Pod数量。
**集群自动缩放器(CA)**根据需求动态增加和减少集群中的节点数量。
**垂直 Pod 自动缩放器(VPA)**试图调整 Pod 的大小。目前是一个alpha产品。
水平 Pod 自动缩放器(HPA)
HPA 是autoscaling/v1 API 组中的稳定资源,它的工作是根据观察到的 CPU 指标来扩展部署中副本的数量。在撰写本文时,v2 API 正在开发中,将允许根据不仅仅是 CPU 来进行扩展。
它的工作方式是这样的……您定义一个使用 Pod 资源请求的部署 - 其中 Pod 中的每个容器请求一定数量的 CPU。您将其部署到集群中。您还创建一个目标该部署的 HPA 对象,并设置一个规则,比如:如果该部署中的任何 Pod 使用超过其请求的 CPU 的 60%,则增加一个额外的 Pod。
一旦部署和 HPA 部署到集群中,扩展操作就会变得自动化。
值得注意的一点是,HPA 会更新目标部署的.spec.replicas字段。虽然此更新记录在集群存储中的部署对象中,但可能会导致您在外部版本控制系统中的部署 YAML 文件与当前在集群中观察到的内容不同步的情况。
集群自动缩放器(CA)
CA 的目标是调整您的 Kubernetes 集群大小。在高层次上,它们根据需求增加和减少集群中的节点数量。
稍微深入一点……CA 定期检查 Kubernetes 中由于节点资源不足而处于挂起状态的 Pod。如果发现任何问题,它会向集群添加节点,以便可以安排挂起的 Pod。
这需要与集群的基础基础设施平台集成 - 一个公共 API,允许 Kubernetes 添加和删除节点。主要的云平台实现了具有不同支持级别的集群自动缩放器。查看您的云提供商文档以获取最新的支持信息。
基于角色的访问控制(RBAC)
Kubernetes 实现了最小特权 RBAC 子系统。启用后,它会锁定集群,并允许您基于特定用户和组授予权限。
该模型基于三个主要组件:
-
主体
-
操作
-
资源
主体是用户和组,它们必须在 Kubernetes 之外进行管理。操作是主体被允许执行的操作(创建、列出、删除等)。资源是集群上的对象,如 Pod。将这三者结合起来,就形成了一个 RBAC 规则。例如,Abi(主体)被允许创建(操作)Pods(资源)。
自 Kubernetes 1.8 以来,RBAC 一直稳定(v1),并利用在authorization.rbac.k8s.io API 组中定义的两个对象。这两个对象是Roles和RoleBindings。Role是您定义要允许的资源和操作的地方,而RoleBinding将其与主体连接起来。
存储
存储是大多数生产应用程序的重要组成部分。幸运的是,Kubernetes 拥有全面的存储子系统。
该模型的高级架构包括存储提供程序、插件接口和 Kubernetes 持久卷子系统。
存储提供程序负责创建实际的存储,可以是企业级存储阵列和云存储服务等。将它们连接到 Kubernetes 的首选方式是通过容器存储接口(CSI)插件。Kubernetes 持久卷子系统将存储暴露给集群,并提供了消费方式。参见图 7.1。
图 7.1
存储提供程序的示例包括:企业级存储阵列,如 EMC 和 NetApp,以及云存储服务,如 AWS Elastic Block Store(EBS)。这些通过 CSI 插件连接到 Kubernetes,Kubernetes 提供了允许 Pod 访问和使用存储的对象。
存储资源通过PersistentVolume(PV)对象在 Kubernetes 中表示,Pod 可以使用PersistentVolumeClaim(PVC)对象访问它们。这两者都是核心 API 组的v1中的资源。
StorageClass对象允许动态创建 PV,并位于storage.k8s.io/v1 API 组中。
Helm
Helm 是事实上的 Kubernetes 包管理器,极大地简化了 Kubernetes 应用的安装和管理。
Helm 于 2018 年被接纳为云原生计算基金会(CNCF)的官方顶级项目。因此,它与 Kubernetes、Prometheus、gRPC 等并列。
作为包管理器,它就像 Ubuntu 的apt和 Mac 的brew。在 Helm 的情况下,它隐藏了诸如部署、Pod 和持久卷之类的复杂性,放在一个叫做chart的构造中。把 chart 想象成 Helm 版的 YUM、DEB 或 homebrew 包。因此,您可以通过应用的 Helm chart 安装、更新和删除 Kubernetes 应用。
您还可以与社区分享您的 chart,并重复使用现有的 chart。
章节总结
本章的目的是让您了解一些其他重要的 Kubernetes 技术,以便您知道下一步可能要去哪里。但是,Kubernetes 非常庞大,我们还没有涵盖所有内容。
未来的计划是将其中一些主题作为书的未来版本中的独立章节。如果您等不及,我已经在 acloud.guru 的Kubernetes 深入探讨视频课程中涵盖了自动扩展、RBAC和存储。
读累了记得休息一会哦~
公众号:古德猫宁李
-
电子书搜索下载
-
书单分享
-
书友学习交流
网站:沉金书屋 https://www.chenjin5.com
-
电子书搜索下载
-
电子书打包资源分享
-
学习资源分享
读累了记得休息一会哦~
公众号:古德猫宁李
-
电子书搜索下载
-
书单分享
-
书友学习交流
网站:沉金书屋 https://www.chenjin5.com
-
电子书搜索下载
-
电子书打包资源分享
-
学习资源分享
第九章:接下来做什么
有很多方法可以让你的 Kubernetes 之旅更上一层楼,而且大多数方法都很容易!
熟能生巧
亲自动手是无法替代的。幸运的是,现在从未有过如此容易建立一个 Kubernetes 游乐场,在那里你可以玩到你成为世界权威!
我非常喜欢 Play with Kubernetes(labs.play-with-k8s.com/)。我喜欢 Docker Desktop,并且我经常在 Google 的 GKE 上建立测试集群。
还有其他选择,它们都比以前简单多了!我记得我曾经为了我的 Windows NT 的 MSCE 考试而苦苦学习,每次我搞垮了实验室,就要花费无数个小时从光盘安装重建 NT 域。现在真的没有理由不动手了!
更多书籍
我有一本关于 Docker 的书,得到了极好的评价。Docker 和容器对于 Kubernetes 至关重要,所以如果你需要了解 Docker,去看看吧——它叫做 Docker 深入挖掘,你可以在亚马逊和 Leanpub 上买到。
视频培训
如果你喜欢这本书,你会喜欢我的视频课程!
我在 Pluralsight 上有一个入门 Kubernetes课程,还在 A Cloud Guru 上有一个Kubernetes 深入课程。如果你已经读完了所有的书,你可能想直接去深入挖掘课程。
我在 Pluralsight 上还有很多 Docker 课程。
如果你不是 Pluralsight 或 A Cloud Guru 的会员,我建议你成为其中一个!是的,它们是收费的,但它们可能是你职业生涯中做的最好的事情之一!每个平台的月度订阅都可以让你访问该平台图书馆中的每门课程——从开发人员到 IT 运维的所有课程。如果你不确定是否要花钱,通常会有一个免费试用期,你可以在有限的时间内免费访问。
活动和聚会
你应该参加 KubeCon 和你当地的 Kubernetes 聚会。那里有很多优秀的人,也是学习的好地方!
就这样了。继续学习吧!
反馈
谢谢你读我的书。希望你喜欢它。
现在是我请求一个忠告的时候(这是我们在英国拼写的方式)……
写一本书需要荒谬的时间和奉献精神。所以,我真的很感激在亚马逊上快速写一篇评论。只需要几分钟,如果你在其他地方买了这本书,你甚至可以在亚马逊上发表评论!欢迎各种类型的评论!
另外……随时可以在Twitter上找我。
就是这样。祝你驾驭职业生涯一帆风顺!