容器云平台No.1~基于Docker及Kubernetes构建的容器云平台
开篇
最近整理笔记,不知不觉发现关于kubernetes相关的笔记已经达99篇了,索性一起总结了。算是对这两年做容器云平台的一个总结,本文是开篇,先介绍下所有用到的组件。首先来看下架构图(实在画的太丑,求推荐工具)
如图,容器平台主要涉及的组件有:
- Docker
- Kubernetes
- Etcd
- Flannel
- Ceph
- Harbor
- Drone
- Promethues
- EFK
- GIT/SVN
- Ingress-nginx
- Dashboard(Lens)
正所谓开局一张图,后面全靠编,哈哈,开干。。。
首先,介绍Docker,废话不多说,先上图
docker是什么?
根据官网的介绍,容器是把代码及其所有依赖打包的一个标准单元,你可以把这个程序从一个环境快速可靠的转移到另外一个环境。Docker镜像是一个轻量级的,独立的,可执行的软件包,其中就包含了运行程序所需要的一切。
说白了就是把应用程序及其依赖打包到一个文件里,运行这个文件,就会生成一个虚拟容器。程序在里面运行就跟在物理机或者虚拟机上一样。~~~真拗口
docker的用途
- 简化配置
- 代码流水线管理
- 提高开发效率
- 隔离应用
- 整合服务器
- 快速部署
- 提供一致性环境
- 提供弹性服务
docker的缺点以及为什么用kubernetes
docker容器的轻量化,意味着在等量资源的基础上能创建出更多的容器实例。但是在面对分布在多台主机上且拥有数量很多容器(成百上千)的大规模应用程序时,传统的单机容器管理解决方案就会变得力不从心。另外,由于微服务越来越完善的原生支持,在一个容器集群中的容器粒度越来越小,数量越来越多。在这种情况下,都需要借助容器管理平台,从而实现调度,负载均衡以及任务分配等。
容器集群管理工具能在一组服务器上管理多容器组合成的应用,每个应用集群在容器编排工具看来是一个部署或管理实体,容器集群管理工具全方位为应用集群实现自动化,包括应用实例部署、应用更新、健康检查、弹性伸缩、自动容错等等。哈哈,好巧不巧,Kubernetes就提供了这些功能,这就是为什么我们要用Kubernetes的原因。
Kubernetes是什么?
Kubernetes:Google 开源的容器管理系统,起源于Borg 系统。用于自动部署,扩展和管理容器化应用程序的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。
Kubernetes架构图
Kubernetes的用途
- 服务发现与负载均衡
- 自我修复
- 自动化上线和回滚
- 配置管理
- 存储编排
- 批量执行
- Service拓扑
- 断点切片
- 自动装箱
- 水平扩缩
- 双协议栈
Kubernetes的挑战
作为整个平台的核心,Kubernetes的功能强大,但是就其本身架构而言,学习成本不低。
- kubernetes概念太多,可能一个月也无法入门,甚至连集群都搭建不出来。
- 学习kubernetes对运维的技术能力要求比较高,和传统的运维有一定差异,需要有修改代码的能力。
- kubernetes的诞生,把运维从传统转向devops,需要面临的新技术很多。
- 但是当你掌握到了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架构图
ceph介绍
在能对kubernetes提供存储服务的众多服务当中,ceph的优势在于提供了多样化的存储方式,包括对象存储,块存储,文件系统三种。ceph作为一个统一的分布式存储系统,提供了高性能,高可用性,搞扩展性。对于kubernetes来说,作为基础服务,这些特性是必不可少的。
ceph架构图
下面就来了解下ceph的几大特性:
- 高性能
采用CRUSH算法,数据分布均衡,并行度高。
容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
能够支持上千个存储节点的规模,支持TB到PB级的数据。 - 高可用性
副本数可以灵活控制。
支持故障域分隔,数据强一致性。
多种故障场景自动进行修复自愈。
没有单点故障,自动管理。 - 高可扩展性
去中心化。
扩展灵活。
随着节点增加而线性增长。 - 支持三种存储接口:块存储、文件存储、对象存储
- 支持自定义接口,支持多种语言驱动
当然了,ceph作为独立的系统,可以部署到裸机上,也可以部署到kubernetes集群。
PS:如果用的公有云部署kubernetes,可以直接使用公有云提供的存储服务,简单省事。
ceph介绍完,再来介绍另一个存储etcd
ETCD介绍
Etcd作为kubernetes的存储核心,作为保存 Kubernetes 所有集群数据的后台数据库。etcd 是兼具一致性和高可用性的键值数据库。
etcd架构图
etcd有以下的特点:
- 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
- 安全:支持SSL证书验证
- 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作
- 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
为了保证数据的高可用,一般情况下都使用奇数节点的集群。
接下来,介绍kubernetes集群的网络插件
Flannel介绍
Flannel: CoreOS 开源的网络方案,为 kubernetes 设计,功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。Flannel的底层通信协议的可选余地有很多,比如UDP、VXlan、AWS VPC等等,不同协议实现下的网络通信效率相差较多,默认为使用UDP协议,部署和管理简单。
Flannel的后台数据也存储于ETCD中。
Flannel架构图
如过只是搭建kubernetes集群环境,以上组件就足够了,下面继续介绍的组件,主要是基于kubernetes之上的应用,主要用于构建流水线,监控集群,日志分析。
drone介绍
开始之前,先介绍两个概念:CI和CD
什么是CI/CD
持续集成(Continous Intergration,CI)是一种软件开发实践,即团队开发成员经常集成它们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都需要通过自动化的编译、发布、自动化回归测试来验证,从而尽快地发现集成错误。而这些自动化的操作则由CI软件进行执行。
持续部署(Continous Delivery,CD)在持续集成的基础上,将集成后的代码部署到真实运行环境中(本文指部署到kubernetes集群)。交付团队 ->版本控制 ->构建和单元测试 ->自动验收测试 -> 发布
什么是Drone
Drone 是一个基于Docker容器技术的可扩展的持续集成引擎,用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行,使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件,将代码推送到 git 仓库,Drone就能够自动化的进行编译、测试、发布。
流程如图
prometheus-operator
Prometheus:一个非常优秀的监控工具或者说是监控方案。它提供了数据搜集、存储、处理、可视化和告警一套完整的解决方案。作为kubernetes官方推荐的监控系统,用Prometheus来监控kubernetes集群的状况和运行在集群上的应用运行状况。
Prometheus架构图
那Prometheus Operator是做什么的呢?
Operator是由CoreOS公司开发的,用来扩展 Kubernetes API,特定的应用程序控制器,它用来创建、配置和管理复杂的有状态应用,如数据库、缓存和监控系统。
可以理解为,Prometheus Operator就是用于管理部署Prometheus到kubernetes的工具,其目的是简化和自动化对Prometheus组件的维护。
Prometheus Operator架构
EFK介绍
EFK,全称Elasticsearch Fluentd Kibana ,是kubernetes中比较常用的日志收集方案,也是官方比较推荐的方案。
通过EFK,可以把集群的所有日志收集到Elasticsearch中,然后可以对日志做分析。一般用于故障排查,数据分析等。。。
数据流程图
Dashboard介绍
kubernetes的Dashboard有很多,官方Dashboard,rancher, kuboard, octant, Lens等等,这里只简单介绍Lens
Lens 一个开源的管理 Kubernetes 集群的IDE,支持 MacOS, Windows 和 Linux。通过 Lens,我们可以很方便地管理多个 Kubernetes 集群。
直接上图,自己体验,效果更佳。
最后GIT/SVN和Ingress-nginx先不介绍,后续实战再说
总结
至此,容器云平台的所有组件都基本做了个介绍,现在从使用者的角度,简单梳理流程:
- 开发人员向git(gitlab/github/gogs)提交代码,代码中必须包含Dockerfile和.drone.yml文件
- 将代码commit到远程仓库
- 发布应用时需要填写服务类型、服务名称、资源数量、实例个数等信息,确定后触发drone自动构建
- Drone的CI流水线自动编译代码并打包成docker镜像推送到Harbor镜像仓库
- Drone的CI流水线中包括了自定义脚本,根据准备好的kubernetes的YAML模板,将其中的变量替换成用户输入的选项
- 生成应用的kubernetes YAML配置文件
- 更新Ingress的配置,根据新部署的应用的名称,在ingress的配置文件中增加一条路由信息
- 更新DNS,向其中插入一条DNS记录,IP地址是ingress节点的IP地址。
- Drone的CI流水线中包括了自定义脚本调用kubernetes的API,部署应用。
PS:整理+排版花了好几天,我真是太难了%#¥@@~¥!……#……太难了~~~~
下一篇,发实战水文&……%¥#@!
Tips: 更多好文章,请关注首发微信公众号“菜鸟运维杂谈”!!!
容器云平台No.1~基于Docker及Kubernetes构建的容器云平台的更多相关文章
- 026.[转] 基于Docker及Kubernetes技术构建容器云平台 (PaaS)
[编者的话] 目前很多的容器云平台通过Docker及Kubernetes等技术提供应用运行平台,从而实现运维自动化,快速部署应用.弹性伸缩和动态调整应用环境资源,提高研发运营效率. 本文简要介绍了与容 ...
- QCon技术干货:个推基于Docker和Kubernetes的微服务实践
2016年伊始,Docker无比兴盛,如今Kubernetes万人瞩目.在这个无比需要创新与速度的时代,由容器.微服务.DevOps构成的云原生席卷整个IT界.在近期举办的QCon全球软件开发大会上, ...
- 基于Kubernetes构建企业容器云
前言 团队成员有DBA.运维.Python开发,由于需要跨部门向公司私有云团队申请虚拟机, 此时我在思考能否在现有已申请的虚拟机之上,再进行更加细粒度的资源隔离和划分,让本团队的成员使用, 也就是在私 ...
- 基于docker部署使用ELK+FileBeat日志管理平台
Docker从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,专业叫法为 Application Container(应用容器).Docker进程和普通的进程没有任何区别,它就是一个普通的应用进程 ...
- 【有容云案例系列】基于Jenkins和Kubernetes的CI工作流
嘉宾介绍 黄文俊 有容云资深系统架构师 主要负责容器云平台产品架构及设计. 8年工作经验, 有着企业级存储, 云计算解决方案相关理解. 关注于微服务设计思考, 开发流程优化, docker及kuber ...
- docker使用Dockerfile构建ssh容器
一.使用Dockerfile构建centos 1.创建 Dockerfile mkdir centos # 创建一个目录存放之后的Dockerfile,目录名无所谓 cd centos # 进入目录 ...
- 基于Docker快速搭建ELK【华为云技术分享】
[摘要] 本文基于自建的Docker平台速搭建一套完整的ELK系统,相关的镜像直接从Docker Hub上获取,可以快速实现日志的采集和分析检索. 准备镜像 l 获取ES镜像:docker pull ...
- k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-5
1.为Flannel生成证书 [root@linux-node1 ~]# vim flanneld-csr.json { "CN": "flanneld", & ...
- k8s笔记0528-基于KUBERNETES构建企业容器云手动部署集群记录-4
部署kubelet 1.二进制包准备 将软件包从linux-node1复制到linux-node2中去. [root@linux-node1 ~]# cd /usr/local/src/kuberne ...
随机推荐
- 解决MySql Access denied for user 'root'@'192.168.1.119' to databse 的问题
因为ip未授权,在navicat中执行 grant all privileges on *.* to 'root'@'192.168.1.119' identified by 'root' with ...
- 一文说通Jwt、Session、Cooike区别
JWT 全称是 JSON Web Token,是目前非常流行的跨域认证解决方案,在单点登录场景中经常使用到. 有些人觉得它非常好用,用了它之后就不用在服务端借助 redis 实现认证过程了,但是,还有 ...
- postman with xdebug
Set the url with ?XDEBUG_SESSION_START=PHPSTORM and set a header Cookie: XDEBUG_SESSION=PHPSTORM
- FileZilla Server FTP服务器失败
使用Filezilla Server配置FTP服务器https://blog.csdn.net/chuyouyinghe/article/details/78998527 FileZilla Serv ...
- Apache Pulsar 2.6.1 版本正式发布:2.6.0 功能增强版,新增 OAuth2 支持
在 Apache Pulsar 2.6.0 版本发布后的 2 个月,2020 年 8 月 21 日,Apache Pulsar 2.6.1 版本正式发布! Apache Pulsar 2.6.1 修复 ...
- 英文ubuntu中的乱码,输入法问题 、mint字体发虚
英文ubuntu文本文件默认编码是utf-8,windows下是gbk,所以产生乱码问题. 1.前言 运行命令查看系统编码 $locale 结果如下: LANG=en_US.UTF-8 LANGUAG ...
- Transform与Vector3 的API
Transform.InverseTransformDirection(Vector3 direction) Vector3.ProjectOnPlane(Vector3 vector, Vector ...
- chrome设置跨域访问
1.新建目录 /usr/local/opt/myChromData 2.输入命令行 open -n /Applications/Google\ Chrome.app/ --args --disable ...
- css动画实现吃豆豆
话不多说,直接上代码:(作为一个初学者写的代码,多么0基础都能看的懂吧.) HTML部分 <!DOCTYPE html> <html lang=en> <head> ...
- 高可用集群corosync+pacemaker之pcs安装使用
前文我们介绍了高可用集群corosync+pacemaker的集群管理工具crmsh的常用命令的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/crms ...