自动化运维:Ansible与基础设施即代码
自动化运维:Ansible与基础设施即代码
大家好,我是欧阳瑞(Rich Own)。今天想和大家聊聊自动化运维这个重要话题。作为一个全栈开发者,自动化运维可以大大提高运维效率和可靠性。今天就来分享一下Ansible和基础设施即代码的实战经验。
自动化运维概述
为什么需要自动化?
| 问题 | 说明 |
|---|---|
| 手动操作容易出错 | 人为因素导致配置不一致 |
| 部署效率低 | 重复劳动耗时耗力 |
| 环境不一致 | 开发、测试、生产环境差异 |
| 灾难恢复慢 | 手动恢复时间长 |
基础设施即代码
将基础设施配置以代码形式管理 版本控制、自动化部署、可重复Ansible入门
安装Ansible
# 安装Ansible pip install ansible # 验证安装 ansible --version主机清单
# inventory.ini [web_servers] web1 ansible_host=192.168.1.10 web2 ansible_host=192.168.1.11 [db_servers] db1 ansible_host=192.168.1.20 [all:vars] ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa简单Playbook
--- - name: 配置Web服务器 hosts: web_servers become: true tasks: - name: 安装Nginx apt: name: nginx state: present update_cache: yes - name: 启动Nginx service: name: nginx state: started enabled: yes - name: 复制配置文件 copy: src: files/nginx.conf dest: /etc/nginx/nginx.conf owner: root group: root mode: '0644' notify: 重启Nginx handlers: - name: 重启Nginx service: name: nginx state: restartedPlaybook进阶
变量和模板
--- - name: 配置应用服务器 hosts: app_servers become: true vars: app_name: myapp app_version: 1.0.0 node_env: production tasks: - name: 创建应用目录 file: path: /opt/{{ app_name }} state: directory owner: appuser group: appuser - name: 复制应用配置 template: src: templates/app.conf.j2 dest: /opt/{{ app_name }}/config.json条件判断
--- - name: 根据操作系统配置 hosts: all become: true tasks: - name: 安装Nginx (Debian) apt: name: nginx state: present when: ansible_os_family == 'Debian' - name: 安装Nginx (RedHat) yum: name: nginx state: present when: ansible_os_family == 'RedHat'循环
--- - name: 安装多个软件包 hosts: all become: true tasks: - name: 安装基础工具 apt: name: "{{ item }}" state: present loop: - git - curl - vim - htop实战案例:部署Web应用
--- - name: 部署Node.js应用 hosts: app_servers become: true vars: app_repo: https://github.com/myorg/myapp.git app_dir: /opt/myapp node_version: 18.x tasks: - name: 安装Node.js shell: | curl -sL https://deb.nodesource.com/setup_{{ node_version }} | bash - apt-get install -y nodejs - name: 克隆代码仓库 git: repo: "{{ app_repo }}" dest: "{{ app_dir }}" version: main - name: 安装依赖 npm: path: "{{ app_dir }}" ci: yes - name: 构建应用 npm: path: "{{ app_dir }}" run: build - name: 创建systemd服务 template: src: templates/myapp.service.j2 dest: /etc/systemd/system/myapp.service - name: 启动服务 systemd: name: myapp state: started enabled: yes daemon_reload: yes最佳实践
1. 模块化设计
# roles/webserver/tasks/main.yml --- - include: install.yml - include: configure.yml - include: deploy.yml2. 版本控制
# 将Playbook放入Git仓库 git init git add . git commit -m "Initial Ansible configuration"3. 测试验证
# 使用check模式验证 ansible-playbook site.yml --check # 测试特定主机 ansible-playbook site.yml -l web1总结
自动化运维是现代DevOps的核心。通过Ansible和基础设施即代码,可以实现高效、可靠的运维流程。
我的鬃狮蜥Hash对自动化也有自己的理解——它总是用固定的方式捕捉蟋蟀,这也许就是自然界的"自动化运维"吧!
如果你对自动化运维有任何问题,欢迎留言交流!我是欧阳瑞,极客之路,永无止境!
技术栈:Ansible · 自动化运维 · 基础设施即代码
