ansible配置实战
Ansible是一款轻量级的自动化运维工具,基于Python开发,集合了众多运维工具的优点,实现了批量系统配置,批量程序部署,批量运行命令等功能(puppet,cfengie,chef,func,fabric)。
[TOC]
安装使用
需求:假设在 10.30.3.231
上批量管理 10.30.3.232
、10.30.3.233
这2台机器。
配置 免密登录
- 1.登录ansible管理机,su切换到root账户,确认是否已存在公私钥文件(id_rsa、id_rsa.pub),若已存在则可以跳过第2步
[it_support@3.231 ~]# sudo su - root
[root@3.231 ~]# ls -lha ~/.ssh/
-rw------- 1 root root 0 Jun 23 2021 authorized_keys
-rw-r--r-- 1 root root 4.5K Nov 16 16:19 known_hosts
- 2.登录ansible管理机,若
~/.ssh
目录不存在公私钥文件(id_rsa、id_rsa.pub),可使用ssh-keygen -t rsa
生成ssh免密登录公私钥(一路回车即可)
[root@3.231 ~]# cat ~/.ssh/id_rsa.pub | grep ssh-rsa || ssh-keygen -t rsa
- 3.登录ansible管理机,将秘钥分发至需要被管理的节点,实现免密登录
[root@3.231 ~]# ssh-copy-id -p 22 root@10.30.3.232
[root@3.231 ~]# ssh-copy-id -p 22 root@10.30.3.233
- 4.登录ansible管理机,测试一下免密登录
[root@3.231 ~]# ssh -p 22 root@10.30.3.232
[root@3.232 ~]# exit
[root@3.231 ~]#
配置 ansible
- 5.登录ansible管理机,先装 epel-release 再装 ansible
[root@3.231 ~]# yum -y install epel-release
[root@3.231 ~]# yum -y install ansible
- 6.登录ansible管理机,定义分组名称及受控主机清单
cat > /etc/ansible/hosts <<EOF
[k8s]
10.30.3.232 ansible_ssh_port='22'
10.30.3.233 ansible_ssh_port='1618'
EOF
- 7.登录ansible管理机,针对分组或单个ip分别验证连通性
[root@3.231 ~]# ansible k8s -m shell -a 'who'
10.30.3.232 | CHANGED | rc=0 >>
root pts/1 2024-01-30 00:49 (10.30.20.150)
root pts/2 2024-01-30 00:51 (10.30.3.231)
10.30.3.233 | CHANGED | rc=0 >>
root tty1 2024-01-29 21:50
root pts/0 2024-01-30 00:49 (10.30.20.150)
root pts/1 2024-01-30 00:51 (10.30.3.231)
[root@3.231 ~]# ansible 10.30.3.233 -m shell -a 'who'
10.30.3.233 | CHANGED | rc=0 >>
root tty1 2024-01-29 21:50
root pts/0 2024-01-30 00:49 (10.30.20.150)
root pts/1 2024-01-30 01:00 (10.30.3.231)
常用功能
用户模块user
#.1.查看用户模块的帮助
[root@3.231 ~]# ansible-doc user
#.2.为目标主机创建用户
[root@3.231 ~]# ansible 10.30.3.232 -m user -a 'name=appadmin state=present'
#.3.生成密码
[root@3.231 ~]# echo "Admin_147" | openssl passwd -1 -stdin
$1$dR8sVyjG$h0swJo7q6XZxNsz9NbEfG.
#.4.给新建的用户修改密码
[root@3.231 ~]# ansible 10.30.3.232 -m user -a 'name=appadmin password=$1$dR8sVyjG$h0swJo7q6XZxNsz9NbEfG.'
#.5.修改用户登录sell
[root@3.231 ~]# ansible 10.30.3.232 -m user -a 'name=appadmin shell=/sbin/nolgin append=yes'
#.6.删除用户
[root@3.231 ~]# ansible 10.30.3.232 -m user -a 'name=appadmin state=absent'
软件包管理模块yum
#.1.查询软件包管理模块帮助
[root@3.231 ~]# ansible-doc yum
#.2.给目标主机安装apache
[root@3.231 ~]# ansible 10.30.3.232 -m yum -a 'name=httpd state=latest'
#.3.给目标主机卸载软件
[root@3.231 ~]# ansible 10.30.3.232 -m yum -a 'name=httpd state=absent'
服务模块service
#.1.查看服务模块的帮助
[root@3.231 ~]# ansible-doc service
#.2.打开目标主机的httpd服务
[root@3.231 ~]# ansible 10.30.3.232 -m service -a 'name=httpd state=started'
#.3.设置目标主机的httpd服务为开机自启动
[root@3.231 ~]# ansible 10.30.3.232 -m service -a 'name=httpd state=started enabled=yes'
文件模块file
#.1.查看文件模块的帮助
[root@3.231 ~]# ansible-doc file
#.2.为目标主机创建文件
[root@3.231 ~]# ansible 10.30.3.232 -m file -a 'path=/tmp/88.jpg mode=771 state=touch'
#.3.为目标主机创建目录
[root@3.231 ~]# ansible 10.30.3.232 -m file -a 'path=/tmp/88 mode=770 state=directory'
shell模块
#.1.查看shell模块的帮助
[root@3.231 ~]# ansible-doc shell
#.2.调用目标主机的主机名
[root@3.231 ~]# ansible 10.30.3.232 -m shell -a 'hostname' -o -f 2
#.3.查看目标主机的磁盘挂载
[root@3.231 ~]# ansible 10.30.3.232 -m shell -a 'df -hT'
[root@3.231 ~]# ansible 10.30.3.232 -m shell -a 'df -hT' -o