背景
公司的核心产品,服务的数量太多(30+,40+),每次部署都需要花费相当长的时间,部署脚本使用起来也很是不爽。所以期望打造一个基于 Docker + Kubernetes 的容器服务管理平台,能够达到快速部署、服务管理、服务监控、CICD等目的。
业内解决方案
自从2015年 Docker 流行之后,基于容器化的服务开发开始风靡起来,在阿里云、腾讯云、华为云这样的大公司介入之前,行业内有以下几个公司专攻这个领域 - CaaS (Container as a Service):
- 时速云 https://www.tenxcloud.com/
- 灵雀云 http://www.alauda.cn/
- DAO Cloud http://www.daocloud.io/
- 精灵云 https://www.ghostcloud.cn/
- 好雨云 https://www.goodrain.com/
- 青云 https://www.qingcloud.com/
他们之间的比较,可以参考知乎回答:
- https://www.zhihu.com/question/31773261
- https://www.zhihu.com/question/38537701
- https://www.zhihu.com/question/38979063
而这些产品,包括阿里云等大公司的产品,大都是基于 Kubernetes 或者 Swarm 开发的。
Kubernetes Git 地址:https://github.com/kubernetes/kubernetes
下面将首先介绍时速云
时速云
总览
“总览”涵盖了整个“空间”的状态,包括账户信息、应用、服务、容器、存储、数据库与缓存、健康状况、今日该区域记录、镜像仓库、CI/CD、编排概况、今日该空间记录、审计日志、告警。
应用管理
三种创建应用的方式,镜像仓库、应用商店、编排文件,最终都将生成一个Yaml格式的编排文件。
对于一个应用,除了启动、停止、刷新、删除、重新部署外,还需要能够查看该应用,包括查看运行状态、编排文件、审计日志、监控、租赁信息、创建时间、更新时间、描述、地址(url + port)
样例:
kind: Service
apiVersion: v1
metadata:
name: test
labels:
name: test
annotations:
tenxcloud.com/schemaPortname: 'test-1/TCP,test-2/TCP'
spec:
ports:
- name: test-1
protocol: TCP
targetPort: 9200
port: 9200
- name: test-2
protocol: TCP
targetPort: 9300
port: 9300
selector:
name: test
externalIPs:
- 11.11.1.1
---
kind: Deployment
apiVersion: v1
metadata:
name: test
labels:
name: test
spec:
replicas: 1
selector:
matchLabels:
name: test
template:
metadata:
labels:
name: test
spec:
containers:
- name: test
image: 'index.tenxcloud.com/tenxcloud/elasticsearch:latest'
ports:
- containerPort: 9200
protocol: TCP
- containerPort: 9300
protocol: TCP
env:
- name: PATH
value: >-
/usr/share/elasticsearch/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: LANG
value: C.UTF-8
- name: JAVA_VERSION
value: 8u66
- name: JAVA_DEBIAN_VERSION
value: 8u66-b17-1~bpo8+1
- name: CA_CERTIFICATES_JAVA_VERSION
value: '20140324'
- name: ELASTICSEARCH_MAJOR
value: '2.0'
- name: ELASTICSEARCH_VERSION
value: 2.0.0
- name: ELASTICSEARCH_REPO_BASE
value: 'http://packages.elasticsearch.org/elasticsearch/2.x/debian'
resources:
limits:
memory: 512Mi
requests:
memory: 512Mi
args:
- elasticsearch
command:
- /docker-entrypoint.sh
imagePullPolicy: Always
volumeMounts:
- name: volume-1
mountPath: /usr/share/elasticsearch/data
readOnly: false
volumes:
- name: volume-1
rbd:
image: test-storage
fsType: ext4
交付中心
镜像仓库、应用商店、编排文件
- 镜像仓库包括私有空间、公有空间、我的收藏、添加第三方、上传镜像、下载镜像
- 应用商店包含了一些常用的应用,如Jenkins、Gitlab、Java开发环境等,本质上是Yaml格式的编排文件
- 编排文件可以创建编排,也可以查看公共编排,并直接部署
时速云编排文件支持原生 Kubernetes 的资源定义方式,并支持服务的编排部署,从而帮助开发者和运维人员创建并管理新一代的基于容器技术的微服务架构应用。其中包括:
[1] Pod 编排(容器组),适用于紧耦合的服务组,保证一组服务始终部署在同一节点,并可以共享网络空间和存储卷
[2] Stack 编排,支持跨物理节点的 Pod 之间通过 API 进行网络通信。并定义服务之间的依赖关系
以上两种编排均支持 yaml 文件描述,定义服务之间的关系,定制各个服务的属性,并一键部署运行
CI / CD
- 代码仓库
- TenxFlow
类似Jenkins里的pipeline
TenxFlow流程定义:这里可以定义一个TenxFlow项目的执行流程,每个卡片对应一个子项目,分别执行镜像构建、代码编译、单元测试或者集成测试等子任务,大部分流程以生成应用镜像作为结束。
- Dockerfile
云端Dockerfile: 这里保存您在TenxFlow过程中创建的云端Dockerfile,方便再次查看或使用。(这里以使用Dockerfile,对应TenxFlow子项目名称作为识别标识)
数据库与缓存
数据库 -> MySQL集群
缓存 -> Redis
集成中心
vmware 的 vSphere
ceph存储总览应用
管理与日志
操作审计
日志查询
账户中心
我的账户
我的团队(需要升级到专业版,¥99/月)
充值/续费
消费记录
充值记录
开放API
版本
小结
- 创建应用的时候,也会创建一个服务
- 启动该应用,服务也会是启动状态,同时启动了一个容器
- 容器可以做“重新分配”操作,相当于重启该应用和该服务
- 应用可以是有状态的,并把数据挂载在一个存储空间上
- 服务配置有配置组的概念,也可以关联到应用上
- 创建一个应用,要做到的配置包括:
服务名称、镜像地址、镜像版本
-
基本配置:内核、内存、挂载存储、实例数量
辅助设置:进入点(entrypoint)、启动命令、时区设置、拉取镜像是否用本地缓存
-
高可用:设置检查项目,如果检查项目不满足条件,将自动重启服务
-
配置管理:将服务配置组里预先设置好的配置挂载到某个目录下
-
高级设置:环境变量 + 映射端口
- 存储空间会管理到应用上,在应用被删除前、或者应用解关联该存储空间之前,不能删除存储空间
- 专业版可以支持更多的镜像仓库(2个 -> 20个),没有限制的TenxFlow,更多的数据库与缓存(2个 -> 8个),时间更久的日志查询(1天 -> 1年),团队管理
- 这是公有云解决方案,不适合我们。
参考文档
本系列的其他文章: