Skip to content

云平台与自动化运维 ​

本篇定位

覆盖主流云产品、云上运维与自建的差异,以及 Ansible、Terraform 在云上的落地用法。

高频面试题 ​

Q1:核心云产品有哪些?分别干什么? ​

我的答案:

我按"一台业务跑在云上需要哪几块"来记,以阿里云/腾讯云/华为云这类国内主流公有云为例,核心产品分七层讲。

第一是计算层,对应阿里云 ECS、腾讯云 CVM、华为云 ECS,就是一台带 CPU/内存/磁盘的云服务器,需要选实例规格、镜像、公网带宽,弹性伸缩组(Auto Scaling)能按 CPU 指标自动增减机器。

第二是网络层,核心是 VPC 私有网络,自己划网段(如 192.168.0.0/16),下面分子网;云上没有传统交换机的概念,靠安全组做四层访问控制(相当于分布式防火墙,按端口/协议/来源放行),靠网络 ACL 做子网级规则。对外还有 NAT 网关让内网机器出公网、EIP 弹性公网 IP、负载均衡 SLB/CLB(四层 CLB、七层 ALB)。

第三是存储层,系统盘加数据盘(云盘),对象存储 OSS/COS 存静态文件、图片、备份,按量付费、自带多副本。

第四是数据库层,RDS 托管 MySQL/PostgreSQL,自带主从、备份、只读实例,不用自己搭主从复制;还有 Redis 缓存、消息队列 Kafka/RocketMQ。

第五是身份权限层,IAM 给员工/程序建子账号、分配最小权限策略,用 AccessKey 调 API,坚决不把主账号密钥写进代码。

最后配上云解析 DNS、CDN 回源加速、云监控 CloudMonitor。一句话:云上运维的思维是"一切都是可编排的资源",机器挂了不是去修,而是扩容再拉起新实例。


Q2:云上运维和自建 IDC 机房有什么差异? ​

我的答案:

这是个高频对比题,我从六个维度说。

第一是资源获取方式:自建要买物理服务器、上架、布线、装系统,周期几周到几个月;云上是分钟级开 ECS,open 一下就有,弹性伸缩峰值时扩、闲时缩,不用为峰值常年养一堆机器。

第二是成本模型:自建是 CapEx,前期一次性买硬件,3-5 年折旧;云上是 OpEx,按使用量付费,但要警惕"成本漂移"——机器开了不关、云盘超配、带宽按固定峰值买,账单会很贵。所以云上要做成本优化:包年包月压稳定负载、按量+弹性伸缩扛波峰、用 OSS 低频归档、定期清理闲置 EIP 和快照。

第三是运维边界:自建从机房电力、硬件、RAID、BIOS 都得自己管;云上是责任共担——云厂商管物理机、网络虚拟化、存储多副本,我管操作系统、中间件、应用、数据和权限。比如 ECS 宕机厂商帮你迁移,但系统盘被我写满、MySQL 慢查询是我的事。

第四是高可用手段:自建靠双机热备、共享存储;云上靠多可用区(AZ)部署——同一 region 下选两个电力网络隔离的 AZ,SLB 把流量分到两边,一个 AZ 整体故障另一个顶得住,这比自己做双活省事得多。

第五是自动化程度:云上一切有 OpenAPI,Ansible、Terraform 直接调云 API 开资源,基础设施即代码,不用人去机房插 U 盘。

第六是风险点:自建怕硬件坏、断电;云上怕账号泄露、配置错(比如把 0.0.0.0/0 放开到数据库端口)、厂商区域级故障。所以我特别重视 IAM 最小权限和安全组白名单。

一句话:自建重资产、重体力,云上重编排、重成本和权限治理。


Q3:Ansible 原理和常用模块? ​

我的答案:

Ansible 是我做批量配置管理的主力工具,核心特点是无 Agent:被控机器不用装客户端,控制机通过 SSH 连过去执行,靠 Python 临时脚本完成任务,执行完就删,所以上手快、干净。

