您的位置:首页 > 运维架构

PAAS开发运维七

qq_28513801 2019-06-24 15:36 531 查看
PAAS平台通过网络进行程序提供的服务称之为SaaS(Software as a Service),
而云计算时代相应的服务器平台或者开发环境作为服务进行提供就成为了 PaaS(Platform as a Service)。

上,PaaS是位于IaaS和SaaS模型之间的一种云服务,它提供了应用程序的开发和运行环境。IaaS主要提供了虚拟计算、存储、数据库等基础设施服务,SaaS为用户提供了基于云的应用,PaaS则为开发人员提供了构建应用程序的环境。借助于PaaS服务,你无须过多的考虑底层硬件,并可以方便的使用很多在构建应用时的必要服务,比如安全认证等。

不同的PaaS服务支持不同的编程语言,比如.Net、Java、Ruby等,而有些PaaS支持多种开发语言。
由于PaaS层位于IaaS和SaaS之间,所以很多IaaS及SaaS服务商很自然的就在本身的服务中加入了PaaS,
打造成一站式的服务体系。

大致来看,PaaS的实现分为两种:以虚拟机为基础或是以容器为基础。前者的代表是AWS,后者的代表则是GAE, CloudFoundry和Heroku。前文已经提到,AWS是基于虚拟机技术来打造自己的PaaS平台,其架构模式大致如上图所示:
具体而言,AWS基于如下构件打造了Beanstalk:首先是负载均衡层(ELB),该层需要将用户的请求投射到对应的服务器实例,同时,负载均衡层还需要。当应用实例出现扩容时,需要动态将调整的服务器实例注册到对应的域名上,以完成分流;中间是Web服务器层,目前ElasticBean支持Java、Python和PHP等多种编程语言,尽量为编程人员提供多样性的选择,开放性基本是所有PaaS平台的标配。在服务后端,Beanstalk基本依托于AWS本身的服务生态系统为应用提供服务,比如RDS、S3、DynamoDB等。

路由模块:该模块的基本功能是将终端用户请求路由到对应的服务器实例,并提供应用动态注册等功能。目前绝大多数的实现是基于ngnix,同时也需要使用简单的lua脚本完成应用注册和路由查询等基本功能;
服务管理模块:该模块会为开发人员和运维人员提供管理接口,其基本功能包括创建应用实例、配置应用运行参数、启停应用、发布应用程序、扩容或缩容等。服务管理模块也需要提供相应的客户端被用户使用,如命令行或是用户界面等;
应用容器模块:应用容器是PaaS平台的核心,其主要功能是管理应用实例的生命周期,汇报应用的运行状态等。目前来看,应用容器可以基于虚拟机来实现(如AWS),也可以使用Linux容器技术来实现,最早使用的是LXC,CloudFoundry使用的是自己的warden,同样也是基于cgroup,现在最新的是docker;
应用部署模块:应用部署模块需要将应用程序打包成为可直接部署的发布包。该模块是实现PaaS平台开发性的关键。由于现有通用的PaaS平台需要支持多种编程语言和框架,如Java, Python, Ruby和PHP等,当应用发布时,PaaS平台需要根据不同的编程语言将应用打包成为通用的发布包,然后传递给容器模块部署。应用部署模块是实现这一过程的关键,目前来看起源于Heroku的buildpack已经被大家广发接受;
块存储模块:该模块主要用于存储应用的发布包,需要保证程序包的长久存储和。目前AWS的Beanstalk直接使用S3,CF可以使用网络文件系统NFS或是其他任何分布式文件存储系统(如HBase);
数据存储模块:该模块需要保存应用和服务的基本信息,可以基于任何现有的数据库技术实现,如MYSQL或是MONGODB等;
监控模块:该模块的作用是持续监控应用的运行状态,比如健康状态(是否存活)、资源使用率(CPU、内存、硬盘、网络等)和可用性等。这些指标会成为整个PaaS平台运维的关键,也为自动弹性伸缩奠定基础;
用户认证模块:该模块需要保证应用程序的安全性和隔离性,通常而言,公有云的提供商会使用OAuth等技术集成现有的用户认证服务;
消息总线模块:该模块也是最重要的模块,由于PaaS平台所搭建的是一个大规模分布式环境,通常而言,规模在数百台到上千台的机器数量,所有模块之间的通讯会变成一个核心的问题。所以消息总线会变成系统之间通讯的基础,通常需要支持pub/sub模式。
接下来我们看下下面几个简单的paas基本运维操作

