微信公众号:更多运维知识,欢迎关注公众号- 运维之美
公司老板让你刚入职的你给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未安装
步骤分拆
使用docker --version判断是否已经安装docker
如果不存在则进行安装
启动docker服务并设置开机自启动
Linux有很多不同的发行版本,不同版本软件的安装方式也是不一样的,下文的k8s_node主机组需要提前配置好
配置/etc/ansible/hosts
[k8s_node]
10.200.18.101 ansible_port=22
适用于 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安装
适用于 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是新一代的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条件限定
- 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
- 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卸载
- 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根据平台和架构限定条件
直接上使用案例
- 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模块,使用过程中要灵活根据系统进行修改。