一、资源介绍
以下是常见的资源类型,如果想要了解更多的资源,可以通过kubectl api-resources查看资源列表,从而更深入的学习
1.1 Pod
Pod是能够创建和部署的最小单元,也是Kubernetes集群中的一个应用实例。它包含一个或多个容器,这些容器共享存储、网络等资源。Pod是部署的最小单元,一个pod相当于一个虚拟的主机,在这个Pod下的一组容器可以使用localhost互相访问。不同的Pod在同一个共享的网络空间下,可以使用pod的ip进行访问
1.2 Endpoint
Endpoint是一种资源对象,用于表示一个服务的网络终结点。它是一种抽象层,用于将服务的网络地址(IP地址和端口号)与后端容器或节点上的实际服务进行关联,从而实现服务的访问和负载均衡
1.3 Deployment
Deployment是一个用于描述应用程序如何部署到容器平台(如Kubernetes)上的配置文件。它包含了应用程序的镜像、容器数量、副本数、端口映射等配置信息,以及应用程序部署过程中所需的其他元数据
1.4 Service
主要目的是提供一个稳定的网络访问入口,用于外部客户端和集群内的其他资源访问运行在Pod中的应用程序。它使用Kubernetes的负载均衡器来路由流量到后端运行的Pod,并确保网络策略和安全设置得到执行
1.5 Headless Service
Kubernetes中的一种服务类型,它与普通的Service不同,普通的Service会分配一个虚拟的Cluster IP给服务,用于负载均衡请求到后端Pod。而Headless Service不会分配Cluster IP,而是直接返回对应Pod的IP地址,通常用于服务发现、集群内部通信、stateful应用等场景
1.6 Ingress
为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机等功能。它通常部署在所有的Node节点上,可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机等能力
二、组件介绍
2.1 核心组件
2.1.1 Api Server (统一认证鉴权组件,相当于网关)
ApiServer是指Kubernetes中的API Server组件,它是整个Kubernetes集群的核心组件之一;他提供了一个RESTful API接口,允许外部应用程序或用户通过HTTP请求与Kubernetes集群进行交互。它负责接收和处理来自客户端的请求,将请求数据转换为Kubernetes对象,并与其他组件通信以执行相应的操作
API Server的作用包括:
- 提供了Kubernetes集群的唯一入口点,允许客户端与集群进行通信
- 负责验证和授权请求,确保只有经过授权的用户才能执行特定的操作
- 负责API版本控制和资源扩展,支持多种资源类型,如Pods、Deployments、Services等
- 与etcd存储系统集成,存储和检索集群状态
- 与Controller Manager通信,执行资源的自动扩展、自动修复等任务
- 提供了API聚合功能,允许第三方实现自己的APIs并集成到Kubernetes API中
2.1.2 ETCD(配置中心、服务发现)
是一个用于实现分布式一致性的开源键值存储系统,它是Kubernetes集群中的重要组件之一;etcd用于存储Kubernetes集群的状态数据,并确保整个集群的状态保持一致
etcd的作用主要包括以下几点:
- 数据存储:etcd用于存储Kubernetes集群的状态数据,包括Pod、Service、Deployment等资源的配置信息。这些数据被保存在一个可靠的、持久化的存储系统中,以确保数据不会丢失
- 一致性保证:etcd使用Raft一致性算法来维护集群内各节点之间的数据一致性。通过这个算法,etcd确保任何时候集群内的所有节点都能够看到相同的数据状态,保证了Kubernetes集群的强一致性
- 分布式协调:etcd提供了一种可靠的分布式协调机制,允许Kubernetes中的各个组件通过读写操作来维护集群状态。组件之间可以通过读写etcd中的数据来同步状态,实现相互协作
- 服务发现:etcd可以用于服务发现,帮助Kubernetes中的容器找到其他容器的IP地址或端口号等信息。通过在etcd中存储服务的网络信息,可以实现自动化的服务发现和负载均衡等功能
2.1.3 Controller Manager(中间件)
通过监听Kubernetes API Server的事件,对资源进行实时的监控和操作;当某个资源发生状态变化时,Controller Manager会尝试将其调整为期望的状态
Controller Manager通常包括多个Controller,每个Controller针对特定的资源类型,负责执行相应的管理任务。例如,Node Controller负责监控集群中的节点状态,并根据需要重新调度Pod;Deployment Controller负责监控Deployment资源的状态,并根据需要自动扩缩容等
Controller Manager的作用还包括:
- 自动修复:当某个节点意外宕机时,Controller Manager会发现并执行自动化修复流程,重新调度以确保集群始终处于预期的工作状态
- 弹性伸缩:Controller Manager可以根据预设的策略自动扩缩容应用,以满足业务需求
- 滚动升级:通过Controller Manager可以实现Pod的滚动升级,逐步替换旧的Pod,以降低升级对业务的影响
- 服务发现和负载均衡:Controller Manager可以与其他服务发现工具集成,实现自动化的服务发现和负载均衡等功能
2.2 节点组件
2.2.1 Kubelet(节点控制器)
运行在每个节点上,负责处理本节点上Pod的生命周期管理。
Kubelet的主要职责包括:
- 接收并处理来自Kubernetes API Server的指令,管理Pod和其中的容器
- 定期向API Server汇报节点资源使用情况,并通过cAdvisor监控容器和节点资源
- 定期检查容器的状态,确保它们正常运行
- 执行容器的垃圾回收,包括每分钟对容器执行一次垃圾回收,每五分钟对镜像执行一次垃圾回收
- 负责与容器运行时交互,创建、启动、停止容器等任务
- 实现Node级别的工作负载调度,例如调度批量作业或周期性任务
- 实现节点级别的自修复功能,例如自动修复损坏的容器、自动重启失败的容器
2.2.2 kube-proxy(节点代理)
通过在每个节点上创建一个代理,来实现网络连接的转发和负载均衡;它使用iptables或ipvs来实现这些功能,根据集群的具体配置来选择合适的方式。
kube-proxy的作用包括:
- 服务发现:kube-proxy会定期从Kubernetes API Server中获取服务的最新信息,并根据这些信息创建路由规则。这样,当客户端请求某个服务时,kube-proxy可以根据这些规则将请求转发到正确的后端Pod
- 负载均衡:kube-proxy会根据预设的策略实现客户端请求的负载均衡,将请求分发到多个后端Pod上。这有助于提高服务的可用性和可扩展性
- 网络代理:kube-proxy充当网络代理的角色,对进入和离开节点的流量进行转发。通过这种方式,它能够实现服务之间的通信和访问控制
- 故障转移:当某个后端Pod出现故障时,kube-proxy能够感知到这一点,并将流量切换到其他可用的后端Pod上。这有助于提高服务的可用性和可靠性