searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

裸金属自动化运维效率提升--Ansible

2024-10-10 02:07:02
9
0

一、ansible工具介绍

Ansible 是一种基于python的开源自动化工具,主要用于配置管理、应用部署和任务自动化,集合了puppet、chef、func、fabric、cfengine等众多运维工具的优点,它通过简单的 YAML 文件(称为 Playbooks)来定义自动化流程,能够以无代理的方式与远程主机进行通信。

Ansible 的主要特点:

  • 无代理:不需要在被管理节点上安装任何代理软件。
  • 易于学习:使用 YAML 格式编写 Playbooks,语法简单易懂。
  • 模块化:提供了大量内置模块,可以方便地进行各种操作。
  • 并发执行:能够同时对多个主机执行任务,提高效率。

二、ansible核心命令

ad-hoc模式基本语法为:ansible <host-pattern>主机或主机组,默认为/etc/ansible/hosts [-m module_name]指定模块 [-a args]指定参数

检查所有远程主机是否可以访问:ansible all -m ping

检查某个ip主机是否可以访问:ansible x.x.x.x -m ping

远程对单个主机进行指令输入ls:ansible x.x.x.x -m shell -a "ls"

远程对单个主机停用ssh服务:ansible x.x.x.x -m service -a "name=sshd state=stopped"(开启是state=started)

远程对单个主机安装ansible:ansible x.x.x.x -m yum -a "name=ansible state=installed"(其他状态有absent,latest,present,removed等)

远程对单个主机内创建用户:ansible x.x.x.x -m user -a "name=caixukun password=lanqiu"

远程对单个主机内复制文件:ansible x.x.x.x -m copy -a "src=xxx dest=xxx"

远程对单个主机内文件管理:ansible x.x.x.x -m file -a "path=/etc/1.txt mode=0777"(新建文件是state=touch)

远程对单个主机内文件传输到本地:ansible x.x.x.x -m fetch -a "src=/etc/2.txt dest=/etc/2.txt"

远程对单个主机内文件在末行添加内容:ansible x.x.x.x -m lineinfile -a "path=/etc/2.txt line='hhh' "

三、ansible剧本模式

Ansible 的剧本(Playbook)模式是自动化运维的核心工具。剧本使用 YAML 格式来定义,包含了多个“剧本块(Plays)”,每个剧本块可以对不同主机组执行指定任务,从而精确地控制不同主机在不同情景下的行为。

Ansible Playbook 是由以下部分组成的:

  1. 主机(Hosts):定义要执行任务的主机或主机组。
  2. 任务(Tasks):每个任务定义了执行的操作,如安装软件、修改文件等。
  3. 模块(Modules):Ansible 通过模块来完成任务,比如 yumaptcopyfile 等。
  4. 变量(Variables):可以定义可变参数,提高剧本的灵活性。
  5. 处理器(Handlers):在满足条件时触发执行(例如在安装软件后重新启动服务)。
  6. 条件判断(Conditionals):根据特定条件来执行或跳过任务。
  7. 循环(Loops):重复执行任务。

添加-C参数,可以模拟剧本的执行,但是不会产生实际改变:ansible-playbook -C install_rsync.yaml

---
- name: 配置 Web 服务器
  hosts: webservers
  become: yes  # 需要 sudo 权限
  vars:
    http_port: 80

  tasks:
    - name: 安装 Nginx
      apt:
        name: nginx
        state: present
      when: ansible_os_family == "Debian"

    - name: 启动并启用 Nginx 服务
      service:
        name: nginx
        state: started
        enabled: yes

    - name: 创建自定义首页
      copy:
        content: "Welcome to my website!"
        dest: /var/www/html/index.html

    - name: 确保防火墙允许 HTTP 流量
      ufw:
        rule: allow
        port: "{{ http_port }}"
        proto: tcp

  handlers:
    - name: 重启 Nginx
      service:
        name: nginx
        state: restarted

