Kubernetes各组件的功能
1.kubectl
kubectl是Kubernetes官方提供的命令行工具CLI,用户可以通过命令行的方式与Kubernetes API Server进行操作,通信协议使用HTTP/JSON。
2.client-go
client-go是从Kubernetes代码中抽离出来的包,作为官方提供的GO语言的客户端发挥作用。client-go简单、易用,Kubernetes系统的其他组件与Kubernetes API Server通信的方式也是基于client-go实现。
3.kube-apiserver
它负责Kubernetes"资源组/资源版本/资源"以RESTful风格的形式对外暴露并提供服务。kube-apiserver组件也是集群中唯一与Etcd集群进行交互的核心组件。Kubernetes将所有的数据存储在Etcd集群中前缀为registry的目录下。
kube-apiserver的特性:
- 将Kubernetes系统中所有资源对象都封装成RESTful风格的API接口进行管理。
- 可进行集群状态管理和数据管理,是唯一与Etcd集群交互的组件。
- 拥有丰富的集群安全访问机制,以及认证,授权及准入控制器。
- 提供了集群各组件的通信和交互功能。
4.kube-controller-manager
它负责管理Kubernetes集群中的节点(Node),Pod副本,服务,端点(Endpoint),命名空间(Namespace),服务账户(ServiceAcconut),资源定额(ResourceQuota)等。
5.kube-scheduler
该组件是Kubernetes集群默认的调度器,它负责在Kubernetes集群中为一个Pod资源对象找到合适的节点并在该节点上运行。在调度的过程中每次只负责调度一个Pod资源对象。调度算法分为两种,分别为预选调度算法和优选调度算法。
6.kubelet
该组件运行在每个Kubernetes节点上,用于管理节点。kubelet组件用来接收、处理、上报kube-apiserver组件下发的任务。它主要负责所在节点上的Pod资源对象的管理,例如Pod资源对象的创建、修改、监控、删除、驱逐及Pod生命周期管理等。
kubelet组件会定期监控所在节点的资源使用状态并上报给kube-apiserver组件,这些资源数据可以帮助kube-scheduler调度器为Pod资源对象预选节点。kubelet也会对所在节点的镜像和容器做清理工作,保证节点上的镜像不会占满磁盘空间、删除的容器释放相关资源。
kubelet组件实现了3种开放接口:
- Container Runtime Interface:简称CRI(容器运行时接口)提供容器运行时通用插件接口服务。CRI定义了容器和镜像服务的接口。CRI将kubelet组件与容器运行时进行解耦,将原来完全面向Pod级别的内部接口拆分成面向Sandbox和Container的gRPC接口,并将镜像管理和容器管理分离给不同的服务。
- Container Network Interface:简称CNI(容器网络接口),提供网络通用插件接口服务。CNI定义了Kubernetes网络插件的基础,容器创建时通过CNI插件配置网络。
- Container Storage Interface:简称CSI(容器存储接口),提供存储通用插件接口服务。CSI定义了容器存储卷标准规范,容器创建时通过CSI插件配置存储卷。
7.kube-proxy
该组件运行在Kubernetes集群中每个节点上,作为节点上的网络代理。它监控kube-apiserver的服务和端点资源变化,并通过iptables/ipvs等配置负载均衡器,为一组Pod提供统一的TCP/UDP流量转发和负载均衡功能。但是kube-proxy组件与其他负载均衡服务的区别在于kube-proxy代理只想Kubernetes服务及其后端Pod发出请求。
Kubernetes Project Layout 设计
源码目录 | 说明 |
---|---|
cmd/ | 存放可执行文件的入口代码,每个可执行文件都会对应一个main函数 |
pkg/ | 存放核心库代码,可被项目内部或外部直接引用 |
vendor/ | 存放项目依赖的库代码,一般为第三方库代码 |
api/ | 存放OpenAPI/Swagger的spce文件,包括JSON、Protocol的定义等 |
build/ | 存放与构建相关的脚本 |
test/ | 存放测试工具及测试数据 |
docs/ | 存放设计或用户使用文档 |
hack/ | 存放与构建、测试等相关代码 |
third_party | 存放第三方工具、代码或者其他组件 |
plugin/ | 存放Kubernetes插件代码目录,例如认证、授权等相关插件 |
staging/ | 存放部分核心库的暂存目录 |
translations/ | 存放i18n(国际化)语言包的相关文件,可以在不修改内部代码的情况下支持不同语言及地区 |
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。