它的几个核心概念我脱口能讲:一是 inventory 主机清单,一个 ini 或 yaml 文件把机器按组分类,比如 [web]、[db],里面写 IP、SSH 用户、密钥;二是 module 模块,真正干活的是模块,常用的有 yum/apt 装包、copy 下发文件、file 建目录改权限、service 管服务启停、shell/command 跑命令、git 拉代码、template 用 Jinja2 模板渲染配置;三是 playbook 用 YAML 写一套编排剧本,按 tasks 顺序执行;四是 roles 把一套任务拆成 tasks/handlers/templates/vars 目录,做成可复用角色。

它最大的优点是幂等:模块会先检查目标状态,已经是期望状态就不动,重复跑不会出错,这跟自己写 shell 脚本最大的区别就在这——shell 跑两次可能重复装,Ansible 跑一百次结果都一样。

云上落地我常这么用:刚用 Terraform 开出一批 ECS,立刻用 Ansible playbook 做初始化——关闭密码登录、配 SSH 密钥、装基础监控 agent、统一 hosts、调内核参数。ad-hoc 临时批量操作就用 ansible web -m shell -a "uptime" -f 20,-f 20 是并发 20 台。


Q4:Terraform 是做什么的? ​

我的答案:

Terraform 是**基础设施即代码(IaC)**工具,把云上要开的资源用 HCL 语言写成代码,版本化管理,而不是点网页控制台。

工作流我背得很熟:写好 .tf 文件后,第一步 terraform init 初始化、下载 provider(比如阿里云的 alicloud);第二步 terraform plan 干跑,告诉"我打算新建、修改、删除哪些资源",这一步只看不动手,是我特别看重的安全检查;第三步 terraform apply 真正执行;不要了就 terraform destroy 一键清干净。

它的核心是 state 文件,记录云上真实资源和代码的对应关系,相当于一本账本。生产上 state 不能放本地,要放到远端(比如 OSS + 锁),防止多人同时改把状态写乱、或者两人各 apply 一遍把资源冲掉。

我在云上用它管什么:一台 VPC、几个子网、一组 ECS 安全组规则、SLB、RDS 参数,全部代码化。好处是可重复、可审计——环境要复制到 staging,直接 apply 一份;谁改了资源,git diff 一目了然;还能多云,同一套思路换个 provider 就能管 AWS。它和 Ansible 的分工我也会讲清:Terraform 负责"开资源"(生命周命),Ansible 负责"装完软件后怎么配置",业界常组合用,边界清楚。


Q5:如何在云上设计一套高可用架构? ​

我的答案:

我设计高可用就一条主线:消除所有单点,原则是冗余、无状态、自动切换。

具体分层讲。接入层:DNS 解析到 SLB/CLB,后面挂至少两台以上应用服务器,SLB 做健康检查,一台挂了自动摘流量。应用层:服务做成无状态——本地不存会话,会话放 Redis,文件放 OSS,这样任意一台挂了另一台无缝接管,也能随便加机器水平扩容。

机房层:跨多可用区部署,应用和数据库主库所在区故障时,备区能接。数据层:RDS 开主从复制和自动故障切换,从库扛读、主库扛写,定期自动备份;缓存放 Redis 哨兵或集群。

弹性与容灾:配弹性伸缩组,CPU 超阈值自动加机器,低于阈值自动缩;关键数据做 3-2-1 备份——三份副本、两种介质、一份异地。最后配上云监控告警,SLB 后端健康检查失败、RDS 主从延迟都要告警。

举个我家庭实验室里对应的体会:我在双路物理机上用 KVM 切虚机、用 DevStack 起 OpenStack,最开始只跑单点,后来专门把关键组件做了冗余,才真正理解"无状态 + 负载均衡 + 自动切换"为什么是生产架构的标配。


相关链接 ​