- Pod,Service和Deployment的关系
-
Pod:Kubernetes 中最小的部署单元,用于运行容器化应用。
-
Service:提供服务发现和负载均衡,为 Pod 提供稳定的网络端点,ClusterIP,NodePort,LoadBalance以及ExternalName。
-
Deployment:管理Pod的副本,确保应用的高可用性,并支持滚动更新和回滚。
- Service类型介绍
在 Kubernetes 中,服务(Service)是用于将一组 Pod 暴露给外部或内部访问的抽象层。Kubernetes 提供了多种服务类型,每种类型都有其特定的用途和特点。以下是 ClusterIP、NodePort、LoadBalancer 和 ExternalName 的详细解释:
- ClusterIP
- 定义:这是 Kubernetes 中默认的服务类型。ClusterIP 会为服务分配一个虚拟的内部 IP 地址(ClusterIP),该 IP 地址只能在集群内部访问。
- 工作原理:
- ClusterIP 通过 iptables 或 IPVS 规则将流量路由到后端的 Pod。
- Kubernetes 使用 kube-proxy 组件来管理服务的网络规则
- 特点:
- 适合内部微服务之间的通信。
- 服务只能在集群内部访问。
- 适用场景:
- 当服务只需要在集群内部使用时。
- 例如,后端服务之间的调用。
- NodePort
- 定义:NodePort 是在 ClusterIP 的基础上,为服务分配一个固定的端口(NodePort),并将该端口暴露到每个节点的 IP 上。
- 工作原理:
- NodePort 会在每个节点上监听指定的端口,并将外部流量转发到 ClusterIP。
- 外部可以通过 `<节点IP>:<NodePort>` 的方式访问服务。
- 特点:
- NodePort 的端口范围默认是 `30000-32767`,但可以手动指定。
- 服务可以通过集群内部和外部访问。
- 适用场景:
- 当需要从集群外部访问服务,但不想使用 LoadBalancer。
- 例如,测试环境或部署小型。
- LoadBalancer
- 定义:LoadBalancer 是在 NodePort 的基础上,通过云提供商的负载均衡器(如 AWS ELB、GCP Load Balancer 等)为服务分配一个外部 IP 地址。
- 工作原理:
- 云提供商的负载均衡器会自动创建,并将流量分发到后端的节点。
- 外部可以通过负载均衡器的 IP 或域名访问服务。
- 特点:
- 提供高可用性和流量分发。
- 依赖云提供商的支持。
- 适用场景:
- 当需要从外部访问服务,并且需要高可用性时。
- 例如,生产环境中的 Web 应用。
- ExternalName
- 定义:ExternalName 是一种特殊的服务类型,它通过 CNAME(别名)将服务映射到外部的 DNS 名称,而不是直接暴露服务本身。
- 工作原理:
- ExternalName 服务不会创建 ClusterIP 或 NodePort,而是直接将请求转发到外部的 DNS 名称,将内部sevice-name通过DNS的CNAME映射到外部的域名,例如,如果服务
my-service
的externalName
设置为external-database.example.com
,那么在集群内部访问my-service
时,实际上会解析为external-database.example.com
。 - 适用于访问外部系统或服务。
- ExternalName 服务不会创建 ClusterIP 或 NodePort,而是直接将请求转发到外部的 DNS 名称,将内部sevice-name通过DNS的CNAME映射到外部的域名,例如,如果服务
- 特点:
- 不需要后端 Pod。
- 适合访问外部资源,如数据库、API 等。
- 适用场景:
- 当需要访问外部服务时。
- 例如,访问外部的数据库或第三方 API。
- K8S的核心组件
-
控制平面(Control Plane)
控制平面负责管理集群的状态,包括调度、配置和维护。主要组件包括:
-
API Server:
-
作用:提供 RESTful API 接口,用于与集群交互。
-
功能:接收和处理来自用户的请求,验证请求并更新 etcd 中的集群状态。
-
-
etcd:
-
作用:分布式键值存储,用于存储集群的配置数据和状态信息。
-
功能:存储所有集群配置和状态信息,确保数据的一致性和高可用性。
-
-
Controller Manager:
-
作用:运行各种控制器进程,负责维护集群的状态。
-
功能:确保集群的实际状态与期望状态一致,例如管理 Pod 的创建、删除和健康检查。
-
-
Scheduler:
-
作用:负责将 Pod 调度到合适的节点上运行。
-
功能:根据节点的资源使用情况、Pod 的资源需求和策略规则,选择最佳节点来运行 Pod。
-
-
-
工作节点
-
Kubelet:
-
作用:运行在每个节点上的代理,负责管理节点上的容器。
-
功能:与 API Server 通信,确保容器按照期望状态运行,管理容器的生命周期。
-
-
Kube-proxy:
-
作用:运行在每个节点上的网络代理,负责维护网络规则。
-
功能:实现服务发现和负载均衡,管理 Pod 之间的网络通信。
-
-
Container Runtime:
-
作用:负责运行容器的底层软件。
-
功能:支持多种容器运行时,如 Docker、containerd 等。
-
-
- K8S如何进行服务发现
服务发现是Kubernetes中用于动态识别和访问集群内服务的机制。它允许服务在集群中动态地发现和通信,而无需硬编码IP地址或端口。
核心机制
- Pod的动态性:Pod是短暂的,可以随时创建或销毁,其IP地址会动态变化。
- Service的稳定性:Service提供了一个稳定的网络端点,即使后端的Pod发生变化,Service的端点仍然保持不变。
自动更新
Service通过标签选择器动态地发现和管理后端的Pod,确保流量始终路由到健康的Pod。
Kubernetes通过Service提供稳定的服务发现机制,使得服务之间的通信变得简单可靠。Service通过标签选择器动态地发现和管理后端的Pod,并提供稳定的网络端点。通过DNS和环境变量,Pod可以轻松地发现和访问其他Service,确保系统的高可用性和灵活性。
- 介绍一下Resource Quato
Resource Quota 是 Kubernetes 中用于限制命名空间内资源使用的一种机制。它通过设置资源使用上限,帮助管理员进行资源管理,确保资源的公平分配和使用,避免资源耗尽和浪费。通过合理配置 Resource Quota,可以优化资源分配,降低成本,并确保系统的稳定运行。
-
HPA和VPA的区别
HPA:调整POD副本数量
VPA:调整CPU和内存
- K8S的网络策略
Network Policies 是 Kubernetes 中用于定义 Pod 之间网络访问规则的机制。通过限制入站和出站流量,可以实现网络隔离和流量控制,提高集群的安全性和稳定性。通过合理配置 Network Policies,可以保护服务免受未经授权的访问和恶意流量的影响。
- K8S如何处理状态化应用?
-
稳定的网络标识符:每个 Pod 都有一个唯一的、稳定的网络标识符,POD重启不变(如
web-0
、web-1
) -
持久化存储:每个 Pod 都有自己的持久化存储卷(PersistentVolume),确保数据不会丢失,POD重启不受影响;
-
有序的部署和扩展:Pod 按顺序创建和删除,确保数据一致性;
- 简述K8S如何将一个POD调度到一个节点上的。
调度器的决策基于资源可用性、节点选择器、亲和性规则、污点与容忍等因素。通过合理配置调度策略,可以优化集群的资源利用率和应用性能。
- K8S的亲和性和反亲和性
-
Pod 亲和性:确保 Pod 与特定的 Pod 或节点一起运行,用于提高性能或满足特定部署需求。
-
Pod 反亲和性:确保 Pod 不与特定的 Pod 或节点一起运行,用于提高高可用性和避免资源争抢。
通过合理配置亲和性和反亲和性规则,可以优化 Pod 的调度策略,满足不同的部署需求和性能要求。
- K8S中如何处理POD的健康检查
通过合理配置 Liveness 和 Readiness 探针,可以确保 Kubernetes 集群中的应用保持健康状态,提高系统的可靠性和可用性。Liveness探针检测失败,会重启POD,Readiness探针检测失败,不会放流量到POD。