Kubernetes 入门指南 - 一步步

2025-06-09

Kubernetes 入门指南 - 一步步

在本文中,我将向您介绍 Kubernetes。

您可以在 Youtube 上观看完整视频:

今天我们要讨论的内容是:

  • 集装箱化之前的生活
  • 容器部署
  • 什么是容器编排
  • 什么是 Kubernetes
  • 为什么要使用 Kubernetes
  • Kubernetes 的一些好处
  • Kubernetes 的架构

如果您喜欢该视频,请点赞、分享和订阅。这对频道很有帮助。

集装箱化之前的生活:

在使用容器之前,主要有两种部署应用程序的方法:

单服务器部署

所有应用程序和服务都托管在一台服务器上。这意味着该服务器没有单一职责实现。服务器挤满了各种东西,多个应用程序同时运行,有时一个应用程序会占用大部分资源,导致其他应用程序性能下降。

  • 优势
    • 易于托管
    • 易于维护
  • 缺点
    • 很难管理
    • 很难扩展
    • 所有不同服务的资源分配问题

替代文本

虚拟机部署

为了解决单服务器部署问题,虚拟化应运而生。它允许您在单个物理服务器的 CPU 上运行多个虚拟机 (VM)。每个应用程序都有自己的虚拟机,这意味着完全的关注点分离。

这种实现方式在当今世界仍然有效。我们可以用比单服务器部署更好的方式实现可扩展性和资源利用。

  • 优势
    • 减少停机时间:如果一个服务中断,其他服务仍可运行
    • 更好的负载处理
    • 更好的资源配置
  • 缺点
    • 难以管理的环境
    • 安全风险
    • 需要大量资源
    • VM 映像的一致性,这可能会导致应用程序出现错误

替代文本

容器部署

容器与虚拟机类似,但它们的隔离性较低。这意味着与虚拟机不同,容器共享操作系统,并利用其内核运行。

  • 优势
    • CI/CD 持续集成/持续部署管道
    • 环境一致性
    • 资源隔离
    • 资源利用
    • 松散耦合的应用程序
  • 缺点
    • 实施的学习曲线
    • 简单应用程序的复杂结构
    • 从虚拟机迁移到容器部署非常耗时

替代文本

什么是容器编排

替代文本

使用 Docker,我们可以使用 docker run 命令运行镜像的单个实例。当用户数量增加到单个实例不够用时,会发生什么情况?一种方法是多次运行 docker run 命令。

我们需要密切关注哪些容器正在运行以及这些容器的状态,如果出现故障,我们需要重新启动新的 docker run,以便我们可以拥有应用程序的新实例。

另一个方面是 Docker 主机的健康状况。如果 Docker 主机崩溃,我们无法启动它,那么该主机上运行的容器也将无法访问。

我们需要一位专门的工程师来持续监控容器及其健康状况。

容器编排:由工具和脚本组成的解决方案,可帮助我们在生产环境中托管容器。

  • 它由多个 docker 主机组成,这些主机可以托管容器,如果其中一个发生故障,其他主机仍然可以访问。
  • 它允许我们通过单个命令部署数百个应用程序的容器实例
  • 允许我们根据需要扩大或缩小规模
  • 允许容器之间进行高级联网
  • 跨不同请求进行负载平衡

使用docker⇒docker CLI⇒单个命令中的单个实例

使用 Kubernetes ⇒ kubectl ⇒ 单个命令即可管理 1000 个实例

什么是 Kubernetes

替代文本

Kubernetes 是一个开源容器编排平台,用于管理 Docker 等容器化工作负载和服务,支持声明式配置和自动化。

我们可以编写脚本并自动将资源分配给 Kubernetes 环境中的节点。它使基础设施能够更高效地运行。它负责应用程序的扩展和故障转移,提供部署模式等等。

Kubernetes 简称 k8s

为什么要使用 Kubernetes

Kubernetes 旨在为我们提供可靠的基础设施。它是一个帮助我们管理现有容器的工具。它采用模块化架构,易于维护和扩展。

它使我们能够大规模部署和更新应用程序,这是它被创建的主要原因。它允许我们将应用程序部署到数千个实例。

从本质上讲,Kubernetes 允许我们删除托管和管理容器时执行的手动过程。

