一. Kubernetes 简介
1. 简介
kubernetes是谷歌开源的容器集群管理系统,是google多年大规模容器管理技术Borg的开源版本,主要功能包括:
- 基于容器的应用部署、维护和滚动升级
- 负载均衡和服务发现
- 跨机器和跨地区的集群调度
- 自动伸缩
- 无状态服务和有状态服务
- 插件机制保证扩展性
2. Kubernetes主节点(Master Node)
- API Server: 这是Kubernetes控制面板中唯一带有用户可访问API以及用户可交互的组件。API服务器会暴露一个Restful的API并使用JSON清单文件(manifest files)
- Cluster Data Store: etcd, 这是一个强大、稳定、高可用的键值存储,被Kubernetes用于长久存储所有的API对象
- Controller Manager: 它运行着所有处理集群日常任务的控制器。包括了节点控制、副本控制器、端点控制器以及服务账户等
- Scheduler: 调度器会监控新建pods(一组或者一个容器)并将其分配给节点
etcd
etcd是CoreOS基于Raft开发的分布式key-value存储,用于服务发现、共享配置以及一致性保证(如数据库选主、分布式锁)
- 基本的key-value存储
- 监听机制
- key的过期和续约机制,用于监控和服务发现
- 原子CAS和CAD, 用于分布式锁和leader选举
API server
Kube-APIServer是Kubernetes最重要的核心组件之一,主要提供一下功能:
- 提供集群管理的RESTFUL API接口:认证Authentication、授权Authentication、准入Admission(Mutating & Valiating)
- 提供其他模块之间的数据交互和通讯枢纽(其他模块通过APIServer查询或者修改数据,只有APIServer才直接操作etcd)
- APIServer提供etcd数据缓存减少集群对etcd的访问
Auditing: 记录审计日志
Controller Manager
controller Manager是集群的大脑,是确保整个集群动起来的关键。
作用是确保kubernetes遵循声明式系统规范,确保系统的真实状态与用户定义的期望状态一致。
controler Manager是多个控制器的组合,每个Controller事实都是一个control loop, 负责监听其管控的对象,当对象发生变更时完成配置。
controller配置失败通常会出发自动重试,整个集群会在控制器不断重试的机制下确保最终一致性。
Scheduler
特殊的controller, 工作原理和其他控制器没有差别。
Scheduler的特殊职责在于监控当前集群所有未调度的pod, 并且获取当前集群所有节点的健康状况和资源使用情况,为待调度pod选择最佳计算节点,完成调度。
调度阶段分为: predict过滤不能满足业务需求的节点,如资源不足、端口冲突等;Priority按既定要素将满足调度需求的节点评分,选择最佳节点; Bind将计算阶段和pod绑定完成调度。
3. Kubelet
Kubelet是kubernetes初始化系统,它主要负责对于当前节点的资源信息和健康状态上报;负责pod的健康检查和状态汇报; 从不同源获取不同pod清单(可以从本地目录,给的的HTTPServer或者API-Server等源头获取),并按需启动不同的pod组件,并且运行时会把网络和存储资源抽象成CRI/CNI/CSI【CRI(Container Runtime Interface):容器运行时接口,提供计算资源;CNI(Container Network Interface):容器网络接口,提供网络资源;CSI(Container Storage Interface):容器存储接口,提供存储资源】。
4. Kube-proxy监控集群中用户发布的服务,并完成负载均衡配置。节点之间的Kube-proxy都会配置相同的负载均衡策略,使得整个集群的服务发现建立在分布式负载均衡器上,服务调用无需经过额外的网络调转。
5. 推荐的Add-ons
• kube-dns:负责为整个集群提供 DNS 服务
• Ingress Controller:为服务提供外网入口
• MetricsServer:提供资源监控
• Dashboard:提供 GUI
• Federation:提供跨可用区的集群
• Fluentd-Elasticsearch:提供集群日志采集、存储与查询
二. Kubernetes的架构
1. 整体架构
2. Master架构
3. Node架构
4. 分层架构
- 核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)、Service Mesh(部分位于应用层)
- 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)、Service Mesh(部分位于管理层)
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