阿里云朱士松:多云基础设施的统一纳管与运维实践分享[阿里云]
为了更好地帮助用户在借助DevOps工具缩短开发周期、提升业务效率的同时,也能让业务保持稳定、安全、可靠,且低成本地持续运营,阿里云弹性计算团队独家出品的【弹性计算技术公开课_CloudOps云上运维季】正式启动。阿里云弹性计算团队十三位产品专家和技术专家共同分享云上运维深度实践,详细阐述如何利用CloudOps工具实现运维提效、弹性降本。该系列共10节直播课程,在阿里云官网、阿里云微信视频号、CSDN官网、阿里云钉钉视频号、阿里云开发者微信视频号同步播出,本次课程由战略合作媒体CSDN独家支持。CloudOps云上运维系列课程第五节由阿里云弹性计算技术专家朱士松主讲《多云基础设施的统一纳管与运维实践》,点击下方链接进入【CloudOps云上运维】课程专题页即可观看课程回放,还可了解最新课程资讯。【CloudOps云上运维:https://developer.aliyun.com/topic/ecs-cloudops】以下内容根据朱士松的课程整理而成,供阅览:据市场调查显示,企业出于安全、灵活、成本等多方面的综合考虑,希望可以使用不同的语音平台,利用其中的计算、存储和服务来运行自己企业的应用。其中一部分企业选择将公有云和私有云进行混合匹配,根据不同业务的特性,组合出最适合的运营方式以获得整体上的最佳效果。因此,混合云的使用范围会越来越广,并逐渐成为全球范围内企业用云的一种重要形态,但在使用混合云时,相较于使用单一的云,在管理和运维上复杂程度也成倍增长。本节课将针对该问题介绍企业使用多云或混合运营后会遇到哪些新的挑战和问题以及怎样解决这些问题,并从以下四个方面展开:第一,在使用多云的场景下,企业组织遇到的新的挑战,分析这些新挑战形成背后的原因并推导出相应的解决方案,以及阿里云Ops积累的最佳实践;第二,介绍多云主机统一纳管的需求背景,如何完成多云主机的纳管,以及怎样实现灵活的资源管理和权限管理;第三,介绍多云主机统一运维的需求背景,以及如何利用云上现有的技术体系实现多云主题的统一运维、高效运维和安全运维;第四,介绍多云运维中一些比较复杂的问题和常见的场景,以及如何利用现有的阿里云技术体系实现多云主机的紧密协同工作。一、多云的发展和管理挑战1、使用多云的组织面临的挑战多云和混合云已经成为企业组织用云的一种重要形态,一份专业机构发布的调查报告显示,在多数企业使用多云时都遇到了一些严峻的挑战。对于企业用户来说,排列在前四的问题有成本管理、多云管理、知识缺乏和安全管理。其中多云管理和知识缺乏并列第二,80%的企业认为多云管理是他们所面临的一项重要挑战。2、使用多云或混合云以后,企业技术遇到的新挑战首先,从服务器运维的思想说起,企业组织用云的事项主要包括:资源的采购、网络的组建、资源的分配和资源的使用。在资源使用上,计算、存储、网络等主要资源,以计算资源(即云服务器)的管理和使用,成为了运维工作的中心。云服务器的使用事项包含服务器的生命周期管理(即创建与释放),系统环境的初始化。最后,云服务器被用来部署和运行企业的应用,并且保持功能迭代的应用更新。在应用运行期间,还需要持续对系统进行监控,采集数据以观测系统的健康状况。然后,根据监控所得到的数据,分析和修复服务问题,或者对应用进行扩容与缩容。为了提升事项的处理效率,用户一般通过使用自动化的系统,进行相关的操作,而且多数云平台上,一般也提供有相应的服务。但是,在使用多云或混合云的新的使用场景下,传统的管理与运维方式会相对低效。3、使用多云或混合云以后,企业面临的新问题及背后的原因分析首先,因为各家云平台都有各自的技术体系与管理门户,其只管理自家的云资源,会形成信息孤岛;而且,作为多云的管理者与使用者,需在多家云平台,使用多个入口分别管理不同的云上资源,且不同的云平台提供的功能与服务虽然大体上有趋同的走向,但细节差异也很多,在使用这些系统时,需要注意它们的差异,这不仅需要花费漫长的时间,而且很容易因为知识不足或操作失误导致事故;此外,不同的云平台提供的API接口与访问方式也各不相同,当企业因业务的需要将自家系统与云平台对接时,需要与每家云分别对接,使得开发难度增大,工作量增多,为企业用户带来沉重的负担;最后,即使克服了这种种困难,完成了多云的对接,还会发现在需要多云紧密协同时,例如一起执行某种任务、汇总监控数据时,九成需要把云平台已有的功能再重新开发一遍。通过对背后原因的分析,可以得出一种针对性的解决办法,即避免同时对接多个云平台,而是选出一家云平台,把不同平台上的服务器集中在一起进行管理和运维。如果能完成该设想,那么在管理与使用多云和混合云时就可以像使用一家云一样简捷方便,从而大大减轻使用者和管理者的负担,也降低了部分风险。二、多云服务器的高效管理在前面的统一运维设想中,需要现实的第一步是:将不同云平台下的主机,纳入到一家云平台上,统一进行管理与运维。下面继续分享在多云主机的统一纳管方面,阿里云CloudOps积累经验和推荐的最佳实践。1、多云服务器的统一纳管通过刚才的分析,了解到用户的第一项诉求是:统一管理入口,消除信息孤岛。为了实现这个目的,可以使用阿里云的“托管实例”解决方案。阿里云的托管实例是通过将非阿里云的主机安装阿里云云助手背景的程序,将不同云平台上的云服务器统一注册和托管的阿里云上,并且给予这些机器新的阿里云的身份标识。同时,阿里云相关的运维类产品也都能够识别这个身份,并且为托管实例提供与ECS实例同等的服务能力。将非阿里云的主机托管到阿里云上的前提条件和需要执行操作如下:(1)首先,根据该主机的网络条件,选择接入到阿里云的方式,接入方式有两大类:①使用公网接入:主机可以直接访问公网,或通过代理服务器访问公网。②使用专线接入:主机通过使用阿里云高速通道、VPN网关等方式实现与阿里云VPC的连接。(2)在确定接入方式之后,可以在ECS云助手控制台上,填写注册表单,生成注册脚本,把得到的脚本复制了目标机器上执行。通过上述操作,就完成了云下主机到阿里云主机的托管。这时,可以在云助手控制台上看到托管实例,该主机会获得一个在阿里云的身份编制,并且可以在阿里云,使用多种免费的在线管理和运维服务。2、通过资源分组,实现高效管理当托管实例的数据越来越多并达到一定的规模后,就需要有一种灵活的方式,标识出这些资源的关联信息,例如它们属于哪个业务部门?所属的地域是哪里?所属的生产环境是什么?可以被哪些人员使用?只要能够标识出托管实例的各种关联信息,实现分组的查看和筛选。为了解决这两类问题,可以借助TAG标签管理系统,通过给资源打上各种标签,也就是用户自定义的键值对,实现资源的分类查看和分组管理。例如,上图中有多个ECS实例和托管实例,分别于属于不同的部门、地域环境,在给资源打上相应的标签后,就可以按地域找到属于朝阳区的资源,或者按部门找到信息部的资源,或者按生产环境找到相应生产环境下的资源,或者多个条件同时使用,筛选出既属于信息部又属于生产环境的资源。通过给资源添加多种标签,不仅可以实现分组查看,而且可以灵活授权管理。接下来学习如何通过TAG标签管理与RAM访问控制,高效地进行权限管理,为不同RAM用户,灵活分配的资源的访问权限。3、为不同的人员,配置相应的权限前面的内容中,通过使用标签,介绍了如何实现对资源的灵活、多维度的分组管理、分组查看。那么,与用户相关的另一个常见问题是托管实例可以被哪些人员使用?怎样管理和分配使用权限?这里通过两个示例说明如何通过RAM的访问控制,实现灵活的资源权限管理。(1)示例一:按资源tag授权如左图所示,在RAM权限策略描述脚本中,添加Condition StringEquals语句,而且指定acs:ResourceTag/team标签的值包含有CICD,这样被授予了该权限的用户,就可以访问和使用所有的拥有标签team=CICD的资源。(2)示例二:按实例ID授权如右图所示,在RAM权限策略描述脚本中,给Resource列表添加两个托管实例ID。这样被授予了该权限的用户,就可以查看和操作这两个指定的托管实例。三、多云服务器的高效运维在这一部分,将分享关于企业组织在使用多云时对于主机统一、高效运维的需求,以及阿里云CloudOps所推荐的最佳实践。云服务器的高校运维是所有用户不断追求的目标,可以划分为效率、安全、成本三个维度,接下来将从这三个维度分别介绍用户所面临的问题、挑战以及对应的解决方案。1、通过自动化,实现高效运维为了提升效率,就一定离不开自动化的运维通道。当用户拥有的服务器数量越来越多时,则希望有一个任务调度系统,能够帮助用户自动地管理和运行,包括批量执行操作,设置定式任务或执行自动化脚本。(1)用户诉求:由于服务器的多样性,用户希望系统能够支撑各类的操作系统和各种脚本语言,以及覆盖到多家云的各种系统的主机;其次,用户希望它不依赖主机的登录凭据,因为管理登录凭据是一种既危险又麻烦的事情;再次,用户还希望有更丰富的任务调度、创行执行任务等等。为了实现多云主机的统一高效运维,云助手与运维编排工具正是为解决这些问题所准备的。多云主机在注册到云助手,成为托管实例之后,就可以像ECS服务器一样,通过使用云助手,对服务器进行自动化的运维,例如安装程序、启停服务、修改配置文件以及分发文件等。作为多云的用户,再也不需要学习和使用不同的云平台,分别运维各家的云服务器,而是可以像使用ECS一样,通过使用云助手和运维编排等工具实现统一自动化的愿望。(2)运维手段和途径:可以使用阿里云控制台或阿里云CLI编写自动化脚本或阿里云SDK,可以使用多种语言在自己的组织的应用内集成自动化运维的功能。到此为止,多云的用户通过将多云主机托管到云助手,即满足了统一纳管、统一运维的需求,屏蔽掉了不同云平台差异,提高了工作效率。2、统一监控多云服务器关于服务器运维,另一项基础需求是:用户拥有较多的服务器和应用时,希望能够对服务器的状态、应用的状态,进行统一的监控,及时发现问题和风险并提前进行处理。在多云主机注册为托管实例后,就会出现在云监控的控制台上。在这里,可以选择继续安装云监控采集组件,对其进行统一的、集中的监控。且所有的云监控功能与ECS实例完全一致,例如设置报警规则,当主机的CPU使用率或内存使用率超过指定阈值时,就产生一条报警记录并且推送给相关的人员,让他们能够及时发现现场的问题。如果需要同时监控多个机器,可以使用应用分组。在一个应用分组内,可以只有ECS实例,或者只有托管实例,也可以将托管实例和ECS实例自由组合,放在同一个分组下一起监控。到目前为止,在非阿里云主机注册成为托管实例后,就拥有了与ECS实例完全一致的两种能力:自动化运维能力和主机监控能力。托管实例可以被单独进行监控,也可以加入应用分组与其他主机一起监控。当监控指标超过临界值的时候,可以通过设置报警规则,接收短信、电话等通知;对于报警信息的接收者,能够及时感知服务上发生的风险,及时分析和处理报警内容,防止问题的继续演化。3、自动处理报警事件常见报警的处理过程,会逐渐积累经验,并走向完善,最终演变成一条有着固定处理的套路。到了此阶段,用户会期望让系统自动参与处理,减轻人工负担,降低出错的概率,提高操作的效率。下面,将通过两个示例说明,如何借助云平台上现有的能力实现自动化的报警处理流水线。(1)示例一:监控指标触发自动运维如左图所示,当磁盘空间不足时,自动触发清理程序。某天监控报警,反馈某主机磁盘剩余空间不足,立即进行处理,否则会影响线上正常业务的运行。经过一通的排查和分析,最后发现是因为操作系统几个应用程序的日志和临时文件数量较大,占据了磁盘的许多空间,此时对应的处理办法是把每种日志删除一部分,直至磁盘的剩余空间充足。该过程的自动化流程如下:借助运维编排工具在运维编排上创建一个监控事件处理工作流监控主机的磁盘使用率,目的是在其即将到达报警临界值之前,调用云助手运行磁盘清理脚本,删除不需要保留的文件。这样,就达到了预防报警和消除报警的自动运维的目的。(2)示例二:监控指标触发应用扩容如右图所示,当系统负载较高时,如何使其自动扩容或缩容。某天监控报警上报,某主机的CPU使用率过高,且应用响应时间变慢,再次立即进行处理。经过使用者的一番处理和分析,发现是因为线上业务流量逐渐增长,将要超出服务器的负载能力,此时就会对系统进行扩容,那么该流程如何进行自动化处理?在后面的内容中将会展开介绍。4、保障服务器运维的安全在前面的内容中提到了在管理和运维多云服务器时用户对于运维效率的需求以及利用现有服务提高运维效率的方法。这里了解用户的另一类需求,当用户在云服务器上执行运用操作时,虽然已经获得了相关的授权,但在授权范围内,用户的应用有所限制,在其需要做出相应行动时进行对应的操作,且需要保持操作的可靠性与合法性。若线上出现了事故,如重要的数据和文件被意外删除,如何找出背后是谁在操作?是在哪个时间操作的?操作的范围有哪些?具体删除的文件有哪些?此时,则需要有用于操作审计的能力。在阿里云上,可以通过查看云助手的命令执行记录,直观查看指印主机、指定用户的所有操作记录、每一条命令的内容,以及执行产生的结果和影响。通过查看云助手的命令执行记录,虽然可以了解每次的操作内容,但也有不便之处,需要一条一条逐个查看。如果用户希望通过按关键字来搜索吗,则可以选择将操作记录投递到自己的SLS日志库中,利用SLS日志强大的全文搜索能力,帮助使用者快速定位到所有有关操作。另外,云助手自带的命令记录,系统保存时间是有限的。用户如果希望延长时间,可以选择将操作记录投递到自己的OSS对象存储文件中,从而实现长期和低成本的保存。通过操作审计,其他用户可以有权限的人一样,可查看所有用户的操作历史。对于可疑的操作,也可以做到追踪和定责。5、审计与保密的冲突问题但在一些特殊的场景下,也会产生矛盾。操作者的操作内容中包含有高度机密的内容,不希望轻易的其他人查询。这里以Linux的修改用户密码为例,Linux下通过命令echo root:NewPassword|chpasswd程序来修改密码。(1)明文密码的使用问题在命令提交的内容里,包含有NewPassword新密码的内容,由于命令内容是明文传输的,会被其他人所看到,可能产生密码泄漏。而且从发送命令到执行命令,在系统的链路上也非常容易留下痕迹,也可能暴露密码。那么,用户就会希望在不违反操作审计的原则下,加密命令中的特殊内容,防止重要的信息被其他人查看,产生泄露等。这时,可以使用云助手的数据加密能力,实现安全地发送的机密内容等功能,保证任何其他的人,都没法获取到真正的密码。(2)内容加密的使用方式和使用步骤①向云服务器发送一条请求,要求在云服务器内部生成一个临时的非对称密钥对;②在云服务器内部,云助手收到请求后,将生成一个临时密钥对,并且把公钥内容返回给到用户;③用户在自己的本地环境中,使用公钥加密原先的NewPassword,获得加密后的内容;④用户再次发送新的命令,命令中包含使用指定的密钥解密被加密的内容,以及使用解密后的结果,再用于修改密码。在这个过程中,由于使用的是非对称密钥,而且私钥只存在于云主机内,所以任何其他的人都无法获取,从而解密出原始的密码,进而保护了用户的机密内容安全。6、安全与便捷的远程登录(1)服务器远程登录的安全问题云上服务器运维的另一个常见的使用场景是远程登录。因为在云服务器内,凡是发生了仍未被自动化解决掉的问题,就需要相关人员远程登录到服务器内,手动操作进行排查和解决。在远程登录时,就会遇到这样几个问题:多数的人会使用帐号和密码登录,而大多数人很难记住很多的密码,所以往往只是使用了几种相似的密码用在各种网络帐号上。但是在网络上,却有着着层出不穷和防不胜防的窃密手段,例如字典攻击、暴力破解、网络钓鱼、彩虹表攻击、键盘攻击、爬行搜索等,很可能某个常用的密码早已被泄漏,并且在黑市上交易了数次,只是自己还未觉察。使用账号密码登录比较危险,若改用SSH密钥登录,一般需要服务器公网IP,云服务器一旦有了公网IP,也会面临着网络上的各种攻击风险,例如TCP重置攻击、模拟攻击、中间人攻击、DDoS攻击等,防不胜防。不仅如此,用户还需要谨慎管理服务器的帐号与凭据,管理云服务器防火墙设置,管理主机帐号的分配和回收,万一工作有疏漏,就可能会产生安全性事故。服务器的安全管理和快捷访问两方面的需求,难以两全其美。如果遇到了类似的问题,可以尝试使用ECS的会话管理服务,可以完美解决上面所提到的的各种问题。第一,在使用会话管理服务时,不需要服务器有公网IP,即可避免暴露在公网上,也就免除了被攻击的可能性。第二,远程登录不需要输入账号名和密码,也就避免了密码密钥管理和记录的负担,同时也避免了密钥系路发生风险。第三,能够保证权限被适当使用,这一点依靠会话管理将权限控制统一管理和分配用户的连接权限。接下来介绍会话管理功能实现的方法及好处:(2)会话管理实现功能的原理会话功能以会话管理服务器+云助手Agent作为桥梁,在用户请求建立连接时,建立三条连接,并且在这三条连接上转发两端的输入和输出,从而实现用户到实例的互通。这里的两个端,一端是指用户侧的终端或端口连接程序,例如shell终端或TCP端口监听;另一端是指云服务器内的SHELL终端或TCP端口。这里的三条连接,分别是指:编号3:从用户工作环境到云助手会话管理器的 WebSocket 连接编号4:从云助手Agent到云助手会话管理器的 WebSocket 连接编号5:从云助手Agent到云主机内的Shell终端或TCP端口连接(3)会话管理的好处从链路和原理中可以看出,由于云服务器主动连接到了会话管理服务器,且云服务器不需要接收连接请求,也就不需要有公网IP和端口监听,因此,也就避免了暴露在互联网上,避免了对外部攻击的可能性,保障了系统的稳定和安全。在云服务器内部,由云助手负责连接到终端程序,可以省略掉输入用户名和密码的环节,而用户的远程登录权限是在第一步用户请求建立连接时由RAM访问控制系统负责管理和校验的。因此,用户在不需要提供用户名/密码密钥的情况下就可以实现从本地远程连接到云服务器,而且由RAM控制系统统一管理用户的权限,不仅可以做到灵活地分配,也可以做到灵活地回收。在会话管理服器转发用户侧和实例内部的数据时,如果用户选择了开启会话审计功能,会话管理服务器就会分析和整理会话的内容,将整理后的结果投递到用户的SLS日志库中,方便于用户后续的分析、操作和审计。而且,会话管理整个链路使用了标准的WebSocket协议,如果企业要将会话管理功能集成在企业内部的运营中,也可以方便地编写自己的程序进行实现,关注企业内的用户,实现免公网IP、免账号密码地远程登录阿里云现有的在线工具,包含ECS,且阿里云客户端也支持有会话管理的连接入口和功能。四、多云服务器的工作协同上面介绍了多云服务器面临的统一运维、高效运维和安全运维的需求和问题,同时也给出了一套解决方案和最佳实践,这里继续介绍多云主机之间紧密工作协同的场景,以及如何利用云上既有的服务解决这些问题。1、案例一在DevOps领域,应用的持续的迭代更新,其中涉及的OPS操作有发布应用、部署应用、监控应用、运用应用。那么,使用了多云的企业用户,也希望能在一个平台上同时管理多个云的服务器,执行日常的运维任务。针对这项用户诉求,云助手托管实例打通了阿里云相关的产品线,能够帮助用户实现在阿里云平台上统一、集中完成常见的运营任务。例如,当需要向主机部署应用时,可以使用云效创建和执行部署流水线,向ECS实例或托管实例部署应用;当需要远程登录主机时,可以使用会话管理,实现免公网免密码的远程登录;当需要执行自动化命令时,可以使用云助手发送文件或命令,实现运维的自动化;当需要执行更复杂的工作时,可以使用运维编排创建、编辑、执行和管理运维工作流;当需要监控应用和服务器时,可以使用云监控将托管实例与ECS实例一起按需要编组,一起监控。从这里可以看到,在非阿里云主机注册成为托管实例之后,就可以使用阿里云的运维系列产品,像运维ECS实例一样,实现多云主机的统一运维。2、案例二某企业在线下有一个数据中心,且在该数据中心运行企业自己的应用服务。随着业务的不断增长,线下的这组服务器在业务高峰时段难以承载服务的压力,但是线下的机房扩容又较为困难,因此,企业希望在保存线下机器的情况下,按需求在云上扩容和缩容,这样既可以继续定位线下现有的资产,又可以利用云上的弹性能力,在应用服务器压力升高时,通过动态扩容出云服务器一起分担和减轻线下机器的压力,并且在业务流量下降时,再缩容释放云上的服务器以节省成本。这种需求场景下,可以通过结合使用多云主机托管、多云主机统一监控和配置弹性伸缩规则,完成上述目标。其中涉及的产品虽然较多,但是使用也较为方便,将线下的主机托管到阿里云厂商即可,步骤包括创建托管脚本,在线下机器上执行脚本,把机器托管到线上,将机器安装云监控并加入到云监控应用分组中,最后创建伸缩组、配置规则,以在业务负载监控组的压力较高的时候,实现对系统的自动扩容。具体的操作步骤可以搜索阿里云的线上文档,按照文档的指示实现完整的操作。最后是关于本节课程的总结:通过上面的介绍,可以看到企业在使用多云的场景下,对于多云服务器的统一运维、统一纳管有较为强烈的需求和期望。针对这类需求,可以将线下的非阿里云主机统一注册和托管到阿里云上,再利用阿里云现有的服务体系实现多云服务器的统一纳管、统一运维、高效运维、安全运维,减轻用户需要学习使用多个云平台的负担。而且,可以实现像管理一朵云一样,集中、统一地管理自己在多个云上的服务器。由于阿里云的众多运营类产品都实现了对统一托管实例的统一支持,用户就可以借助些服务体系完成多云服器的高效运维和安全运维,而且,在这套服务体系中,相关的产品都是可免费使用的。因此,企业用户可以在不增加成本的前提下,完整地利用这套体系的所有功能,实现多云服务器之间的高效协同工作。以上就是本节课程的全部内容,同时欢迎大家点击链接 / 扫描下方海报中的二维码进入【CloudOps云上运维】课程官网,了解最新课程资讯!