当前位置:   article > 正文

Kubernetes基础篇-01- Kubernetes的发展史以及架构说明_kubernetes历史版本

kubernetes历史版本

1. 发展史

在云计算领域有几个很常见的词汇:IaaS、PaaS、SaaS。

  • IaaS就是基础平台即服务,国内有阿里云等;
  • PaaS是平台即服务,在早些时候新浪云SAE较为有名;
  • SaaS就是软件即服务,最大的Office厂商MS的Office365就是一个很好的代表。

在最开始的时候PaaS基本就是人肉运维,慢慢的又出现了一系列的自动化工具,再后来专门做PaaS的一家公司创造了Docker。

Docker变成了PaaS的一个标准,但是随着容器化的发展也出现了一系列的问题。容器化后容器的映射关系变得异常艰难,而且这仅仅是容器化发展的一个小小的问题。

那么随着容器化的步伐,衍生出了一些列的资源管理器,最开始是Apache Mesos,Mesos由加州的伯克利大学研发出来,随后被推特选中,大规模的在推特盛行。
在2019年5月,特推在旧金山开展了技术发布会,在该会上产品负责人宣布推特以后全部使用Kubernetes。
第二款资源管理软件是Docker自家推出的Docker Swarm平台。

Docker Swarm是一个非常轻量的资源管理平台。但是Swarm功能较为简单,而且国内云厂商阿里云在2019年7月宣布在选择资源管理框架的时候不支持Swarm,默认Kubernetes。Google其实在Kubernetes诞生10年前就使用了容器化基础架构Borg

Google为了在资源管理器上占有优势,就使用Golang开发了Kubernetes

2. 架构图对比

2.1 Borg的架构图

在这里插入图片描述

2.2 Kubernetes的架构图

在这里插入图片描述

  • etcd:提供分布式数据存储的数据库吧,用于持久化存储k8s集群的配置和状态

  • kube-apiserver:api service提供了http rest接口,是整个集群的入口,K8s其它组件之间不直接通信,而是通过API server通信的。(只有API server连接了etcd,即其它组件更新K8s集群的状态时,只能通过API server读写etcd中的数据)

  • kube-scheduler:scheduler负责资源的调度

  • kube-controller-manager:整个集群的管理控制中心,此组件里面是由多个控制器组成的

  • node机器组件:

    • kube-proxy:用来负载均衡网络流量

    • kubelet:用来管理node节点机上的容器

    • docker:运行项目镜像容器的组件

  1. etcd是一个可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转;同时,etcd是采用go语言编写的kv键值对数据库,它分为两个版本,V3版本和V2版本,在KubernetesV1.11版本以及之前采用的是V2版本,之后采用的是V3版本,V2版本会将所有数据写入内存,而V3版本会引入一个本地数据卷存储,也就意味着关机不会丢失数据,可以从本地磁盘恢复;

  2. APIServer 所有服务访问的统一入口。

  3. Replication Controller 负责维持期望的副本数目。

  4. Scheduler 负责接收任务,选择合适的节点进行任务的分配。

  5. Kubelet 负责与Docker的容器引擎交互,实现容器的生命周期管理。

  6. Kube Proxy 负责写入规则到 iptables 或者 ipvs 实现服务映射访问。

  7. 其他插件:
    7.1 . CoreDNS 可以为集群中的SVC创建一个域名为IP的对应关系解析;
    7.2 Dashborad 给K8S集群提供一个B/S访问体系。
    7.3 Ingress Controller 实现七层代理,Kubernetes官方只能实现四层代理。
    7.4 Fedetation提供一个可以跨集群中心的多Kubernetes统一管理功能。
    7.5 PrometheusELK提供Kubernetes集群监控和日志统一分析接入平台。

在这里插入图片描述

etcd内部结构是采用Http协议构建的服务,其实K8s也是采用Http协议进行的cs结构开发;
为什么这样做呢?
是因为Http协议天生支持get,put等操作方式,包括授权认证,所以没必须去采用标准的tcp协议;
raft是一些读写信息,为了防止这些信息被损坏,于是有了WAL,这是入写日志,也就是如果你想对里面的数据进行更改的话,你先生成一个日志,我先存一下,并且会定时的对这些日志进行完整备份,也就完整加临时,备份完之后会出现一个两个等子版本,到达一定量再转换成大版本,然后再子子子,这样的好处是防止增量备份太多,太费事费时,并且还会实时的将这些日志和数据写入磁盘持久化

3. 总结

  1. MESOS Apache旗下的分布式资源管理框架,在2019年5月,由它的最大使用者Twitter在旧金山技术发布会上宣布不再使用,改使用Kubernetes;
  2. Docker Swarm 为docker而生的资源管理器,但是在2019年7月阿里云宣布,Docker Swarm的集群框架从阿里云选项剔除,默认Kubernetes;
  3. Borg为谷歌内部使用十多年,但是不开源,于是让公司几名工程师,使用go语言,将Borg翻写出了Kubernetes,为外界使用;
  4. 选择使用Kubernetes的理由
  • 轻量级 ;
    像java等,是解释型语言,运行的时候占用内存大,占用资源大,而go语言被誉为现代的C语言,占用资源小,可以操作进程管理
  • 开源;
  • 弹性伸缩;
  • 负载均衡 : IPVS
  1. 高可用集群副本数据最好是 大于等于3的奇数个
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/841383
推荐阅读
相关标签
  

闽ICP备14008679号