k8s的组件

本文深入剖析Kubernetes(K8S)架构,详细介绍了Master组件、Node组件及其关键子组件的功能,如APIServer、etcd、ControllerManager、Scheduler、Kubelet、ContainerRuntime和Kube-proxy。同时,探讨了核心附件组件的作用,包括KubeDNS、Dashboard、Heapster和IngressController。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Master组件

1、API Server
K8S对外的唯一接口,提供HTTP/HTTPS RESTful API,即kubernetes API。所有的请求都需要经过这个接口进行通信。主要负责接收、校验并响应所有的REST请求,结果状态被持久存储在etcd当中,所有资源增删改查的唯一入口。
 
2、etcd
负责保存k8s 集群的配置信息和各种资源的状态信息,当数据发生变化时,etcd会快速地通知k8s相关组件。etcd是一个独立的服务组件,并不隶属于K8S集群。生产环境当中etcd应该以集群方式运行,以确保服务的可用性。
 
etcd不仅仅用于提供键值数据存储,而且还为其提供了监听(watch)机制,用于监听和推送变更。在K8S集群系统中,etcd的键值发生变化会通知倒API Server,并由其通过watch API向客户端输出。
 
3、Controller Manager
负责管理集群各种资源,保证资源处于预期的状态。Controller Manager由多种controller组成,包括replication controller、endpoints controller、namespace controller、serviceaccounts controller等 。由控制器完成的主要功能主要包括生命周期功能和API业务逻辑,具体如下:
 
生命周期功能:包括Namespace创建和生命周期、Event垃圾回收、Pod终止相关的垃圾回收、级联垃圾回收及Node垃圾回收等。
API业务逻辑:例如,由ReplicaSet执行的Pod扩展等。
4、调度器(Schedule)
资源调度,负责决定将Pod放到哪个Node上运行。Scheduler在调度时会对集群的结构进行分析,当前各个节点的负载,以及应用对高可用、性能等方面的需求。
 
2、Node组件
Node主要负责提供容器的各种依赖环境,并接受Master管理。每个Node有以下几个组件构成。
 
1、Kubelet
kubelet是node的agent,当Scheduler确定在某个Node上运行Pod后,会将Pod的具体配置信息(image、volume等)发送给该节点的kubelet,kubelet会根据这些信息创建和运行容器,并向master报告运行状态。
 
2、Container Runtime
每个Node都需要提供一个容器运行时(Container Runtime)环境,它负责下载镜像并运行容器。目前K8S支持的容器运行环境至少包括Docker、RKT、cri-o、Fraki等。
 
3、Kube-proxy
service在逻辑上代表了后端的多个Pod,外借通过service访问Pod。service接收到请求就需要kube-proxy完成转发到Pod的。每个Node都会运行kube-proxy服务,负责将访问的service的TCP/UDP数据流转发到后端的容器,如果有多个副本,kube-proxy会实现负载均衡,有2种方式:LVS或者Iptables
 
3、核心附件
K8S集群还依赖一组附件组件,通常是由第三方提供的特定应用程序。
 
1、KubeDNS
在K8S集群中调度并运行提供DNS服务的Pod,同一集群内的其他Pod可以使用该DNS服务来解决主机名。K8S自1.11版本开始默认使用CoreDNS项目来为集群提供服务注册和服务发现的动态名称解析服务。
 
2、Dashboard
K8S集群的全部功能都要基于Web的UI,来管理集群中的应用和集群自身。
 
3、Heapster
容器和节点的性能监控与分析系统,它收集并解析多种指标数据,如资源利用率、生命周期时间,在最新的版本当中,其主要功能逐渐由Prometheus结合其他的组件进行代替。
 
4、Ingress Controller
Service是一种工作于4层的负载均衡器,而Ingress是在应用层实现的HTTP(S)的负载均衡。不过,Ingress资源自身并不能进行流量的穿透,,它仅仅是一组路由规则的集合,这些规则需要通过Ingress控制器(Ingress Controller)发挥作用。目前该功能项目大概有:Nginx-ingress、Traefik、Envoy和HAproxy等。
 

转载于:https://www.cnblogs.com/muzinan110/p/11105802.html

### Kubernetes 组件列表及功能介绍 #### kube-apiserver `kube-apiserver` 是 Kubernetes 的核心组件之一,提供了一个 RESTful 接口用于定义集群的状态以及操作资源对象。它是整个系统的控制入口,所有的管理命令都会通过该接口传递给其他模块执行[^2]。 #### etcd 作为分布式键值存储系统,etcd 存储了所有集群数据的配置信息、状态以及其他元数据。Kubernetes 使用 etcd 来保存持久化的集群信息,并依赖其高可靠性和一致性来保障集群稳定运行[^4]。 #### kube-scheduler 调度器 `kube-scheduler` 负责跟踪节点上的资源使用情况并将新创建的 Pod 分配到合适的 Node 上运行。它会考虑多种因素如资源需求、亲和性/反亲和性规则等来进行最优分配决策[^3]。 #### kube-controller-manager 控制器管理器 `kube-controller-manager` 运行着一组不同的进程化控制器实例,它们共同协作以维持期望的目标状态。例如 ReplicaSet 控制器确保指定数量的 pod 副本始终处于健康状态;Node Controller 则负责检测并响应 node 加入或退出事件等等。 #### cloud-controller-manager (可选) 当 Kubernetes 部署于公有云环境时,则需要用到此特定版本的服务发现机制——cloud-provider-specific controllers 。这些扩展允许集成来自不同供应商的功能特性比如自动伸缩组支持或者动态卷供应等功能。 #### kubelet 每个计算节点上都存在一个 agent —— `kubelet`, 它定期向 apiserver 报告本地状况的同时也接收指令完成相应任务(启动停止容器)。此外还承担起了 cgroup 设置, 文件系统挂载等工作职责[^1]。 #### kube-proxy 正如所提到过的那样,kube-proxy 实现了 k8s service 层面的网络代理与负载均衡能力。具体来说就是通过 iptables 或 ipvs 等工具构建起一套复杂的 NAT 规则集从而让外部访问能够正确路由至内部实际承载业务逻辑的工作负载之上。 #### Container Runtime Interface(CRI)-compatible runtime(such as Docker,Moby,CRI-O etc.) 虽然不是严格意义上的 “component”,但是容器运行时却是不可或缺的一部分因为它真正实现了镜像拉取,容器启停等一系列底层动作。 #### Flannel (or other CNI plugins) Flannel 提供了一种简单易用的方法用来设置跨主机通信所需的二层网络平面。对于多台机器组成的 K8S cluster而言尤其重要因为只有这样才能保证即使分布在不同物理位置上的 pods之间也可以无障碍互访. ```python # Example of a simple Python script interacting with Kubernetes API using official client library. from kubernetes import client, config def list_all_pods(): try: # Load the kubeconfig file to connect securely against your cluster's api-server endpoint. config.load_kube_config() v1 = client.CoreV1Api() print("Listing pods with their IPs:") ret = v1.list_pod_for_all_namespaces(watch=False) for i in ret.items: print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name)) except Exception as e: print(f'An error occurred while listing pods: {str(e)}') if __name__ == '__main__': list_all_pods() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值