玩转ansible之软件安装篇

微信公众号:更多运维知识,欢迎关注公众号- 运维之美

公司老板让你刚入职的你给10台linux机器都安装上docker软件,作为刚入门的小白应该是ssh登录每台机器单独安装,大佬则是直接使用ansible一次搞定,本篇文章整理了使用ansible剧本来管理集群规模的软件的安装和卸载,能够达到事半功倍的效果。

直接上干货,使用下面的剧本即可快速搞定任务,让老板刮目相看

- name: 安装并配置Docker
  hosts: k8s_node # 指定目标CentOS主机组
  become: yes  # 使用sudo或root权限
  tasks:
    - name: 检查Docker是否已安装
      command: docker --version
      ignore_errors: yes #命令执行失败忽略,继续后续步骤
      register: docker_check #注册变量docker_check根据是否安装执行不同的后续操作

    - name: 安装Docker
      yum:
        name: docker
        state: present
      when: docker_check.rc != 0  # 如果Docker未安装

    - name: 启用Docker服务并设置开机自启动
      systemd:
        name: docker
        enabled: yes
        state: started
      when: docker_check.rc != 0  # 如果Docker未安装

执行效果
玩转ansible之软件安装篇_第1张图片

步骤分拆

  1. 使用docker --version判断是否已经安装docker

  2. 如果不存在则进行安装

  3. 启动docker服务并设置开机自启动

玩转ansible之软件安装篇_第2张图片

01.软件安装

Linux有很多不同的发行版本,不同版本软件的安装方式也是不一样的,下文的k8s_node主机组需要提前配置好

配置/etc/ansible/hosts

[k8s_node]
10.200.18.101 ansible_port=22
  • apt 模块

适用于 Debian/Ubuntu 等基于apt管理的系统

 - name: use apt install docker
  hosts: k8s_node
  become: yes  # 使用sudo或root权限
  tasks:
    - name: install docker
      apt:
        name: docekr
        state: present  # 确保docker安装
  • yum 模块

适用于 CentOS/RHEL 等基于基于yum管理的系统

 - name: 安装docker使用yum模块
  hosts: k8s_node
  become: yes  # 使用 sudo 或 root 权限
  tasks:
    - name: install docker package
      yum:
        name: docker
        state: present  # 确保docker安装
  • dnf 模块

dnf是新一代的rpm包管理工具,适用于新版 CentOS/RHEL 系统

 - name: install docker package
  hosts: k8s_node
  become: yes  # 使用 sudo 或 root 权限
  tasks:
    - name: 安装docker
      dnf:
        name: docker
        state: present  # 确保docker安装
  • 安装指定软件版本
 - name: 安装特定版本的软件
  apt:
    name: software-name=1.2.3
    state: present
  • 同时安装多个软件包
 - name: 安装多个软件包
  apt:
    name:
      - package1
      - package2
    state: present
  • 离线包安装
- name: 安装离线包
  hosts: 
    - debian_hosts  # 包含Debian系统的主机组
    - redhat_hosts  # 包含Red Hat系统的主机组
  become: yes  # 使用 sudo 或 root 权限

  tasks:
    - name: 复制.deb包到Debian主机
      copy:
        src: /path/to/your-debian-package.deb  # Debian系统上的.deb包路径
        dest: /tmp/your-debian-package.deb  # 指定目标主机上的路径
      when: "'debian_hosts' in inventory_hostname"

    - name: 复制.rpm包到Red Hat主机
      copy:
        src: /path/to/your-redhat-package.rpm  # Red Hat系统上的.rpm包路径
        dest: /tmp/your-redhat-package.rpm  # 指定目标主机上的路径
      when: "'redhat_hosts' in inventory_hostname"

    - name: 安装.deb包
      command: dpkg -i /tmp/your-debian-package.deb
      when: "'debian_hosts' in inventory_hostname"

    - name: 安装.rpm包
      command: rpm -ivh /tmp/your-redhat-package.rpm
      when: "'redhat_hosts' in inventory_hostname"

对于使用deb和rpm不同包格式的系统,我们使用when条件限定

02.软件卸载

  • apt 模块卸载
 - name: 卸载docker使用apt模块
  hosts: k8s_node
  become: yes  # 使用sudo或root权限
  tasks:
    - name: 停止docker服务
      service:
        name: docker
        state: stopped

    - name: 卸载docker
      apt:
        name: docker
        state: absent  # 确保 docker卸载
  • 卸载多个包
 - name: 卸载多个软件包
  apt:
    name:
      - package1
      - package2
    state: absent
  • yum 模块卸载
- name: 卸载docker使用 yum 模块
  hosts: k8s_node
  become: yes  # 使用 sudo 或 root 权限
  tasks:
    - name: 停止docker服务
      service:   #高版本的centos修改为systemd模块即可
        name: docker
        state: stopped

    - name: 卸载docker
      yum:
        name: docker
        state: absent  # 确保docker卸载

卸载执行过程
玩转ansible之软件安装篇_第3张图片

  • dnf 模块卸载
- name: 卸载dnf模块卸载docker
  hosts: k8s_node
  become: yes  # 使用sudo或root权限
  tasks:
    - name: 停止docker服务
      service:
        name: docker
        state: stopped

    - name: 卸载docker
      dnf:
        name: docker
        state: absent  # 确保docker卸载

以上示例演示了在不同的 Linux 发行版中使用不同的模块和包管理工具来安装和卸载软件。实际使用中要根据系统和软件包管理器选择适当的 playbook 部分,并可以通过when根据平台和架构限定条件

03.服务启动

直接上使用案例

- name: 启动服务(init.d)
  service:
    name: docker
    state: started

设置开机自启动

- name: 设置开机自启动(init.d)
  file:
    src: /etc/init.d/my-service
    dest: /etc/rc.d/rc3.d/S90my-service
    state: link

使用systemd模块启动

- name: 启动服务(systemd)
  systemd:
    name: docker
    state: started

设置开机自启动

- name: 设置开机自启动(systemd)
  systemd:
    name: docker
    enabled: yes

软件安装之后,还要进行后续的服务启动,开机自启动等配置。这里需要注意的是,centos6之前服务启动使用的是service模块,centos7之后则使用systemd模块,使用过程中要灵活根据系统进行修改。

你可能感兴趣的:(ansible)