Kubernetes服务介绍

官网

Kubernetes 也称为 K8s,是用于自动部署、扩缩和管理容器化应用程序的开源系统。它最初由 Google 开发,并在 2015 年贡献给云原生计算基金会(CNCF)。Kubernetes 可以运行在本地数据中心、公有云、混合云、多云 环境中,为应用提供高可用性、可扩展性和弹性管理能力。

  • Kubernetes 的核心功能
    ✅ 自动化部署与管理
    通过 YAML 配置文件 或者 kubectl 命令行工具,快速部署和管理应用。
    支持滚动更新,实现 零宕机 部署和回滚。
    ✅ 弹性伸缩
    根据 CPU/内存使用率自动扩展(HPA - Horizontal Pod Autoscaler)。
    也支持手动扩容 kubectl scale。
    ✅ 负载均衡
    内置 Service 机制(ClusterIP、NodePort、LoadBalancer)。
    可结合 Ingress Controller(如 Nginx、Traefik)进行 HTTP/HTTPS 负载均衡。
    ✅ 服务发现与通信
    Pod 内部通信 通过 ClusterIP 自动发现。
    不同服务之间可通过 DNS 解析互访(CoreDNS 负责解析 Service 名称)。
    ✅ 自愈能力
    Pod 失败后自动重启。
    节点失效后重新调度 Pod 到其他可用节点。
    ✅ 存储管理
    支持动态存储卷(Persistent Volume, PV)。
    支持多种存储后端(NFS、Ceph、GlusterFS、云存储 EBS/GCE PD 等)。
    ✅ 安全与权限管理
    RBAC(基于角色的访问控制),细粒度管理用户权限。
    NetworkPolicy 控制 Pod 之间的网络访问规则。
    ✅ 日志与监控
    内置事件机制 可监控 Pod 状态。
    结合 Prometheus + Grafana 进行监控与告警。
    ELK / Loki 进行日志收集与分析。

Kubernetes 组件

Kubernetes由控制平面(Control Plane) 和工作节点(Worker Node) 组成,应用服务部署在Node节点上,且可以通过配置选择应用部署在某些特定的节点上。

(1) 控制平面(Master 节点)

  • kube-apiserver
    是整个集群的 API 入口,所有组件(如 kube-scheduler、kube-controller-manager、kubelet)都通过它的REST API 接口与集群交互,处理所有请求
  • etcd
    作为 Kubernetes 的分布式存储,存储集群所有数据(键值存储数据库),kube-apiserver 负责读取和写入 etcd 数据
  • kube-scheduler
    监听 etcd,发现新的未调度的 Pod,并根据资源情况将其分配到合适的 Worker 节点。
  • kube-controller-manager
    负责维持集群状态,例如确保 Deployment 定义的 Pod 数量正确、发现节点故障并触发迁移等。

(2) 工作节点(Worker 节点)

  • kubelet
    运行在每个 Worker 节点上,定期向 kube-apiserver 汇报状态,并根据调度指令拉取容器镜像、创建 Pod 和管理生命周期。
  • Container Runtime
    (如 Containerd) 运行容器(Docker/Containerd/CRI-O)
  • kube-proxy
    负责 Worker 节点之间的网络通信,维护 Service 规则,实现负载均衡和网络转发。

在这里插入图片描述

整个系统通过 kube-apiserver 连接所有组件,etcd 记录状态,控制平面决定 Pod 运行位置,工作节点执行任务,最终实现 Kubernetes 的高可用、弹性伸缩和自动化管理。

Kubernetes 生态

Kubernetes 拥有丰富的生态系统,支持多种工具和插件:

  • 容器运行时(CRI):容器运行时负责拉取、管理和运行容器,Kubernetes 通过 CRI(Container Runtime Interface) 适配不同的容器运行时。
    官网说明

Containerd、CRI-O、Docker(需 cri-dockerd 适配)。对比如下

运行时维护者特点适用场景
Containerd- CNCF / Docker- 轻量级,K8s 官方推荐,性能稳定生产环境首选
CRI-O-Kubernetes / Red Hat-针对 K8s 设计,兼容 OCI 镜像,轻量高效OpenShift / 高安全性需求
Docker -(需 cri-dockerd)Docker- 传统开发者熟悉,但 Kubernetes 已不再原生支持(1.24版本舍弃)作为过渡使用,不推荐长期

部署选择:

生产环境 推荐 Containerd(兼容性强,性能稳定)。
安全合规 可选 CRI-O(无额外功能,仅适用于 K8s)。
本地开发 / 过渡 可继续使用 Docker + cri-dockerd。

  • 网络插件(CNI):CNI(Container Network Interface)插件用于管理 Pod 之间的网络通信。

Calico、Flannel、Cilium、Weave。插件对比如下:

CNI 插件维护者特点适用场景
CalicoTigera BGP路由,支持 NetworkPolicy,性能高大规模集群,企业应用
FlannelCoreOS / Red Hat轻量级,易部署,但不支持 NetworkPolicy小规模集群
CiliumIsovalent基于 eBPF,性能高,安全性强,Service Mesh 兼容云原生、高性能
WeaveWeaveworks无需外部依赖,支持 NetworkPolicy小型私有集群

部署选择:

