Coursera 笔记

Module 02 · Kubernetes Basics

Kubernetes Objects - Part 2Kubernetes 对象(Part 2)详解

Coursera ↗


学习目标

观看完本视频后,你将能够:

  • ✅ 描述 服务(Service) 的目的、属性和用途
  • ✅ 描述 ClusterIP、NodePort、LoadBalancer 和 External Name 服务的角色与用途
  • ✅ 描述 Ingress、DaemonSet、StatefulSet 和 Job 的角色与用途

一、Kubernetes 服务(Service)

服务的定义

  • 服务(Service) 是一种 REST 对象,类似于 Pod。
  • 服务是一个 逻辑抽象,表示一组运行在集群中的 Pod。
  • 服务通过负载均衡来提供对 Pod 的访问,并简化了服务发现过程。
  • 每个服务会分配一个 唯一的 IP 地址,用来访问部署在 Pod 上的应用程序。

服务的工作原理

  • 服务支持多种协议,如 TCP(默认)、UDP 等,还可以支持多个端口定义。
  • 服务选择器(Selector):用于选择目标 Pods,可以映射传入端口到目标端口。

为什么需要服务?

  • Pod 在集群中是动态的,可能会随时被销毁和创建,导致 IP 地址变化,造成服务发现困难。
  • 服务 通过 IP 地址或 DNS 名称 公开服务,并使用选择器来选定目标 Pod,解决了这一问题。

二、服务类型

1ClusterIP

  • 默认类型,为集群内部服务分配一个集群内部 IP 地址。
  • ClusterIP 服务 只能在集群内部访问,无法从外部请求服务。
  • 用于集群内部的 服务间通信,如前端和后端组件之间的通信。

2NodePort

  • NodePort 服务在每个节点的 IP 地址上暴露服务,指定一个静态端口。
  • 将外部请求路由到 ClusterIP 服务。
  • 安全性考虑:不推荐用于生产环境。

3LoadBalancer

  • 扩展 NodePort 服务,创建一个 外部负载均衡器(ELB),并将流量自动路由到 NodePort 服务。
  • 使用云服务提供商的负载均衡器公开服务,允许外部访问。

4External Name

  • 外部名称服务 映射到外部的 DNS 名称,而不是任何选择器。
  • 通过 spec.externalName 参数将服务映射到外部存储或其他资源,允许不同命名空间的 Pod 之间的通信。


三、Ingress — 访问管理

Ingress 的作用

  • Ingress 是一个 API 对象,结合 Ingress Controller,提供外部用户访问多个 Kubernetes 服务的路由规则。
  • 生产环境中,Ingress 通常暴露 HTTP(端口 80)或 HTTPS(端口 443)端口的应用程序。

特点

  • Ingress 能够在不使用外部负载均衡器的情况下,管理访问并减少成本。


四、DaemonSet — 节点级别的 Pod 部署

DaemonSet 的功能

  • 确保集群中每个节点都运行一个 Pod 实例。
  • 随着节点加入集群,DaemonSet 会自动在新节点上部署 Pod。
  • 删除 DaemonSet 会移除所有与之关联的 Pods。
  • 适用于 存储、日志管理 和 节点监控 等用途。


五、StatefulSet — 管理有状态应用

StatefulSet 的功能

  • 用于管理 有状态应用(Stateful Applications),保证 Pod 的顺序和唯一性。
  • 提供 持久存储卷,确保应用数据在 Pod 重启时保持一致。
  • 为每个 Pod 分配一个 粘性身份,保证 Pod 请求的持久性。


六、Job — 执行一次性任务

Job 的功能

  • 创建 Pod 并跟踪其完成情况,直到任务完成。
  • Job 会自动重试,直到 Pod 执行成功为止。
  • 删除 Job 会移除其创建的所有 Pods。
  • CronJobs 用于定期执行 Job,按照预定的时间表周期性地创建 Job。


七、总结

对象类型 功能描述 用途
Service 提供对 Pod 的访问,支持负载均衡 内部和外部服务的访问
ClusterIP 集群内的默认服务类型 内部服务间通信
NodePort 在每个节点上暴露静态端口 暴露服务给外部(非生产环境)
LoadBalancer 通过云负载均衡器公开服务 自动路由外部流量
External Name 映射到外部 DNS 名称 支持跨命名空间通信
Ingress 路由外部访问到集群内部服务 控制外部访问,减少成本
DaemonSet 确保每个节点运行一个 Pod 节点级任务,如存储和日志
StatefulSet 管理有状态应用,保证 Pod 顺序和唯一性 适用于有状态应用,如数据库
Job 创建并跟踪一次性任务的完成情况 执行批量或一次性任务

八、课程回顾

  • 服务(Service) 是一种 REST 对象,提供 Pod 的访问策略。
  • ClusterIP 是默认的服务类型,用于集群内的通信。
  • NodePort 和 LoadBalancer 提供从外部访问服务的方式。
  • Ingress 用于通过路由规则管理外部用户访问。
  • DaemonSet 确保在每个节点上运行一个 Pod。
  • StatefulSet 管理有状态应用,提供持久存储。
  • Job 用于执行一次性任务,并支持重试机制。

✨ 总结: Kubernetes 提供了多种对象和服务来处理不同类型的应用需求,从负载均衡、访问控制到有状态应用的管理,都能够实现高效、灵活的集群管理。 🚀