容器云平台

基于Docker及Kubernetes构建的容器云平台

2020-09-16  本文已影响0人  空壳先生

开篇

最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了。算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件。首先来看下架构图(实在画的太丑,求推荐工具)


image.png

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

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

首先,介绍Docker,废话不多说,先上图


image.png

docker是什么?

根据官网的介绍,容器是把代码及其所有依赖打包的一个标准单元,你可以把这个程序从一个环境快速可靠的转移到另外一个环境。Docker镜像是一个轻量级的,独立的,可执行的软件包,其中就包含了运行程序所需要的一切。

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

docker的用途

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

docker的缺点以及为什么用kubernetes

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

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


Kubernetes是什么?

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

Kubernetes架构图


image.png

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来说,它具有很多的优势。

harbor架构图


image.png

ceph介绍

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

ceph架构图


image.png

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

当然了,ceph作为独立的系统,可以部署到裸机上,也可以部署到kubernetes集群。
PS:如果用的公有云部署kubernetes,可以直接使用公有云提供的存储服务,简单省事。

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


ETCD介绍

Etcd作为kubernetes的存储核心,作为保存 Kubernetes 所有集群数据的后台数据库。etcd 是兼具一致性和高可用性的键值数据库。

etcd架构图

image.png

etcd有以下的特点:

为了保证数据的高可用,一般情况下都使用奇数节点的集群。

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


Flannel介绍

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

Flannel架构图


image.png

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


drone介绍

开始之前,先介绍两个概念:CI和CD

什么是CI/CD

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

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

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

流程如图


image.png

prometheus-operator

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

Prometheus架构图


image.png

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

Prometheus Operator架构


image.png

EFK介绍

EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较常用的日志收集方案,也是官方比较推荐的方案。
通过EFK,可以把集群的所有日志收集到Elasticsearch中,然后可以对日志做分析。一般用于故障排查,数据分析等。。。

数据流程图


image.png

Dashboard介绍

kubernetes的Dashboard有很多,官方Dashboard,rancher, kuboard, octant, Lens等等,这里只简单介绍Lens

Lens 一个开源的管理 Kubernetes 集群的IDE,支持 MacOS, Windows 和 Linux。通过 Lens,我们可以很方便地管理多个 Kubernetes 集群。

直接上图,自己体验,效果更佳。


image.png

最后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: 更多好文章,请关注首发微信公众号“菜鸟运维杂谈”!!!

上一篇下一篇

猜你喜欢

热点阅读