Kubernetes 的由来
Docker 本身非常适合用于管理单个或少量容器,不过一旦开始越来越多的容器封装和运行应用程序。必将会导致其管理和编排变的越来越困难。最终,用户不得不对容器实施划分组提供:网络、安全、监控等服务,因此Kubernetes
代表的容器编排服务诞生。
概述
Kubernetes(简称k8s)是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了资源调度、部署管理、服务发现、扩容缩容、监控,维护等一整套功能。,努力成为跨主机集群的自动部署、扩展以及运行应用程序容器的平台。 它支持一系列容器工具, 包括不限于Docker、Containerd等。
- 自动装箱;基于容器之上,自动完成容器部署,并利用调度机制混合关键应用和非关键应用
- 自我修复;支持容器故障自动重启、节点故障重新调度容器
- 水平扩展;简单命令水平扩展集群负载能力
- 服务发现和负载均衡;集群内自带DNS,实现服务发现以及负载
- 自动发布和滚动;支持“灰度”“金丝雀”发布,监听容器健康滚动更新
- 秘钥和配置管理;提供ConfigMap实现配置数据与Docker解耦
- 存储编排;支持POD挂载不同类型的存储系统,包括本地存储、云厂商的云盘,以及网络存储NFS等
- 批量处理行;提供SDK自动化、批量化管理集群
概念
Kubernetes 使用共享网络将多个物理机或者虚拟机汇集到一个集群,在服务器之间进行通讯。
Master
Master 是网关和中枢,负责诸如为用户和客户端暴露API,跟踪其他服务器的健康状态、以最优的调度工作负载,以及编排其他组件之间的通讯等任务。
ApiServer
API Server 负责输出RESTful 风格的Kubernetes API,它是发往集群所有REST操作的命令接入点,并负责接受、校验并响应REST请求,结果状态被持久存储于etcd中。因此APIService 是整个集群的网关。
ETCD
etcd 是CoreOS 基于Raft 协议开发的分布式键值存储,用于服务发现、共享配置、以及一致性保障。
Controller Manager 控制器管理
集群级别大多数功能都是由几个控制器进程执行实现的,这几个进程被继承于
kube-controller-manager
守护进程中。
- 生命周期管理,例如:Event 垃圾回收,Pod终止的相关垃圾回收
- API 业务逻辑,例如:扩展
Scheduler
Scheduler根据集群内各个节点的可用资源状态,以及要运行的容器的资源需要做出调度决策。
Node
Node 是Kubernetes集群的工作节点,负责接收来自master节点的工作指令并根据指令相应的创建或销毁POD对象,以及调整网络规则以合理的路由和转发流量。
Kubelet
运行在工作节点之上的守护进程,他从APIService 接受关于Pod对象的配置信息并确保它们处于期望的状态, kubelet会在APIService 上注册当前工作节点,定期想Master汇报节点资源使用情况,并通过cAdvisor监控容器的节点的资源占用情况
kube-proxy
每个工作节点都运行一个kube-proxy 守护进程,它能够按需Service 资源对象生成Iptables或ipvs规则,从而捕获访问当前Service 的ClusterIP 的流量并将其转发至正确的后端Pod对象。
容器运行时
每个工作节点需要容器运行时,负责下载镜像并允许容器
核心组件
KubeDNS (DNS 服务)
负责集群中调度运行提供的DNS服务的Pod,同一集群中的其他Pod使用DNS解决主机名,Kubernetes 开始使用CoreDNS
Dashboard (控制台)
集群的Web UI 控制台,管理集群中的应用甚至是集群自身
Heapster (性能监控)
容器和节点的性能监控与分析系统,收集并解析多种指标数据,Kubernetes 已经提供 API 实时获取资源参数
Ingress Controller (负载均衡器)
Service 是一种传统负载均衡器,而Ingress是在应用层实现HTTP (S) 负载均衡机制
引用
《Kubernetes 进阶实战》 ——————- 马永亮
《Kubernetes 文档》 ————————- 阿里云