首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ansible入门:用YAML文件管理一百台服务器(落地版)

Ansible入门:用YAML文件管理一百台服务器(落地版)

作者头像
IT运维技术圈
发布2025-08-11 10:38:57
发布2025-08-11 10:38:57
13400
代码可运行
举报
文章被收录于专栏:IT运维技术圈IT运维技术圈
运行总次数:0
代码可运行

0. 写在前面:为什么你需要“神器”而非“常用命令

在很多人的日常运维工作里,面对几十台甚至上百台服务器时,心里总会冒出一个问题——有没有办法,让这些机器像听一个指挥一样同时动起来?Ansible 就是那根指挥棒。

它的好处在于轻量,被控机不需要额外安装客户端,只要能 SSH 通,就能接受统一管理。你可以把它想成一条粗绳,把不同操作系统、不同角色的机器绑在一起,运维人员只需要拉动一端,就能同时推送配置、部署应用、批量执行命令,不必一遍遍重复相同的动作。

下面我挑了一些真实的业务场景,让你感受一下它在实战中的用法。


有一次我们新上线一个业务,需要在所有服务器上创建一个 deploy 用户并配置好 shell。如果你手动去每台机器加,可能得忙到晚上,但用 Ansible,只需要一份简单的 YAML:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  become: yes
  tasks:
    - name: Create deploy user
      user:
        name: deploy
        state: present
        shell: /bin/bash

执行:

代码语言:javascript
代码运行次数:0
运行
复制
$ ansible-playbook -i hosts create_user.yaml

几秒钟,所有机器返回 changed,事情就做完了。


后来遇到一个整理主机名的需求,想让所有 web 节点统一命名。

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: webservers
  become: yes
  tasks:
    - name: Set hostname
      hostname:
        name: web-{{ inventory_hostname }}

不用再 ssh 上去一台台 hostnamectl,它会自己改好。


推送配置文件是另一件高频操作,比如 nginx 的统一配置:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: webservers
  become: yes
  tasks:
    - name: Deploy nginx config
      copy:
        src: ./nginx.conf
        dest: /etc/nginx/nginx.conf
        backup: yes

一次推送,100 台机器瞬间同步版本。


装软件也不用满世界找人执行:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  become: yes
  tasks:
    - name: Install git
      yum:
        name: git
        state: present

执行后,你能看到哪些机器本来就有,哪些刚装上。


偶尔也需要摸清磁盘使用情况:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  tasks:
    - name: Check disk usage
      shell: df -h
      register: disk_info

    - debug:
        var: disk_info.stdout_lines

结果会在终端刷出来,直接对比各节点。


数据库维护时,批量重启 MySQL 也变得简单:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: dbservers
  become: yes
  tasks:
    - name: Restart MySQL
      service:
        name: mysqld
        state: restarted

新服务器初始化,安装并启动 Docker:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: newservers
  become: yes
  tasks:
    - name: Install docker
      yum:
        name: docker
        state: present
    - name: Enable and start docker
      service:
        name: docker
        state: started
        enabled: yes

为了统一运维环境,把时区改为上海时间:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  become: yes
  tasks:
    - name: Set timezone
      timezone:
        name: Asia/Shanghai

有时发布项目,需要直接从 Git 拉取代码:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: webservers
  tasks:
    - name: Update code from git
      git:
        repo: 'https://github.com/example/project.git'
        dest: /var/www/project
        version: master

线上排查时,快速查看端口开放情况也很方便:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  tasks:
    - name: Check port 8080
      shell: "netstat -tuln | grep 8080 || true"
      register: port_check

    - debug:
        var: port_check.stdout_lines

定期清理 /tmp 目录:

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  become: yes
  tasks:
    - name: Remove old tmp files
      file:
        path: /tmp/*
        state: absent

执行一次全量安全更新(慎用):

代码语言:javascript
代码运行次数:0
运行
复制
- hosts: all
  become: yes
  tasks:
    - name: Update all packages
      yum:
        name: '*'
        state: latest

这些只是常见的十二种玩法,实际工作中还能有更多组合,比如监控进程状态、批量修改防火墙策略、分发 SSL 证书等等。关键是,一旦你把它的 inventory 配好,执行的速度和覆盖面会让你很快上瘾。

如果现在你还有几十上百台机器要手动维护,不妨花半天试试它。等你第一次看到百台服务器同时返回执行结果,大概就会理解为什么这么多人离不开 Ansible 了。

老杨时间

这里我先声明一下,日常生活中大家都叫我波哥,跟辈分没关系,主要是岁数大了.就一个代称而已. 我的00后小同事我喊都是带哥的.张哥,李哥的. 但是这个称呼呀,在线下参加一些活动时.金主爸爸也这么叫就显的不太合适. 比如上次某集团策划总监,公司开大会来一句:“今个咱高兴!有请IT运维技术圈的波哥讲两句“ 这个氛围配这个称呼在互联网这行来讲就有点对不齐! 每次遇到这个情况我就想这么接话: “遇到各位是缘分,承蒙厚爱,啥也别说了,都在酒里了.我干了,你们随意!” 所以以后咱们改叫老杨,即市井又低调.还挺亲切,我觉得挺好.

运维X档案系列文章:

从告警到CTO:一个P0故障的11小时生死时速

老杨的关于AI的号

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-08-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT运维技术圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 老杨时间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档