学习和理解 Kubernetes 的先决条件

2025-06-07

学习和理解 Kubernetes 的先决条件

如今,Kubernetes 已是人人皆知的热门话题。从工程师到首席技术官,再到高层领导团队,每个人都在关注着“Kubernetes”这个概念,以及它让应用程序和云原生部署更加便捷的承诺。

问题在于,你不可能只是“打开 Kubernetes”然后所有问题就迎刃而解。Kubernetes 不仅极其复杂,而且它由多个底层组件构成。考虑到这些底层组件,工程师需要掌握大量的基础知识才能真正理解 Kubernetes。

在这篇博文中,您将了解在进入 Kubernetes 之前需要了解的内容才能成功。

操作系统

首先要说的是操作系统(OS)。说到操作系统,你可以简单概括为:

  • Linux
  • 视窗

Kubernetes 运行在某个地方,即使是像 Azure Kubernetes 服务 (EKS) 和 Elastic Kubernetes 服务 (EKS) 这样的云 Kubernetes 服务。这个“地方”就是操作系统。操作系统通常是 Linux,但最近,AKS 现在可以拥有 Windows 节点池,以便运行 Windows 工作负载。

如果您在不了解操作系统的情况下尝试闯入 Kubernetes,那么您很可能无法调试节点组(其中 Kubernetes 应用程序通过 Kubernetes Worker Nodes 运行)或从安全角度保持底层操作系统为最新版本。

为了达到这个目的而学习操作系统,YouTube 上几乎任何“Linux 基础”免费课程都可以满足您的需求。

基础设施

上一节提到过操作系统,操作系统在某个地方运行。这个地方就是基础设施。基础设施可以是:

  • 裸机
  • ESXi 或 Hyper-V 等虚拟机管理程序中的虚拟机
  • AWS 中的 EC2 实例
  • Azure 虚拟机

以及其他几个地方。

底层基础设施,在某些时候,需要你进行故障排除。目标当然是避免使用 RDP 或 SSH 连接服务器,但有时你可能需要这么做。

更不用说,要运行 Kubernetes,你需要了解基础架构架构。诸如应该运行多少个 Kubernetes 工作节点、它们应该在哪个数据中心运行、高可用性、自动扩展以及网络连接等,都对 Kubernetes 的正常运行至关重要。

要学习基础设施,您通常可以从系统管理员、基础设施工程师、云工程师或虚拟化工程师等角色那里获得这些知识。

贮存

部署有状态应用程序时,需要将状态存储在某个地方。Kubernetes Pod 及其中的容器是 100% 短暂的,这意味着它们需要被关闭、销毁并重新部署。因此,您不能依赖开箱即用的 Kubernetes Pod 来管理状态。

话虽如此,您必须了解存储。从 IT 角度来看,存储实际上就是存储数据的地方。这些数据可以是:

  • 数据库数据
  • 图片
  • 音频剪辑

以及其他几乎所有东西。说到存储,不妨考虑一下 Google Drive、Dropbox 等等……

对于应用程序来说,您通常会看到一些为其存储的数据,这些数据一旦被删除,应用程序就无法正常运行。您还会看到一些应用程序需要连接到数据库,例如 MySQL。

Kubernetes 处理某些类型的状态数据的主要方式是:

  • 状态集
  • 从 Kubernetes 到 MySQL 等数据库的数据库连接

对于应用程序来说,总需要将某些内容存储在某个地方。对于 Kubernetes 来说也不例外。

联网

与基础设施类似,Kubernetes 也需要网络。事实上,网络是 Kubernetes 最关键的方面之一。如果不了解网络、端口、负载均衡器和防火墙,您将无法部署需要满足以下要求的 Kubernetes 应用程序:

  • 从一个后端 Kubernetes 应用程序向另一个后端 Kubernetes 应用程序通信/发送数据/接收数据
  • 需要像前端 Web 应用或网站一样面向公众,以便用户访问

网络在 Kubernetes 中非常重要,它涉及 Kubernetes 部署、Pod 和服务之间各个方面的通信。

如果你对网络知识还不熟悉,你绝对应该读一读 Network+ 的书籍,或者在 YouTube 上观看一些视频。以下是一些建议:

安全

你听说过最近的安全漏洞吗?当然听说过!每天大约有五千万起!

显然有些夸张,但你明白我的意思。