以上代码是一个简单的ansible剧本,各个字段的解释如下:

  • hosts: webservers:此剧本将应用于 webservers 主机组中的所有主机。
  • become: yes:指定需要 sudo 权限来执行任务。
  • vars:定义了一个变量 http_port,设置 HTTP 的端口号。
  • tasks:包含一系列要执行的任务,如安装 Nginx、启动服务、复制自定义的首页文件、配置防火墙等。
  • handlers:定义了一个处理器,当某些任务(如配置变化)触发时,重启 Nginx 服务。

四、实际操作指令

  1. 编写剧本: 假设剧本文件名是 webservers.yml,将上面的内容保存到该文件中。

  2. 运行剧本: 运行剧本时,使用 ansible-playbook 命令,执行命令如下:

     
    ansible-playbook webservers.yml
  3. 指定主机文件: 如果你有一个 inventory 文件,列出了主机名和组,可以用 -i 参数指定:

     
    ansible-playbook -i /path/to/inventory webservers.yml
  4. 查看剧本的执行计划(--check 模式): 在实际执行之前,你可以先用 --check 参数来预览执行的结果,而不真正修改任何内容:

     
    ansible-playbook webservers.yml --check
  5. 加密敏感信息(使用 Ansible Vault): 如果你的剧本中包含敏感信息(如密码),可以加密特定的变量文件:

     
    ansible-vault encrypt vars.yml

    然后使用 --ask-vault-pass 在运行时输入解密密码:

     
    ansible-playbook webservers.yml --ask-vault-pass

小贴士:

  • Idempotency:Ansible 的剧本是幂等的,也就是说你可以多次运行剧本而不担心重复操作。如果某个任务已经完成,Ansible 会跳过该任务。
  • Error Handling:你可以通过 ignore_errors: yes 忽略某个任务的错误,或通过 failed_when 自定义失败条件。

通过这种剧本模式,Ansible 实现了复杂自动化流程的灵活管理,适用于从简单任务到复杂应用环境的配置和部署。

0条评论
0 / 1000
达达达
9文章数
0粉丝数
达达达
9 文章 | 0 粉丝
原创

裸金属自动化运维效率提升--Ansible

2024-10-10 02:07:02
9
0

一、ansible工具介绍

Ansible 是一种基于python的开源自动化工具,主要用于配置管理、应用部署和任务自动化,集合了puppet、chef、func、fabric、cfengine等众多运维工具的优点,它通过简单的 YAML 文件(称为 Playbooks)来定义自动化流程,能够以无代理的方式与远程主机进行通信。

Ansible 的主要特点:

  • 无代理:不需要在被管理节点上安装任何代理软件。
  • 易于学习:使用 YAML 格式编写 Playbooks,语法简单易懂。
  • 模块化:提供了大量内置模块,可以方便地进行各种操作。
  • 并发执行:能够同时对多个主机执行任务,提高效率。

二、ansible核心命令

ad-hoc模式基本语法为:ansible <host-pattern>主机或主机组,默认为/etc/ansible/hosts [-m module_name]指定模块 [-a args]指定参数

检查所有远程主机是否可以访问:ansible all -m ping

检查某个ip主机是否可以访问:ansible x.x.x.x -m ping

远程对单个主机进行指令输入ls:ansible x.x.x.x -m shell -a "ls"

远程对单个主机停用ssh服务:ansible x.x.x.x -m service -a "name=sshd state=stopped"(开启是state=started)

远程对单个主机安装ansible:ansible x.x.x.x -m yum -a "name=ansible state=installed"(其他状态有absent,latest,present,removed等)

远程对单个主机内创建用户:ansible x.x.x.x -m user -a "name=caixukun password=lanqiu"

远程对单个主机内复制文件:ansible x.x.x.x -m copy -a "src=xxx dest=xxx"

远程对单个主机内文件管理:ansible x.x.x.x -m file -a "path=/etc/1.txt mode=0777"(新建文件是state=touch)

远程对单个主机内文件传输到本地:ansible x.x.x.x -m fetch -a "src=/etc/2.txt dest=/etc/2.txt"