Kubernetes 的优势

  • 高度可移植且 100% 开源:Kubernetes 跨平台兼容。它由云原生计算基金会管理。
  • 工作负载可扩展性:K8S 非常高效,可以轻松添加和删除新实例,且不会造成任何停机。它可以轻松处理所有容器的扩展。
  • 高可用性:k8s 旨在解决容器和基础设施的可用性,它解决了拥有高效、高能且可用的环境的要求。
  • 专为部署而设计:加快测试、部署和管理部署生命周期不同阶段的能力。
  • 服务发现和负载均衡:K8S 可以使用 DNS 或 IP 来暴露容器。如果流量较大,K8S 集群会负责负载均衡,并将流量分发到整个网络,确保部署稳定。
  • 存储编排:K8S 支持使用本地存储或任何云存储。本地存储可以是运行 K8S 的 SSD,或者如果 K8S 连接到 Azure、AWS 等公有云,我们就可以利用云存储,并享受云提供的所有安全功能。
  • 自我修复环境:如果出现故障或容器不再响应,k8s 将检测到该行为,并且 k8s 将重新启动该进程或终止该容器并启动一个新的容器。
  • 自动发布和回滚:可以使用 Kubernetes 描述容器的期望状态。容器的实际状态会以可控的速率转变为期望状态。因此,我们可以轻松地进行前滚或回滚。
  • 自动装箱:我们实际上可以指定每个容器所需的 CPU 和 RAM 的计算能力。
  • 机密和配置管理:Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 SSH 密钥。您可以部署和更新机密和应用程序配置,而无需重建容器镜像,也不会在堆栈配置中暴露机密。

Kubernetes 架构

替代文本

一个 k8s 集群由一组节点组成,

节点是一台机器,可以是物理机器,也可以是虚拟机,Kubernetes 软件就安装在其上。节点是一台工作机器,Kubernetes 容器将在此启动。

如果运行容器的其中一台机器发生故障,我们需要另一台机器来维持应用程序的运行。集群是一组组合在一起的节点,用于维持应用程序的正常运行

现在谁负责管理集群,谁将向集群发送有关容器和配置的信息,节点如何处理故障、日志。

K8S 架构是一种基于集群的架构,它围绕两个关键领域

  • k8s master:控制 k8s 基础设施内的所有活动
  • 节点:由主节点控制的 Linux 环境

k8s主节点

主节点是安装了 k8s 控制普通组件的节点,主节点监视集群中的节点并负责工作节点上容器的实际编排。

当我们在系统上安装 k8s 时,我们正在安装:

  • 调度器
  • 控制器
  • 容器运行时
  • 库贝莱特
  • etcd
  • API 服务器

API 服务器就像 k8s 的前端,用户、cli、管理设备都使用 API 服务器与集群进行通信

  • Api Sever:是一个基于 RESTful 的基础设施,我们可以保护每个连接的安全。
    • 它是集群和节点通信的主要工具
    • 它实现了接口,以便不同的工具和库能够有效地通信
    • 与工作节点交互并向其提供所需的信息
  • etcd:这是一个允许配置、信息和管理集群内节点的工具
    • 分布式可靠键/值存储
    • 存储集群中节点所需的配置信息。
    • 它具有键/值格式。
    • 访问它的唯一方法是通过 API 服务器
  • 调度程序:管理实际集群内的活动计划
    • 它是k8s集群中的关键组件
    • 它负责从主节点分配工作负载
    • 它跟踪集群节点上工作负载的利用率,然后将工作负载放在可用资源上,它查找新创建的容器并将其分配给节点
  • 控制器管理器:是一个守护进程服务器,是编排背后的大脑
    • 它不断循环运行并收集信息,然后负责将这些信息提供给 API 服务器
    • 它们负责在节点/容器/端点发生故障时通知并做出响应。
    • 控制器将决定创建新的容器来替换失败的容器
    • 该组件负责将组件的期望状态更改为期望状态
  • 容器运行时:是用于运行容器的软件
  • kubelet:是在集群中每个节点上运行的代理,代理负责确保节点按预期运行

kubectl 是 k8s cli,用于在 k8s 集群上部署和管理应用程序。获取集群信息并获取节点状态

kubectl run hello-minikube // run a k8s cluster
kubectl cluster-info
kubectl get nodes // list all of the nodes parts of the cluster
Enter fullscreen mode Exit fullscreen mode

k8s节点由以下部分组成:

  • Docker:
    • 它运行并管理节点内运行的容器
    • 这是容器运行时
  • 库贝莱特:
    • 负责节点与主 API 服务之间的信息共享
    • 它与 etcd 交互以读取配置和密钥
  • k8s代理
    • 它在节点内部运行 k8s 服务,有助于将服务提供给外部主机。同时将请求转发到指定的容器
    • 它执行原始的负载平衡,还管理节点上的 pod、卷、秘密、新容器的创建和健康检查。

感谢您的阅读。

鏂囩珷鏉ユ簮锛�https://dev.to/moe23/intro-to-kubernetes-step-by-step-3phf
PREV
API 管理 vs API 网关,以及 API 分析和监控的适用场景?GenAI LIVE!| 2025 年 6 月 4 日
NEXT
使用 Typescript 和测试库在 React 中进行 Axios Mocking