企业生产环境:Calico(成熟稳定,支持 NetworkPolicy)。
云原生高性能:Cilium(eBPF 加速,兼容 Service Mesh)。
小型测试集群:Flannel(简单易用,配置少)。

  • 存储插件(CSI):CSI(Container Storage Interface)插件提供持久化存储支持。

Ceph、GlusterFS、Longhorn、Rook。对比如下

CSI 插件维护者特点适用场景
Ceph / RookRed Hat / CNCF分布式存储,支持块、文件、对象存储适合大规模集群
LonghornRancher轻量级,易于管理,支持快照和备份小规模集群
OpenEBSMayaData本地存储解决方案,支持多种存储引擎DevOps / CI/CD
NFS / EFS开源 / 云厂商传统共享存储,适用于静态文件存储共享存储需求

部署选择:

高可用分布式存储:Ceph / Rook(适合大规模生产环境)。
轻量级存储:Longhorn(适合 Rancher 生态)。
本地开发 / 测试:OpenEBS / NFS(配置简单,适合小规模存储)。

Kubernetes 基本对象

Kubernetes 通过声明式 API 定义和管理资源,核心的基本对象用于描述 计算、存储、网络 等方面的需求。以下是 Kubernetes 主要的基本对象及其作用

在这里插入图片描述

计算(计算资源相关)

  • Pod:Pod是Kubernetes创建或部署的最小单位。一个Pod封装一个或多个容器(container)、存储资源(volume)、一个独立的网络IP以及管理控制容器运行方式的策略选项
  • Node:代表一个 Kubernetes 集群中的物理机或虚拟机
  • Deployment:Deployment是对Pod的服务化封装。一个Deployment可以包含一个或多个Pod,每个Pod的角色相同,所以系统会自动为Deployment的多个Pod分发请求。
  • ReplicaSet:维持 Pod 副本数量,通常由 Deployment 管理
  • DaemonSet:确保每个节点都运行一个 Pod,适用于日志/监控
  • StatefulSet:StatefulSet是用来管理有状态应用的对象。和Deployment相同的是,StatefulSet管理了基于相同容器定义的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个Pod维护了一个固定的ID。这些Pod是基于相同的声明来创建的,但是不能相互替换,无论怎么调度,每个Pod都有一个永久不变的ID。
  • Job:Job是用来控制批处理型任务的对象。批处理业务与长期伺服业务(Deployment)的主要区别是批处理业务的运行有头有尾,而长期伺服业务在用户不停止的情况下永远运行。Job管理的Pod根据用户的设置把任务成功完成就自动退出(Pod自动删除)。
  • CronJob:CronJob是基于时间控制的Job,类似于Linux系统的crontab,在指定的时间周期运行指定的任务。

存储(数据持久化相关)

  • PersistentVolume(PV):物理存储,提供持久化数据
  • PersistentVolumeClaim(PVC):申请存储资源,与 PV 绑定
  • StorageClass:定义存储类型(如 SSD、HDD、云存储)
  • ConfigMap:存储应用配置信息(非敏感)
  • Secret:存储敏感信息(如密码、证书)

网络(通信与负载均衡)

  • Service:Service是用来解决Pod访问问题的。Service有一个固定IP地址,Service将访问流量转发给Pod,而且Service可以给这些Pod做负载均衡
  • Ingress:Service是基于四层TCP和UDP协议转发的,Ingress可以基于七层的HTTP和HTTPS协议转发,可以通过域名和路径做到更细粒度的划分。
  • NetworkPolicy:控制 Pod 之间的网络访问权限

访问控制(权限与调度)

  • Namespace:逻辑隔离 Kubernetes 资源
  • ServiceAccount :Pod使用的身份标识,访问 API 资源
  • Role / ClusterRole:定义权限(针对单个 Namespace 或整个集群)
  • RoleBinding / ClusterRoleBinding:绑定用户或组到 Role / ClusterRole subjects、roleRef
  • ResourceQuota:限制 Namespace 资源使用
  • LimitRange:限制 Pod/容器的 CPU 和内存

Kubernetes 工作负载类型

Kubernetes 主要有无状态和有状态两类工作负载:

  • 无状态工作负载
    无状态应用通常不需要存储持久化数据,Pod 可以随时销毁或重建。
类型特点适用场景
Deployment维护多个 Pod 的副本,支持滚动更新、回滚Web 应用、API 服务
ReplicaSet仅保证 Pod 副本数,通常被 Deployment 管理仅需简单扩缩容的服务
DaemonSet确保每个 Node 上都运行一个 Pod日志收集、监控、网络代理
Job运行一次性任务,完成后退出任务计算、批处理
CronJob按计划定期运行 Job定时任务(如数据库备份)
  • 有状态工作负载
    有状态应用通常需要稳定的网络标识、持久化存储,Pod 顺序启动、重启不会丢失数据。
类型特点适用场景
StatefulSet确保 Pod 名称固定(如 pod-0, pod-1)存储持久化(使用 PVC) 、 按顺序启动和终止数据库(MySQL、PostgreSQL) 、 分布式应用(ZooKeeper、Kafka)
posted @ 2025-02-08 10:52  huhy  阅读(41)  评论(0)    收藏  举报  来源
--> --> /*文章评论*/