0. 写在前面:为什么你需要“神器”而非“常用命令
在很多人的日常运维工作里,面对几十台甚至上百台服务器时,心里总会冒出一个问题——有没有办法,让这些机器像听一个指挥一样同时动起来?Ansible 就是那根指挥棒。
它的好处在于轻量,被控机不需要额外安装客户端,只要能 SSH 通,就能接受统一管理。你可以把它想成一条粗绳,把不同操作系统、不同角色的机器绑在一起,运维人员只需要拉动一端,就能同时推送配置、部署应用、批量执行命令,不必一遍遍重复相同的动作。
下面我挑了一些真实的业务场景,让你感受一下它在实战中的用法。
有一次我们新上线一个业务,需要在所有服务器上创建一个 deploy
用户并配置好 shell。如果你手动去每台机器加,可能得忙到晚上,但用 Ansible,只需要一份简单的 YAML:
- hosts: all
become: yes
tasks:
- name: Create deploy user
user:
name: deploy
state: present
shell: /bin/bash
执行:
$ ansible-playbook -i hosts create_user.yaml
几秒钟,所有机器返回 changed
,事情就做完了。
后来遇到一个整理主机名的需求,想让所有 web 节点统一命名。
- hosts: webservers
become: yes
tasks:
- name: Set hostname
hostname:
name: web-{{ inventory_hostname }}
不用再 ssh 上去一台台 hostnamectl
,它会自己改好。
推送配置文件是另一件高频操作,比如 nginx 的统一配置:
- hosts: webservers
become: yes
tasks:
- name: Deploy nginx config
copy:
src: ./nginx.conf
dest: /etc/nginx/nginx.conf
backup: yes
一次推送,100 台机器瞬间同步版本。
装软件也不用满世界找人执行:
- hosts: all
become: yes
tasks:
- name: Install git
yum:
name: git
state: present
执行后,你能看到哪些机器本来就有,哪些刚装上。
偶尔也需要摸清磁盘使用情况:
- hosts: all
tasks:
- name: Check disk usage
shell: df -h
register: disk_info
- debug:
var: disk_info.stdout_lines
结果会在终端刷出来,直接对比各节点。
数据库维护时,批量重启 MySQL 也变得简单:
- hosts: dbservers
become: yes
tasks:
- name: Restart MySQL
service:
name: mysqld
state: restarted
新服务器初始化,安装并启动 Docker:
- 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
为了统一运维环境,把时区改为上海时间:
- hosts: all
become: yes
tasks:
- name: Set timezone
timezone:
name: Asia/Shanghai
有时发布项目,需要直接从 Git 拉取代码:
- hosts: webservers
tasks:
- name: Update code from git
git:
repo: 'https://github.com/example/project.git'
dest: /var/www/project
version: master
线上排查时,快速查看端口开放情况也很方便:
- hosts: all
tasks:
- name: Check port 8080
shell: "netstat -tuln | grep 8080 || true"
register: port_check
- debug:
var: port_check.stdout_lines
定期清理 /tmp
目录:
- hosts: all
become: yes
tasks:
- name: Remove old tmp files
file:
path: /tmp/*
state: absent
执行一次全量安全更新(慎用):
- hosts: all
become: yes
tasks:
- name: Update all packages
yum:
name: '*'
state: latest
这些只是常见的十二种玩法,实际工作中还能有更多组合,比如监控进程状态、批量修改防火墙策略、分发 SSL 证书等等。关键是,一旦你把它的 inventory 配好,执行的速度和覆盖面会让你很快上瘾。
如果现在你还有几十上百台机器要手动维护,不妨花半天试试它。等你第一次看到百台服务器同时返回执行结果,大概就会理解为什么这么多人离不开 Ansible 了。
这里我先声明一下,日常生活中大家都叫我波哥,跟辈分没关系,主要是岁数大了.就一个代称而已. 我的00后小同事我喊都是带哥的.张哥,李哥的. 但是这个称呼呀,在线下参加一些活动时.金主爸爸也这么叫就显的不太合适. 比如上次某集团策划总监,公司开大会来一句:“今个咱高兴!有请IT运维技术圈的波哥讲两句“ 这个氛围配这个称呼在互联网这行来讲就有点对不齐! 每次遇到这个情况我就想这么接话: “遇到各位是缘分,承蒙厚爱,啥也别说了,都在酒里了.我干了,你们随意!” 所以以后咱们改叫老杨,即市井又低调.还挺亲切,我觉得挺好.
运维X档案系列文章:
老杨的关于AI的号