说到漏洞,很多时候都与应用程序安全有关。由于您要将应用程序部署到 Kubernetes,因此您需要了解如何保护它们。这并不意味着您需要成为一名能够攻陷 FBI 的红帽黑客,但您确实需要了解如何以安全的方式部署应用程序并对其进行监控。

另一点是 Kubernetes 的实际基础设施层及其所需的安全性。这不仅关乎应用程序,还关乎谁对哪个应用程序、哪个集群以及 Kubernetes 的哪些部分拥有权限。

以下是从安全角度对 Kubernetes 提出的一些建议:

  • 确保你对基于角色的访问控制(RBAC)有扎实的掌握
  • API 安全性(谁在访问它)
  • 防火墙和加密
  • 审计日志
  • 确保如果 Kubernetes API 的新版本发布并且有安全更新,你就能计划更新
  • 确保 Kubernetes Secrets 处于你的首要位置

编程

应用程序是由什么构成的?当然是代码!如果你要部署应用程序,你需要了解代码。很多人认为这不是真的,但这是事实。我不会试图改变你的想法,但我可以提供一些观点:

  1. 如果你正在将应用程序部署到 Kubernetes,那么几乎可以肯定的是,你最终需要在某个时刻进行故障排除。如果你没有调试经验,那么你将无法满足部署 Kubernetes 的需求。
  2. 如果您刚开始使用 Kubernetes,很可能需要部署一个应用程序。您真的想依赖别人在 GitHub 上编写的应用程序吗?更不用说,即使应用程序已经编写完成,您仍然需要做一些准备工作来通过 Kubernetes 进行部署(dockerfile、manifest 等)。心理学(尤其是自然语言处理)中有一个概念,即什么是您可以控制的,什么是您无法控制的。您应该将大部分精力投入到您可以控制的事情上。不要依赖别人来实现您的目标。不要依赖别人的代码。

你需要成为一名拥有 10 年以上经验的程序员来构建下一个 Twitter 或 Instagram 吗?不,绝对不需要。你需要知道如何排除代码错误并编写自己的代码(函数、自动化代码等)吗?绝对需要。

成为开发者是 Kubernetes 的重要组成部分。事实上,任何正在运行的 Kubernetes 应用程序都是从 Kubernetes 清单(即 YAML 代码)创建的。在被吐槽之前,我知道 YAML 不是一种编程语言。这只是为了解释一下,你在 Kubernetes 中所做的几乎所有事情都与代码相关。

如果您是编程新手,学习 Python 和/或 Go(golang)绝对不会错。学习一些函数、变量、API 以及如何排查代码问题等基础知识。之后,您应该就能顺利上手了。

自动化

当考虑到 Kubernetes 在部署和管理应用程序方面给您带来的所有好处时,下一个问题是如何将应用程序部署到 Kubernetes?

你肯定不想kubectl create -f deployment.yaml整天坐在终端前手动运行,所以你必须找到一种方法将应用程序部署到 Kubernetes。有很多选择,比如 GitOps,但 GitOps 是一个高级主题,你应该在学习 Kubernetes 之后再学习。

从自动化角度来看,最好的起点是 CICD。

CICD 代表持续集成 (CI) 和持续部署/交付 (CD)。CI 是一种打包代码以使其准备好部署的方法。当你想到“打包代码”时,可以将其想象成将代码放入一个定义明确的小盒子中,这个小盒子安全可靠,并且具备成功运行所需的所有条件。CD 是指将打包好的代码发送到某个环境中。该环境可以是任何环境,从本地虚拟机到云端,再到 Kubernetes。

故障排除

最后,当然,绝对、110% 重要的,是故障排除。我会简短地介绍这一部分,因为如果你在科技行业工作超过一个月,你就会知道什么是故障排除。本质上,它是一门找出技术栈中问题的艺术。

你会发现自己需要一次又一次地查看从集群级别到 Pod/应用程序级别的 Kubernetes 日志,以找出部署失败的原因。要做到这一点,你需要扎实的故障排除技能。

不幸的是,实际上没有课程或书籍可以教您排除故障(除了与心理学相关的内容以便更多地了解您的想法),因此找出故障排除的最佳方法就是去做。

我是否曾提到过这是一门艺术?

文章来源:https://dev.to/thenjdevopsguy/preventions-to-learning-and-understanding-kubernetes-583p
PREV
什么是平台工程(以及它不是什么?)
NEXT
Undress AI:图像识别的未来和伦理考量