Kubernetes概述
文章目录Kubernetes概述资源管理器的诞生过程Kubernetes特性名词解释master节点名词解释nodes工作节点解释K8S分层架构分层介绍K8S和容器生态系统结构Kubernetes概述Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S.K8S用于容器化应用程序的部署,扩展和管理。K8S提供了容器编排,资源调度,弹性伸缩,部署管理
文章目录
Kubernetes概述
- Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S.
- K8S用于容器化应用程序的部署,扩展和管理。
- K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。
- Kubernetes目标是让部署容器化应用简单高效。
资源管理器的诞生过程
**开始: **MESOS+zookeeper+marathon构建
-
有了以上这些公有云之后,我们需要对其进行资源管理,那么此时就诞生了资源管理器:MESOS+zookeeper+marathon 构架
-
MESOS:Mesos是Apache旗下的开源分布式资源管理框架,它被称为是分布式系统的内核,后来在twitter得到广泛使用。
-
Twitter也是mesos的最大客户,但是大概在2019年5月份,Twitter 宣布不再使用MESOS,而改用 Kubernetes,至此,Mesos已经是慢慢的被淘汰了
**让后:**docker+swarm 容器群集管理
Docker+ Swarm,是一个非常轻量的群集管理工具,只有几十MB大小
-
Swarm 是 Docker官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。
-
但是Swarm 和 Kubernetes 比较类似,因为更加轻,所以具有的功能也较 kubernetes 更少一些。
-
大概在2019年7月份,阿里云宣布将Docker Swarm 从选择列表中剔除,这也意味着在不就得将来,Docker Swarm 也会像Mesos一样慢慢被淘汰掉
最后: Kubernetes,开源框架 二次开发
- Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能
- Kubernetes是Google 2014年创建管理的,是Google 10多年大规模容器管理技术Borg的开源版本
- Kubernetes的名字来自希腊语,意思是“舵手” 或 “领航员”,所以他的图标是这样的
Kubernetes特性
-
自现修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量,杀死健康检查失败的容器,并且在未准备好之前不会处理客户瑞请求,确保线上服务不中断 -
弹性伸缩
使用命令、U或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性﹔业务低峰时回收资源,以最小成本运行服务。 -
自动部署和回滚
K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。蓝/绿部署:在进行蓝/绿部署时,应用程序的一个新副本(绿)将与现有版本(蓝)一起部署。应用程序的入口/路由器以切换到新版本(绿)更新,现有版本(蓝)会提供服务知到新版本(绿)更新完毕。
金丝雀:金丝雀发布一般是先发1台机器,或者一个小比例,例如2%的服务器,主要做流量验证用,也称为金丝雀 (Canary) 测试,国内常称灰度测试。以前旷工下矿前,会先放一只金丝雀进去用于探测洞里是否有有毒气体,看金丝雀能否活下来,金丝雀发布由此得名。简单的金丝雀测试一般通过手工测试验证,复杂的金丝雀测试需要比较完善的监控基础设施配合,通过监控指标反馈,观察金丝雀的健康状况,作为后续发布或回退的依据。如果金丝测试通过,则把剩余的 V1 版本全部升级为 V2 版本。如果金丝雀测试失败,则直接回退金丝雀,发布失败。
-
服务发现和稳载均衡
K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负裁均衡关联的所有容器,使得用户无需考虑容器IP问题。 -
机密和配置管理
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在KBS中,方便应用程序使用. -
存储编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、GlusterFS.Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。 -
批处理
是供一次性任务,定时任务:洞足批量数据处理和分析的场景。
kubernetes群集架构与组件图
名词解释
master节点名词解释
-
kubelet::
- 在每个节点(node)上都要运行一个 worker 对容器进行生命周期的管理
- kubelet的主要功能就是定时从某个地方获取节点上 pod/container 的期望状态
- kubelet 还有一个重要的责任,就是监控所在节点的资源使用情况,并定时向 master 报告。
- 知道整个集群所有节点的资源情况,对于 pod 的调度和正常运行至关重要
-
API Service:
- 具备管理机制,任务分配机制,APIServer负责对外提供RESTful的Kubernetes API服务
- 它是系统管理指令的统一入口
- 任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd
-
Controller Manager:
- 作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号 (ServiceAccount)、资源定额(ResourceQuota)的管理
- 当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
- 如果说APIServer做的是“前台”的工作的话,那controller manager就是负责“后台”的。
- 每个资源一般都对应有一个控制器,而controller manager就是负责管理这些控制器的。比如我们通过APIServer创建一个pod,当这个pod创建成功后,APIServer的任务就算完成了。而后面保证Pod的状态始终和我们预期的一样的重任就由controller manager去保证了。
-
Scheduler:
- scheduler的职责很明确,就是负责调度pod到合适的Node上。
- 如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是Pod和一个Node的绑定,即将这个pod部署到这个Node上。
- Kubernetes目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。
-
ETCD:
- etcd是一个高可用的键值存储系统,Kubernetes使用它来存储各个资源的状态,从而实现了Restful的API。
nodes工作节点解释
-
kubelet:
-
kubelet的主要功能就是定时从某个地方获取节点上 pod/container 的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态(就像代理服务组件,取代了master执行任务)。
-
在每个节点(node)上都要运行一个 worker 对容器进行生命周期的管理,这个 worker 程序就是kubelet。
-
kubelet 还要查看容器是否正常运行,如果容器运行出错,就要根据设置的重启策略进行处理。
-
kubelet 还有一个重要的责任,就是监控所在节点的资源使用情况,并定时向 master 报告。知道整个集群所有节点的资源情况,对于 pod 的调度和正常运行至关重要。
-
-
kube-proxy:
- 每个节点(node)都有一个组件kube-proxy,实际上是为service服务的(接待客户请求)
- 通过kube-proxy,实现流量从service到pod的转发,它负责TCP和UDP数据包的网络路由,kube-proxy也可以实现简单的负载均衡功能。其实就是管理service的访问入口。
-
Node:
- Node是Kubernetes中的工作节点,最开始被称为minion。
- 一个Node可以是VM或物理机。每个Node(节点)具有运行pod的一些必要服务,并由Master组件进行管理,Node节点上的服务包括Docker、kubelet和kube-proxy。目前Kubernetes支持docker和rkt两种容器
通过下边这个图可以更清晰的看出来node和pod的关系
Kubernetes核心概念
pod:
-
Pod是Kubernetes创建或部署的最小/最简单的基本单位
-
一个Pod封装一个应用容器(也可以有多个容器)
-
它可能由单个容器或多个容器共享组成的资源
-
pod是短暂的
pod和container关系
Controllers:
-
ReplicaSet :确保预期的Pod副本数量
-
Deployment:无状态应用部署
-
StatefulSet:有状态应用部署
-
DaemonSet :确保所有Node运行同一个Pod
-
Job :—次性任务
-
Cronjob:定时任务
-
更高级层次对象,部署和管理Pod
Node Controller:
- 负责发现、管理和监控集群中的各个Node节点。
- ReplicaSet:确保预期的Pod副本数量
- Deployment:无状态应用部署
- StatefulSet:有状态应用部署
- DaemonSet:确保所有Node运行同一个Pod
- Job:一次性任务
- Cronjob:定时任务
servers:
-
防止pod失恋
-
定义一组pod的访问策略
Label: 标签,附加到某个资源上,用于关联对象,查询和筛选
Namespace:命名空间,
简单架构图片,将对象逻辑上隔离
Flannel容器集群网络部署
- Overlay Networkr覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过遨拟链路连接起来。
- VXLAN将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道点解封敬并将数据发送给目
标地址。 - Flannel:是Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通倍,目前已经支持UDP、VXLAN、AWSVPC和CE路由等数据转发方
式.
VXLAN图片解释
俩个docker要互通需要先封装一个逻辑地址,然后在封装一个物理地址
先封装flannel地址然后在封装一个物理地址
数据转发过程
K8S分层架构
分层介绍
- 核心层:是Kubernetes最核心的层面,对外提供API构建高层的应用,对内提供插件式应用执行环境;
- 应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等);
- 管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等);
- 接口层:kubectl命令行工具、客户端SDK以及集群联邦;
- 生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴:
- Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等;
- Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等;
K8S和容器生态系统结构
更多推荐
所有评论(0)