1.在 server 节点,使用 inspect 只查询 rancher/server 容器的 NetworkSettings 内 Ports 信息,将以上操作命令及检查结果以文本形式填入答题框。

[root@server ~]# docker inspect  -f {{.NetworkSettings.Ports}}  6bb551e4b97d
map[3306/tcp:[] 8080/tcp:[{0.0.0.0 8080}]]

2.在 server 节点,使用 inspect 只查询 rancher/server 镜像的 Volumes 卷组信 息,将以上操作命令及检查结果以文本形式填入答题框。

[root@server ~]# docker inspect  -f {{.Config.Volumes}}  6bb551e4b97d
map[/var/lib/cattle:{} /var/lib/mysql:{} /var/log/mysql:{}]

3.在 server 节点,使用 inspect 只查询 rancher/server 镜像的 Entrypoint 信息, 将以上操作命令及检查结果以文本形式填入答题框。

[root@server ~]# docker inspect  -f {{.Config.Entrypoint}}  6bb551e4b97d
[/usr/bin/entry]

4.在 server 节点,使用 docker 命令查询 rancher/server 容器的进程,将以上 操作命令及检查结果以文本形式填入答题框

[root@server ~]# docker top 6bb551e4b97d
UID                 PID                 PPID                C                   STIME               TTY                 TIME                                    CMD
root                7851                7835                0                   08:19               ?                   00:00:00            /usr/bin/s6-svscan /service
root                7875                7851                0                   08:19               ?                   00:00:00            s6-supervise cattle
root                7876                7851                0                   08:19               ?                   00:00:00            s6-supervise graphite_exporter
root                7877                7851                0                   08:19               ?                   00:00:00            s6-supervise mysql
root                7878                7875                12                  08:19               ?                   00:30:44            java -     XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Xms128m -Xmx2g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/cattle/logs -Dlogback.bootstrap.level=WARN -cp /usr/share/cattle/cd62f7c4954133b023a2baf35df47f69:/usr/share/cattle/cd62f7c4954133b023a2baf35df47f69/etc/cattle io.cattle.platform.launcher.Main
102                 7896                7877                7                   08:19               ?                   00:17:07            /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306
root                8056                7878                0                   08:19               ?                   00:02:15            websocket-proxy
root                8063                7878                0                   08:19               ?                   00:00:07            go-machine-service
root                8067                7878                0                   08:19               ?                   00:00:00            webhook-service
root                8073                7878                0                   08:19               ?                   00:00:00            secrets-api server --enc-key-path .
root                8078                7878                0                   08:19               ?                   00:00:05            rancher-compose-executor
root                8090                7878                0                   08:19               ?                   00:00:11            rancher-catalog-service --config repo.json --refresh-interval 300
root                8095                7878                0                   08:19               ?                   00:00:00            rancher-auth-service
root                8165                7878                0                   08:19               ?                   00:00:00            telemetry client

5.在 server 节点,使用 docker 命令查列出 rancher/server 容器内发生变化的 文件和目录,将以上操作命令及检查结果以文本形式填入答题框。

[root@server ~]# docker diff 6bb551e4b97d
C /tmp
C /tmp/hsperfdata_root
A /tmp/hsperfdata_root/8
A /tmp/jetty-0.0.0.0-8081-cd62f7c4954133b023a2baf35df47f69-_-any-5919026492591312718.dir
C /service
C /service/cattle
A /service/cattle/event
A /service/cattle/supervise
A /service/cattle/supervise/control
A /service/cattle/supervise/lock
A /service/cattle/supervise/status
C /service/graphite_exporter
A /service/graphite_exporter/supervise
A /service/graphite_exporter/supervise/control
A /service/graphite_exporter/supervise/lock
A /service/graphite_exporter/supervise/status
A /service/graphite_exporter/event
C /service/mysql
A /service/mysql/supervise
A /service/mysql/supervise/status
A /service/mysql/supervise/control
A /service/mysql/supervise/lock
A /service/mysql/event
C /service/.s6-svscan
A /service/.s6-svscan/lock
A /service/.s6-svscan/control
C /etc
C /etc/mysql
C /etc/mysql/my.cnf
C /run
C /run/mysqld
A /run/mysqld/mysqld.sock
A /run/mysqld/mysqld.pid
[root@server ~]#

6.在 server 节点,使用 docker 命令查看最后退出的容器的 ID,将以上操作 命令及检查结果以文本形式填入答题框。

[root@server ~]# docker ps -lq
6b9ef06bb4f0
[root@server ~]#
标签: