容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

##开篇
最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一块儿总结了。算是对这两年作容器云平台的一个总结,本文是开篇,先介绍下全部用到的组件。首先来看下架构图(实在画的太丑,求推荐工具)
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台nginx

如图,容器平台主要涉及的组件有:git

##正所谓开局一张图,后面全靠编,哈哈,开干。。。github

首先,介绍Docker,废话很少说,先上图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台
###docker是什么?
根据官网的介绍,容器是把代码及其全部依赖打包的一个标准单元,你能够把这个程序从一个环境快速可靠的转移到另一个环境。Docker镜像是一个轻量级的,独立的,可执行的软件包,其中就包含了运行程序所须要的一切。算法

说白了就是把应用程序及其依赖打包到一个文件里,运行这个文件,就会生成一个虚拟容器。程序在里面运行就跟在物理机或者虚拟机上同样。~~~真拗口docker

###docker的用途数据库

  1. 简化配置
  2. 代码流水线管理
  3. 提升开发效率
  4. 隔离应用
  5. 整合服务器
  6. 快速部署
  7. 提供一致性环境
  8. 提供弹性服务

###docker的缺点以及为何用kubernetes
docker容器的轻量化,意味着在等量资源的基础上能建立出更多的容器实例。可是在面对分布在多台主机上且拥有数量不少容器(成百上千)的大规模应用程序时,传统的单机容器管理解决方案就会变得力不从心。另外,因为微服务愈来愈完善的原生支持,在一个容器集群中的容器粒度愈来愈小,数量愈来愈多。在这种状况下,都须要借助容器管理平台,从而实现调度,负载均衡以及任务分配等。apache

容器集群管理工具能在一组服务器上管理多容器组合成的应用,每一个应用集群在容器编排工具看来是一个部署或管理实体,容器集群管理工具全方位为应用集群实现自动化,包括应用实例部署、应用更新、健康检查、弹性伸缩、自动容错等等。哈哈,好巧不巧,Kubernetes就提供了这些功能,这就是为何咱们要用Kubernetes的缘由。缓存


###Kubernetes是什么?
Kubernetes:Google 开源的容器管理系统,起源于Borg 系统。用于自动部署,扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。安全

Kubernetes架构图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台服务器

###Kubernetes的用途

  1. 服务发现与负载均衡
  2. 自我修复
  3. 自动化上线和回滚
  4. 配置管理
  5. 存储编排
  6. 批量执行
  7. Service拓扑
  8. 断点切片
  9. 自动装箱
  10. 水平扩缩
  11. 双协议栈

###Kubernetes的挑战
做为整个平台的核心,Kubernetes的功能强大,可是就其自己架构而言,学习成本不低。

  1. kubernetes概念太多,可能一个月也没法入门,甚至连集群都搭建不出来。
  2. 学习kubernetes对运维的技术能力要求比较高,和传统的运维有必定差别,须要有修改代码的能力。
  3. kubernetes的诞生,把运维从传统转向devops,须要面临的新技术不少。
  4. 可是当你掌握到了k8s的核心使用,就会受益不浅。

###镜像仓库docker-registry & harbor
仓库,顾名思义,就是存放东西的地方,docker-registry,理所固然,就是存放docker镜像(image)的地方了。docker的仓库有公有仓库和私有仓库。共有仓库好比hub.docker.com,gcr.io,k8s.gcr.io等,通常下载速度比较慢,尤为k8s相关的镜像,得魔法上网。私有仓库通常是公司内部自行搭建,用于存放内部构建的docker镜像,部署服务时从私有仓库下载,速度很快。
harbor就是一个用于存储docker镜像的企业级Registry服务。相比较于原生的Regisrty来讲,它具备不少的优点。

  • 提供分层传输机制,优化网络传输
  • 提供WEB界面,优化用户体验
  • 支持水平扩展集群
  • 良好的安全机制
  • Harbor提供了基于角色的访问控制机制,并经过项目来对镜像进行组织和访问权限的控制

harbor架构图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台


###ceph介绍
在能对kubernetes提供存储服务的众多服务当中,ceph的优点在于提供了多样化的存储方式,包括对象存储,块存储,文件系统三种。ceph做为一个统一的分布式存储系统,提供了高性能,高可用性,搞扩展性。对于kubernetes来讲,做为基础服务,这些特性是必不可少的。

ceph架构图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

下面就来了解下ceph的几大特性:

  • 高性能
    采用CRUSH算法,数据分布均衡,并行度高。
    容灾域的隔离,可以实现各种负载的副本放置规则,例如跨机房、机架感知等。
    可以支持上千个存储节点的规模,支持TB到PB级的数据。
  • 高可用性
    副本数能够灵活控制。
    支持故障域分隔,数据强一致性。
    多种故障场景自动进行修复自愈。
    没有单点故障,自动管理。
  • 高可扩展性
    去中心化。
    扩展灵活。
    随着节点增长而线性增加。
  • 支持三种存储接口:块存储、文件存储、对象存储
  • 支持自定义接口,支持多种语言驱动

