自2015年3月11日开启内测以来,灵雀云团队持续快速迭代,一方面不断打磨平台品质,提升用户体验,另一方面相继推出多款新服务上线。2015年6月9日,“灵雀云”容器云平台(Container-as-a-Service)正式发布。发布会上,灵雀云同时推出五款全新服务,继而完成了平台对于云端容器化应用的全面支持。本文将对此次发布的新功能作逐一介绍。
在灵雀云,我们相信以Docker为代表的容器将成为应用交付的标准,而基于容器技术的云平台会成为下一代云计算的核心。灵雀云正是以容器这个全新应用交付件为中心,全方位服务于容器化应用构建、集成、部署、运行整个流程的每一个环节。在之前版本的基础上,此次服务更新以“打造云端Docker体验”为主题,从存储、网络和发布管理各个层面完善了平台对于各类应用云端容器化的支持,并进一步简化了容器化应用的发布。灵雀云将容器技术与云计算模式相结合,让用户以Docker般体验轻松玩转云端应用。
以下是本次发布新功能的汇总:
自开启内测伊始,灵雀云便致力于为容器化应用发布、管理提供最简捷的方式和最直观的体验。用户只需指定容器镜像,便可通过灵雀云控制界面于秒间发布应用。从反馈中我们了解到不少用户是非常纯粹的极客, 更习惯使用命令行工具,因为工作效率高。甚至有用户基于我们的API,自主开发了一套完整的灵雀云命令行客户端。这点上得益于自从平台上线第一天起,我们便完全公开API,从而最大化使用的自由度和灵活性。在6月9日的发布会上,我们也正式推出一款灵雀云官方命令行工具(Alauda CLI),百分之百基于我们全开放API,实现以一条指令轻松发布、管理任何容器化应用。
$ alauda run hello index.alauda.cn/alauda/hello-world -p 80
[alauda] Creating and starting service "hello"
[alauda] OK
$ alauda ps
Name Command State Ports Instance Count
hello Running hello-alauda.alaudacn.me:80->80/tcp 1
[alauda] OK
$ alauda scale hello=10
[alauda] Scaling service: hello -> 10
[alauda] OK
$ alauda ps
Name Command State Ports Instance Count
hello Running hello-alauda.alaudacn.me:80->80/tcp 10
[alauda] OK
$ alauda enable-autoscaling hello
[alauda] Enabling auto-scaling for hello
[alauda] OK
以上,我们首先通过alauda run一键发布了一个简单的应用(hello world),随后我们用scale将该应用扩展成10个容器实例,最后我们通过enable-autoscaling为该应用开启自动扩展(Auto-Scaling),应用容器实例会根据预设的资源配置全自动弹性扩展和收缩。
熟悉Docker的用户会有一种亲切感,而这套工具就是要让用户以在本机操作Docker的体验在灵雀云里发布、管理任何容器化应用。
在本文中我们会继续用CLI演示其他新功能,所有功能在灵雀云控制面板上同样能够实现。
应用离不开数据服务,而数据服务是有状态的,就涉及到存储。在过去的几个月里,灵雀云团队不断的对容器存储功能进行完善。6月9日发布会上,我们正式推出“持久存储卷”,用于支持数据服务在云端的容器化。灵雀云将云存储服务抽象成最直观的存储卷,可以直接挂在容器上,就像本地操作Docker的存储卷一样方便。由于采用了云存储技术,存储卷内数据是高可用、高持久的。即便容器被重启或迁移,存储卷也会自动重新挂载,数据不会丢失。
$ alauda run mysql index.alauda.cn/alauda/mysql -p 3306 -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=foo
[alauda] Creating and starting service "mysql"
[alauda] OK
我们注意到-v /var/lib/mysql就是为容器挂上了存储卷,和本地操作Docker一样的体验,一条指令便完成了在灵雀云发布容器化数据库服务的任务。
在存储卷基础上,为了进一步提升数据的持久性,我们继而推出“存储卷备份”功能,可用于抓取存储卷快照并进行保存。这样即便数据服务容器被删除了,数据还在,并可通过备份重建数据服务。存储卷备份还可以用来将数据从一个容器迁移到别处,或是从灵雀云下载容器内数据。
$ alauda backup create mysql_bk1 mysql /var/lib/mysql
[alauda] Creating backup mysql_bk1
[alauda] OK
$ alauda backup list
Id Name State Size Created time
9d2cccad-01b2-486f-81f9-49adee8fdce8 mysql_bk1 available 54222848 2015-06-16T05:32:43Z
[alauda] OK
$ alauda run mysql2 index.alauda.cn/alauda/mysql -p 3306 -v /var/lib/mysql:10:9d2cccad-01b2-486f-81f9-49adee8fdce8 -e MYSQL_ROOT_PASSWORD=root
[alauda] Creating and starting service "mysql2"
[alauda] OK
在这个例子中,我们首先为之前的数据服务(mysql)的存储卷创建一个备份。完成后我们又从这个备份生成一个新的数据服务(mysql2),注意-v /var/lib/mysql:10:9d2cccad-01b2-486f-81f9-49adee8fdce8存储卷的设置中采用了之前生成的备份。
既然我们已经将网站、数据库等各类服务装进容器里发布到灵雀云,那么下一步自然要将这些容器关联起来,搭建一个由多容器组成的完整应用。灵雀云从内测的第一天起便在网络层面对容器化应用有相当完整的支持,包括多实例服务四层、七层的负载均衡,容器跨主机关联,服务发现等等。为了提升应用内部通信安全性,我们在6月9日的发布会上推出了“服务对内端口”功能。这类端口只能在应用内部从被关联的容器访问,而无法从应用外部访问,适用于前、后台服务通信,可搭建应用安全内网。
$ alauda run mysql index.alauda.cn/alauda/mysql -ex 3306 -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=foo
[alauda] Creating and starting service "mysql"
[alauda] OK
$ alauda run web index.alauda.cn/alauda/web -l mysql
[alauda] Creating and starting service "web"
[alauda] OK
在这个例子里,-ex 3306/--expose 3306表示3306是内部端口,只能从被关联容器访问。而-l mysql则是将web容器于mysql容器进行关联。完成关联后web服务可以使用mysql数据库服务,而mysql无法从应用外部访问。
在灵雀云,我们可以容器化任何应用,也可以将任意容器进行关联,正因为这种程度的灵活性,我们能够帮助用户发挥微服务(Microservices)架构的极致,就像搭积木一样,在灵雀云上轻松构建分布式应用。
至此,我们已经进入到多容器应用场景。之前我们多次收到用户反馈,在本地构建多容器应用时,可以使用docker-compose,一键管理整个应用。到了应用发布的时候,却需要在灵雀云上将容器逐一部署,然后再手动将多个容器进行关联,不是很方便。针对这个痛点,我们在6月9日发布会上推出灵雀云多容器管理(Alauda Compose),与docker-compose兼容,可以一键部署多容器应用。
在一下例子中,我们选择演示一款真实应用:GitLab,这是一个有名的开源项目,可以用来搭建私有GitHub。没有容器化的GitLab搭建起来相当复杂,我们来体验一下如何在灵雀云部署GitLab。
首先,我们创建一个docker-compose.yml文件,用来表述GitLab应用的容器组成和相互依赖。
gitlab:
image: index.alauda.cn/alauda/gitlab:7.9.4
links:
- redis:redis
- postgresql:postgresql
ports:
- "80"
- "22"
environment:
- DB_HOST: $POSTGRESQL_PORT_5432_TCP_ADDR
- DB_PORT: $POSTGRESQL_PORT_5432_TCP_PORT
- REDIS_HOST: $REDIS_PORT_6379_TCP_ADDR
- REDIS_PORT: $REDIS_PORT_6379_TCP_PORT
- DB_NAME=gitlabhq_production
- DB_PASS=password
- DB_TYPE=postgres
- DB_USER=gitlab
- GITLAB_SSH_PORT=22
volumes:
- /home/git/data
size: L
postgresql:
image: index.alauda.cn/alauda/postgres:9.3
expose:
- "5432"
volumes:
- /var/lib/postgresql/data
environment:
- POSTGRES_USER=gitlab
- POSTGRES_PASSWORD=password
- POSTGRES_DB=gitlabhq_production
redis:
image: index.alauda.cn/alauda/redis:2.8
expose:
- "6379"
我们看到GitLab需要使用postgresql数据库,以及redis cashe。容器及其关联定义完后,就可以直接部署了:
$ alauda compose up
[alauda] Creating and starting service "postgresql"
[alauda] Creating and starting service "redis"
[alauda] Creating and starting service "gitlab"
[alauda] OK
$ alauda compose ps
Name Command State Ports Instance Count
postgresql Running postgresql-alauda.alaudacn.me:61201->5432/tcp 1
redis Running redis-alauda.alaudacn.me:62290->6379/tcp 1
gitlab Running gitlab-alauda.alaudacn.me:64352->22/tcp, gitlab-alauda.alaudacn.me:80->80/tcp 1
[alauda] OK
一键部署,即便是GitLab这个复杂的应用。如果说,Docker是使用容器的最佳体验,那么灵雀云就是将这种体验带到了云端。
您可以使用pip install alauda下载灵雀云命令行,我们已将这款工具开源,地址为: https://github.com/alaudacloud/alauda-cli.git
您可以通过命令行或控制面板试用本文中介绍的各项新功能。随着这一系列新功能的发布,灵雀云对于容器化应用有了相当完整的支持。请尽情发挥想象力,以灵雀云的“灵动轻便”,让您的应用“雀跃云端”。