一、Kubernetes 高级概念

  1. StatefulSet
  • 定义:StatefulSet 是为了管理有状态的应用而设计的,它维护了每个 Pod 的持久标识(如网络标识符、存储卷等)。适用于需要稳定、唯一的网络标识符和持久存储的应用,如数据库、分布式系统等。
  • 特性
  • 稳定的、唯一的网络标识符。
  • 稳定的、持久的存储。
  • 有序的部署和扩展。
  • 有序的、优雅的删除和终止。
  • 自动滚动更新。
  1. DaemonSet
  • 定义:DaemonSet 确保所有(或某些)节点上运行一个 Pod 的副本。当节点加入集群时,Pod 会被调度到该节点上;当节点从集群中移除时,Pod 会被垃圾回收。适用于需要在每个节点上运行守护进程或日志收集等场景。
  • 应用场景
  • 日志收集(如 Fluentd, Logstash)。
  • 系统监控(如 Prometheus Node Exporter, collectd, Datadog agent)。
  • 节点级别的存储守护进程(如 glusterd, ceph)。
  1. Jobs 与 CronJobs
  • Jobs:用于执行一次性任务,任务完成后 Pod 会被自动删除。
  • CronJobs:基于时间的作业调度,类似于 Linux 的 cron 守护进程,但用于 Kubernetes 集群中。它根据设定的时间表运行 Job。
  1. PersistentVolume 和 PersistentVolumeClaim
  • PersistentVolume (PV):由管理员提供的一段网络存储,集群中的资源,与具体的 Pod 无关。
  • PersistentVolumeClaim (PVC):用户对存储资源的请求,与 Pod 绑定。Pod 通过 PVC 请求特定大小和访问模式的存储,而实际存储由 PV 提供。

二、Kubernetes 实战:部署有状态应用

  1. 部署 MySQL StatefulSet
  • 编写 YAML 文件定义 StatefulSet,包括服务定义(用于暴露数据库服务)和 StatefulSet 定义(定义 Pod 模板、存储卷等)。
  • 使用 kubectl apply -f mysql-statefulset.yaml 部署 StatefulSet。
  • 验证部署状态,查看 Pod、PVC、PV 等资源。
  1. 配置动态存储
  • 如果集群支持动态存储(如使用 StorageClass),可以配置 StatefulSet 自动创建 PVC 和 PV。
  • 需要在集群中配置合适的 StorageClass,并在 StatefulSet 中指定该 StorageClass。
  1. 故障恢复与扩展
  • 测试删除一个 Pod,观察 Kubernetes 如何重新创建并挂载存储。
  • 尝试扩展 StatefulSet 的副本数,观察新 Pod 的创建和状态变化。

三、监控与日志

  • Prometheus 和 Grafana:结合使用 Prometheus 进行指标收集和 Grafana 进行可视化,可以实时监控 Kubernetes 集群和应用的状态。
  • EFK Stack(Elasticsearch, Fluentd, Kibana):用于收集、存储和查询 Kubernetes 集群中的日志。

四、安全与认证

  • RBAC(基于角色的访问控制):为 Kubernetes 集群中的用户、组和服务账户提供细粒度的访问控制。
  • TLS 加密:为 Kubernetes API 服务器启用 TLS 加密,确保集群通信的安全性。

五、学习资源

  • 官方文档: https://kubernetes.io/docs/
  • Kubernetes The Hard Way:一个深入 Kubernetes 内部机制的学习项目,适合希望深入理解 Kubernetes 架构和操作的读者。
  • Kubernetes Bootcamp:一个交互式在线教程,通过实战练习帮助初学者快速上手 Kubernetes。

今天的学习内容涵盖了 Kubernetes 的几个高级概念以及如何在实战中部署和管理有状态应用。掌握这些概念和技能将使你能够更有效地在 Kubernetes 环境中运行和管理复杂的应用。