固然了,ceph做为独立的系统,能够部署到裸机上,也能够部署到kubernetes集群。
PS:若是用的公有云部署kubernetes,能够直接使用公有云提供的存储服务,简单省事。

ceph介绍完,再来介绍另外一个存储etcd


###ETCD介绍
Etcd做为kubernetes的存储核心,做为保存 Kubernetes 全部集群数据的后台数据库。etcd 是兼具一致性和高可用性的键值数据库。

etcd架构图

容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

etcd有如下的特色:

  • 简单:安装配置简单,并且提供了HTTP API进行交互,使用也很简单
  • 安全:支持SSL证书验证
  • 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操做
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性

为了保证数据的高可用,通常状况下都使用奇数节点的集群。

接下来,介绍kubernetes集群的网络插件


###Flannel介绍
Flannel: CoreOS 开源的网络方案,为 kubernetes 设计,功能是让集群中的不一样节点主机建立的Docker容器都具备全集群惟一的虚拟IP地址。Flannel的底层通讯协议的可选余地有不少,好比UDP、VXlan、AWS VPC等等,不一样协议实现下的网络通讯效率相差较多,默认为使用UDP协议,部署和管理简单。
Flannel的后台数据也存储于ETCD中。

Flannel架构图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

如过只是搭建kubernetes集群环境,以上组件就足够了,下面继续介绍的组件,主要是基于kubernetes之上的应用,主要用于构建流水线,监控集群,日志分析。


###drone介绍
开始以前,先介绍两个概念:CI和CD

什么是CI/CD

持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员常常集成它们的工做,一般每一个成员天天至少集成一次,也就意味着天天可能会发生屡次集成。每次集成都须要经过自动化的编译、发布、自动化回归测试来验证,从而尽快地发现集成错误。而这些自动化的操做则由CI软件进行执行。

持续部署(Continous Delivery,CD)在持续集成的基础上,将集成后的代码部署到真实运行环境中(本文指部署到kubernetes集群)。交付团队 ->版本控制 ->构建和单元测试 ->自动验收测试 -> 发布

什么是Drone
Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试、构建、发布。每一个构建都在一个临时的Docker容器中执行,使开发人员可以彻底控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件,将代码推送到 git 仓库,Drone就可以自动化的进行编译、测试、发布。

流程如图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台


###prometheus-operator
Prometheus:一个很是优秀的监控工具或者说是监控方案。它提供了数据搜集、存储、处理、可视化和告警一套完整的解决方案。做为kubernetes官方推荐的监控系统,用Prometheus来监控kubernetes集群的情况和运行在集群上的应用运行情况。

Prometheus架构图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

那Prometheus Operator是作什么的呢?
Operator是由CoreOS公司开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来建立、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。
能够理解为,Prometheus Operator就是用于管理部署Prometheus到kubernetes的工具,其目的是简化和自动化对Prometheus组件的维护。

Prometheus Operator架构
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台


###EFK介绍
EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较经常使用的日志收集方案,也是官方比较推荐的方案。
经过EFK,能够把集群的全部日志收集到Elasticsearch中,而后能够对日志作分析。通常用于故障排查,数据分析等。。。

数据流程图
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台


###Dashboard介绍
kubernetes的Dashboard有不少,官方Dashboard,rancher, kuboard, octant, Lens等等,这里只简单介绍Lens

Lens 一个开源的管理 Kubernetes 集群的IDE,支持 MacOS, Windows 和 Linux。经过 Lens,咱们能够很方便地管理多个 Kubernetes 集群。

直接上图,本身体验,效果更佳。
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台

最后GIT/SVN和Ingress-nginx先不介绍,后续实战再说


###总结
至此,容器云平台的全部组件都基本作了个介绍,如今从使用者的角度,简单梳理流程:

  1. 开发人员向git(gitlab/github/gogs)提交代码,代码中必须包含Dockerfile和.drone.yml文件
  2. 将代码commit到远程仓库
  3. 发布应用时须要填写服务类型、服务名称、资源数量、实例个数等信息,肯定后触发drone自动构建
  4. Drone的CI流水线自动编译代码并打包成docker镜像推送到Harbor镜像仓库
  5. Drone的CI流水线中包括了自定义脚本,根据准备好的kubernetes的YAML模板,将其中的变量替换成用户输入的选项
  6. 生成应用的kubernetes YAML配置文件
  7. 更新Ingress的配置,根据新部署的应用的名称,在ingress的配置文件中增长一条路由信息
  8. 更新DNS,向其中插入一条DNS记录,IP地址是ingress节点的IP地址。
  9. Drone的CI流水线中包括了自定义脚本调用kubernetes的API,部署应用。

PS:整理+排版花了好几天,我真是太难了%#¥@@~¥!……#……太难了~~~~
下一篇,发实战水文&……%¥#@!

Tips: 更多好文章,首发公X众X号“菜鸟运维杂谈”!!!