远程对单个主机内文件在末行添加内容:ansible x.x.x.x -m lineinfile -a "path=/etc/2.txt line='hhh' "

三、ansible剧本模式

Ansible 的剧本(Playbook)模式是自动化运维的核心工具。剧本使用 YAML 格式来定义,包含了多个“剧本块(Plays)”,每个剧本块可以对不同主机组执行指定任务,从而精确地控制不同主机在不同情景下的行为。

Ansible Playbook 是由以下部分组成的:

  1. 主机(Hosts):定义要执行任务的主机或主机组。
  2. 任务(Tasks):每个任务定义了执行的操作,如安装软件、修改文件等。
  3. 模块(Modules):Ansible 通过模块来完成任务,比如 yumaptcopyfile 等。
  4. 变量(Variables):可以定义可变参数,提高剧本的灵活性。
  5. 处理器(Handlers):在满足条件时触发执行(例如在安装软件后重新启动服务)。
  6. 条件判断(Conditionals):根据特定条件来执行或跳过任务。
  7. 循环(Loops):重复执行任务。

添加-C参数,可以模拟剧本的执行,但是不会产生实际改变:ansible-playbook -C install_rsync.yaml

---
- name: 配置 Web 服务器
  hosts: webservers
  become: yes  # 需要 sudo 权限
  vars:
    http_port: 80

  tasks:
    - name: 安装 Nginx
      apt:
        name: nginx
        state: present
      when: ansible_os_family == "Debian"

    - name: 启动并启用 Nginx 服务
      service:
        name: nginx
        state: started
        enabled: yes

    - name: 创建自定义首页
      copy:
        content: "Welcome to my website!"
        dest: /var/www/html/index.html

    - name: 确保防火墙允许 HTTP 流量
      ufw:
        rule: allow
        port: "{{ http_port }}"
        proto: tcp

  handlers:
    - name: 重启 Nginx
      service:
        name: nginx
        state: restarted

以上代码是一个简单的ansible剧本,各个字段的解释如下:

  • hosts: webservers:此剧本将应用于 webservers 主机组中的所有主机。
  • become: yes:指定需要 sudo 权限来执行任务。
  • vars:定义了一个变量 http_port,设置 HTTP 的端口号。
  • tasks:包含一系列要执行的任务,如安装 Nginx、启动服务、复制自定义的首页文件、配置防火墙等。
  • handlers:定义了一个处理器,当某些任务(如配置变化)触发时,重启 Nginx 服务。

四、实际操作指令

  1. 编写剧本: 假设剧本文件名是 webservers.yml,将上面的内容保存到该文件中。

  2. 运行剧本: 运行剧本时,使用 ansible-playbook 命令,执行命令如下:

     
    ansible-playbook webservers.yml
  3. 指定主机文件: 如果你有一个 inventory 文件,列出了主机名和组,可以用 -i 参数指定:

     
    ansible-playbook -i /path/to/inventory webservers.yml
  4. 查看剧本的执行计划(--check 模式): 在实际执行之前,你可以先用 --check 参数来预览执行的结果,而不真正修改任何内容:

     
    ansible-playbook webservers.yml --check
  5. 加密敏感信息(使用 Ansible Vault): 如果你的剧本中包含敏感信息(如密码),可以加密特定的变量文件:

     
    ansible-vault encrypt vars.yml

    然后使用 --ask-vault-pass 在运行时输入解密密码:

     
    ansible-playbook webservers.yml --ask-vault-pass

小贴士:

  • Idempotency:Ansible 的剧本是幂等的,也就是说你可以多次运行剧本而不担心重复操作。如果某个任务已经完成,Ansible 会跳过该任务。
  • Error Handling:你可以通过 ignore_errors: yes 忽略某个任务的错误,或通过 failed_when 自定义失败条件。

通过这种剧本模式,Ansible 实现了复杂自动化流程的灵活管理,适用于从简单任务到复杂应用环境的配置和部署。

文章来自个人专栏
zjd的日常
9 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
1