1、Kubernetes 的发展历史
1.1、前提
Infrastructure as a Service:基础设施即服务
目前阿里、腾讯、百度、华为主要的云计算方向为外部提供服务的对象,主要以此类服务为主,
以 OpenStack 为底层框架进行二次开发;
OpenStack:
比较复杂,是由十几个不同社区的开发的框架组合在一起协同工作。
platform as a service:平台即服务
底层可以为 Iaas 也可以为物理机。
“敏捷市场的到来”--(边瞄准边开枪)
目前代表的有 Docker 和 Kubernetes。
优点:
学习成本比较低,
部署简单,
Software as a Service:软件即服务
偏向于开发,但底层仍然是基于 PaaS 的。
1.2、发展历程
Docker Swarm
Docker 官方推出的部署集群化容器的管理方案,需要通过下载去部署,可以实现容器的跨物理机的访问,
优点:适用简单(适用中小型企业)
2018年底,国内的云计算公司宣告不再为 Docker Swarm 提供服务,导致国内的中小型企业开始弃用 Docker Swarm
集群化容器管理工具。最终退出历史的舞台。
Apache Mesos
Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。Mesos最初是由加州大学伯克利分校的
AMPLab开发的,后在Twitter得到广泛使用。
主要使用公司:Twitter Marathon
2019 年 美国西部时间 5 月 2 日下午 7 点,Twitter 公司在旧金山总部举行了一次技术发布会兼 Meetup。会上,
Twitter 计算平台(Twitter Computing Platform)产品与技术负责人 David McLaughlin 正式宣布,Twitter
的基础设施将从 Mesos 全面转向 Kubernetes,导致 Mesos 最终退出历史舞台。
Kubernetes
Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单
并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
迭代其他软件的原因:
①、Kubernetes 足够复杂;可以实现多功能,满足更多企业的需求;
②、Kubernetes 是由 Borg 系统重构出,继承了 Borg 各种优点;
Borg 是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg 的目的是让用户能够不必
但心资源管理的问题,让他们专注于自己的核心业务,并且做到跨多个数据中心的资源利用率最大化。
CNCF(Cloud Native Computing Foundation)云原生基金会
BrogMaster:一般为奇数个节点,(有利于投票选举);一般为 5 个节点。
交互方式:Borgcfg、command-linetools、web browsers(UI界面)
Paxos:谷歌内部开发的键值对存储数据库,用于存储集群配置信息。
Borglet:负责博格系统和容器化交互的方式,(真正运行任务)
2、Kubernetes
2.1、Kubernetes 的优势
①、轻量级
在功能一致的情况下与 Apache Mesos 相比较而言比较轻量。
②、开源
开放源代码,便于软件的二次开发并推广使用。采用 Apache 的开源协议。
③、弹性伸缩
物理节点:以轻快的方式,只使用一条命令就可以加入一个集群,
④、负载均衡
通过 IPvs 的方案,将多个不同的容器共享给用户,暴露了接口,运行使用 F5 进行负载调度。
⑤、以Google为背景
以 Google 为强大的背景,以博格系统为支持,Google 为行业的领导地位。
2.2、Kubernetes 的组件说明
Master 节点:一般为奇数个(当主节点故障时,便于竞选)
Node 节点:Node 节点故障直接将任务分配至其他节点,或者重新创建新的节点,
一般为 xx 个核心,xx G内存 XX G/T的磁盘容量,xx 处理量的 GPU 资源。
2.3、Kubernetes 的架构
2.3.1、Kubernetes 组件
①、API (Application Programming Interface)Server:应用程序编程接口服务
所用处理用户请求的接入方,其核心是 HTTP 协议的 web 服务器,使用 HTTP 协议的 C/S 结构开发,resetful。
采用了双向 HTTP 认证(银行卡),
作为 Kubernetes 系统的入口,其封装了核心对象的增删改查操作,以 RESTful API 接口方式提供给外部客户
和内部组件调用。维护的 REST 对象持久化到 Etcd 中存储
RESTFUL:
所有请求的总入口----此后的安全设计均以此为基础,
②、kubectl:用户的命令行管理工具,
③、web UI :通过 B/S 结构,控制访问 Kubernetes 集群,图形化界面
④、scheduler:调度任务
新建立的 Pod 进行节点 (node) 选择(即分配机器),负责集群的资源调度。组件抽离,可以方便替换成其他调度器
⑤、replication controller:副本控制器,管理容器的期望值
负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
⑥、node:工作节点
a、Kubelet:跟内部 CRI(Container Runtime Interface)接口进行交互,跟外部的 API server 进行交互。
Docker 和 Kubernetes 之间的对接者。
负责维护容器的生命周期,同时也负责 Volume(CSI)和网络(CNI)的管理;
b、Kube proxy:通过 Network 接口跟 IPVS iptables 进行交互,创建和删除实现负载均衡功能,将Pod 暴露给外界。
负责为 Service 提供 cluster 内部的服务发现和负载均衡
c、Pod:内置 Docker ,以附件的方案加入到 kubernetes 中。
⑦、etcd:存储集群的配置信息
etcd 是基于 raft 算法的分布式键值数据库,etcd集群一般推荐奇数节点.
由 Core OS 公司开发的开源软件,该公司和 Docker 公司为表面兄弟公司,但后面由于发展不一致,转型做 Docker
所需要的的组件。
etcd 的官方将它定位成一个可信赖【高可用】的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助
分布式集群的正常运转。【配置信息】
Raft算法: 从一开始就被设计成一个易于理解和实现的共识算法。每一个 Raft 集群中都包含多个服务器,在任意时刻,每一台服务器只可能处于 Leader、Follower 以及 Candidate(竞选) 三种状态;在处于正常的状态时,集群中只会存在一个 Leader,其余的服务器都是 Follower。
优点:不需要在双方做任何配置就可以将数据进行共享,再一个物理局域网中。
缺点:资源消耗高,一个对象有可能会接受多次同一个对象。
注意事项:
a、Etcd 的存储引擎在 V2 版本中是 Memory(内存) ,V3 版本中是 Database (硬盘)
b、推荐在 Kubernetes 集群中使用 Etcd v3,v2 版本已在 Kubernetes v1.11 中弃用
Etcd 的架构:
使用 HTTPS 协议 进行 C/S 结构进行开发,OpenStack 使用此架构开发。
Raft :病毒算法(最终一致算法)
WAL:预写入日志,现将输入信息写入日志,再修改磁盘信息,
2.3.2、Kubernetes 插件
①、CoreDNS
为集群内部提供一个私有化的 DNS 服务器(负责整个集群的DNS 服务)
②、Ingress Controller
为 Kubernetes 中的服务提供外网入口(七层的调度管理[可以识别域名])
实现方式:ingress-xxx
③、Prometheus
为整个集群提供资源监控能力(可以自动发现容器)
④、Dashboard
提供 B/S 的访问体系,允许用户通过 web 进行集群管理及设置,由Kubernetes官方开发
⑤、Federation
提供跨可用区的集群,提供不同数据中心的 Kubernetes 集群的管理能力。可以使用一条命令管理不同区域的不同
的 Kubernetes 集群