Kubernetes(简称 K8s)是一个用于自动部署、扩缩容和管理容器化应用的平台。理解 Pod、IP、Service、ReplicaSet 和 Deployment,是入门 Kubernetes 的第一步。
一、Pod 是什么
Pod 是 Kubernetes 中最小的部署和调度单元。一个 Pod 可以运行一个或多个紧密关联的容器,这些容器共享网络和部分存储资源。
实际使用中,我们通常不直接管理单个容器,而是通过 Pod 来运行应用。需要注意的是,Pod 可能因为升级、故障或调度而被重新创建,因此不应把 Pod 的 IP 当成永久地址。
二、Kubernetes 中常见的 IP
1. Node IP
Node IP 是集群节点的地址,也就是物理机或虚拟机在网络中的实际 IP。
2. Pod IP
Pod IP 是分配给 Pod 的地址,通常由集群使用的 CNI 网络插件负责分配和管理。同一个 Pod 内的容器共享网络命名空间,因此也共享 Pod IP。
3. ClusterIP
ClusterIP 是 Service 在集群内部使用的虚拟 IP。它为一组后端 Pod 提供稳定的访问入口,并配合 Service 端口实现服务发现和负载均衡。默认情况下,ClusterIP 只能在集群内部访问;如果要从集群外访问,可以使用 NodePort、LoadBalancer 或 Ingress 等方式。
三、ReplicationController 与 ReplicaSet
ReplicationController(RC)是 Kubernetes 较早期用于保证 Pod 副本数量的控制器。当实际运行的 Pod 少于期望数量时,RC 会创建新的 Pod;多于期望数量时,则会删除多余的 Pod。
ReplicaSet(RS)可以看作 RC 的新一代实现。它支持更灵活的标签选择方式,但通常不会被单独管理,而是由 Deployment 自动创建和维护。
四、Deployment 的作用
Deployment 用于声明和管理应用的期望状态。它可以创建和管理 ReplicaSet,并提供滚动更新、版本回退、扩容和缩容等能力。
例如,在应用升级时,Deployment 会逐步增加新 ReplicaSet 的副本数,同时减少旧 ReplicaSet 的副本数,最终平滑地完成版本替换。相比直接管理 Pod 或 ReplicaSet,使用 Deployment 更安全,也更方便维护。
五、为什么需要 Service
Pod 是动态的:它可能停止、迁移或重新创建,IP 也可能随之变化。因此,客户端不能依赖某个固定的 Pod IP 来访问应用。
Service 为一组具有相同标签的 Pod 提供稳定的访问入口。客户端访问 Service,Service 再把流量转发到可用的后端 Pod,从而实现服务发现和负载均衡。
小结
Pod 是最小运行单元;ReplicaSet 负责维持副本数量;Deployment 负责应用发布和版本管理;Service 则为动态变化的 Pod 提供稳定访问入口。把这几个对象串联起来,就能理解 Kubernetes 运行应用的基本方式。