一、Kubernetes是什么?
Kubernetes是一个完备的分布式系统支撑平台。Kubernetes具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。
二、Kubernetes集群架构
Master组件
- kube-apiserver
Kube-apiserver的核心功能是提供了Kubernetes各类资源对象(如Pod、RC、Service等)的增删改查及Watch等HTTPRest接口,成为集群内各个功能模块之间数据交互和通信的中心枢纽,是整个系统的数据总线和数据中心。除此以为,它还有以下一些功能特性:
- 是集群管理的API入口。
- 是资源配额控制入口。
- 提供了完整的集群安全机制。
- kube-controller-manager
ControllerManager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(EndPoint)、命名空间(NameSpace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)等的管理,当某个Node意外宕机,ControllerManager会及时发现此故障并执行自动化修复流程,确保集群始终处于预期的工作状态
- kube-scheduler
根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
- etcd
分布式,可靠的键值存储,可用于分布式系统中存储关键核心数据。从简单的应用程序到 Kubernetes 再到任何复杂性的应用程序都可以从 etcd 中读写数据。此处专用于保存集群相关的数据。
Node组件
- kubelet
kubelet是Master在Node节点上的agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
- kube-proxy
在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
- docker或rocker
容器引擎,运行容器
- Pod
kubernetes 中最小的部署单元;是一组容器的集合,每一个 pod 中的容器都是共享网络的;pod 的生命周期是短暂的,并非一直存在,会随着服务器的重新启动或者重新部署而更新。
三、Kubernetes的特点
- 自动装箱
这是 Kubernetes 最显着的特性之一,Kubernetes 根据所需资源和其他限制条件智能地定位容器,而不会影响可用性。
Kubernetes 提供资源管理,它可以自动指定 Pod 中的每个容器如何消耗 CPU 和 RAM 等资源。
- 负载发现和负载均衡
服务发现和负载均衡在 Kubernetes 中作为服务提供,服务以一致的方式跨集群将 Pod 连接到网络。确定如何连接到服务的过程称为服务发现。
容器的集合是 POD,具有相同功能集的 POD 被组合成一个集合,称为服务。每个 POD 将被分配一个 IP 地址和单个 DNS 名称用于服务(POD 集),借助这种架构,Kubernetes 将对 POD 之间的网络和通信进行明确定义的控制,并且可以实现负载平衡。
在组成单个服务的实例集合前放置负载均衡器(反向代理,如 Nginx 或 HAProxy)是解决服务发现问题的常用技术。
负载平衡器的地址(DNS 名称,或者通常情况下是 IP)是一个相当可靠的数据,它可以在开发或配置阶段提供给客户端,并且可以在单个客户端的生命周期中保持不变。之后,从客户端的角度来看,联系多实例服务与访问单个网络端点没有什么不同,换句话说,服务发现完全发生在服务器端。
- 存储编排
自动实现存储系统挂载及应用,对有状态的应用实现数据持久化,存储系统可以来自于本地目录、网络存储(NFS、ceph、Gluster 等)。
- 自愈
当容器启动失败时自动重启容器;当部署的 Node 节点出现问题时,会对容器进行重新部署和调度;当容器未通过监控检查时,会关闭此容器,直到容器正常运行才会对外提供服务。
- 自动推出和回滚
自动推出:
应用程序的更新称为rollout,这是在 Kubernetes 中使用滚动升级完成的。通过使用新的 Pod 实例逐步升级,滚动更新允许在零停机时间的情况下更新部署,新的 Pod 将被安排在有可用资源的节点上。
回滚:
当 Deployment 不稳定时,例如当它循环崩溃时,您可能需要回滚 Deployment。默认情况下,系统会保存所有 Deployment 的 rollout 历史,以便您可以随时回滚。
- Secret和配置映射
Secret:
Secret是一小段机密数据,例如密码、令牌或密钥。或者,此类信息可能包含在 Pod 规范或容器映像中。必须首先创建Secret,然后才能将其引入到 Pod 中,与其将机密数据放在容器图片或 Pod 定义中,不如将其保密更安全、更具适应性。
配置映射:
ConfigMap 是一个键值对存储,它是一个用于存储非机密数据的 API 对象,Pod 可以将 ConfigMap 用作环境变量、命令行参数或卷配置文件。它允许您将特定于环境的配置与容器映像分离,从而允许您简单地移植应用程序。ConfigMaps 的配置分为两个阶段,第一步是制作 ConfigMap,然后将它们注入到 pod 中。
- 水平缩放
伸缩性强,通过简单的命令、用户 UI 界面或 CPU 等资源使用情况,对应用容器进行规模扩大或缩减。
- 批处理
可提供一次性任务、定时任务,满足批量数据处理和分析。