ansible_intro

Ansible 概览

这部分内容对所有用户均有用。 你需要了解 Ansible 的使用背景才能在各类场景下使用他的自动化功能。本页内容是你深入理解其它内容的基础。

  • 管理机
  • 受控节点
  • Inventory 仓库
  • Modules 模块
  • Tasks 任务
  • Playbooks 任务剧本

    管理机

    任何安装了 Ansbile 的服务器,你都可以使用 ansible or ansible-playbook 命令。 任何安装了 Ansbile 的机器都可以做为管理节点,便携式计算机,共享桌面和服务器都可以。 你可以配置多个管理节点。唯一需要注意的是,管理节点不支持 Windows 系统。

受控节点

Ansbile 管理的服务器或者网络设备都称为受控节点。 受控节点有时候也叫做 “hosts” ( 主机 ). 受控节点不需要安装 Ansible.

Inventory 仓库

Inventory 仓库是保存受控节点信息的列表, 因为有时候也叫 “hostfile”, 类似于系统的 hosts 文件。 Inventory 仓库可以以 IP 的方式指定受控节点。 Inventory 同样可以组织管理节点、新增、嵌套组等方式,非常便于扩展。 更多请参考 the Working with Inventory

Modules 模块

Modules 模块是 Ansible 执行代码的最小单元。 每个模块都是特殊用途,从特殊类型的数据库用户管理,到特殊类型的网络设备 VLAN 接口管理。 你可以在通过执行单个任务调用一个模块,也可以通过 playbook 同时调用执行钓具模块。 在链接中查看 Ansible 总共包括了多少个模块。:ref: 模块列表 <modules_by_category>.

Tasks 任务

Ansible 执行操作的最小单位。 ad-hoc 更适合临时执行命令的执行场景。

Playbooks 任务剧本

Playbooks 是任务列表的组合,通常会把常用的命令列表通过正确的语法写入到 playbook中。 Playbook 可以像普通 tasks 一样调用变量, 其使用 YAML 语法,便于读、写、分享、理解。更多请参考 Intro to Playbooks.

install ansible

install python3.8 on centos8

https://luochunhai.github.io/2021/12/24/python/python-centos-install/
https://computingforgeeks.com/how-to-install-python-3-python-2-7-on-rhel-8/

https://linuxize.com/post/how-to-install-python-3-8-on-centos-8/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# sudo dnf install python3

# prepare
sudo dnf groupinstall 'development tools' -y

sudo dnf install bzip2-devel expat-devel gdbm-devel \
ncurses-devel openssl-devel readline-devel wget \
sqlite-devel tk-devel xz-devel zlib-devel libffi-devel -y

## download
VERSION=3.8.1
wget https://www.python.org/ftp/python/${VERSION}/Python-${VERSION}.tgz

tar -xf Python-${VERSION}.tgz

# 该--enable-optimizations选项通过运行多个测试来优化 Python 二进制文件。这会使构建过程变慢。
cd Python-${VERSION}
./configure --enable-optimizations

# 通过运行以下命令启动 Python 3.8 构建过程:
make -j 4

# 修改-j以对应于处理器中的内核数。您可以通过键入 找到该号码nproc
# 构建过程完成后,安装 Python 二进制文件:

sudo make altinstall

python3.8 --version


ln -s /usr/local/bin/python3.8 /usr/bin/python

python -m pip install --upgrade pip

安装 Ansible on CentOS

pip install

1
2
3
4
5
6
7
8
pip install setuptools-rust
pip install paramiko

## 安装 Ansible [1]:

pip install ansible

ansible --version

yum install

1
2
3
yum install epel-release -y
yum install sshpass -y
yum install ansible -y

ansible的使用

基于端口,用户,密码定义主机清单

格式:

1
2
ansible基于ssh连接-i (inventory)参数后指定的远程主机时,也可以写端口,用户,密码。

如:
ansible_ssh_port: 指定ssh端口
ansible_ssh_user:指定 ssh 用户
ansible_ssh_pass: 指定 ssh 用户登录是认证密码(明文密码不安全)
ansible_sudo_pass: 指明 sudo 时候的密码

添加的内容如下:

1
2
3
[root@ansible_master ansible]# grep -v ^# /etc/ansible/hosts |grep -v ^$
[remote]
192.168.171.136 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=summer

直接添加到文件文末就可以;

测试主机的连通性

1
2
3
4
yum install epel-release -y
yum install sshpass -y

ansible -i /etc/ansible/hosts remote -m ping
  • 可能出现的问题:
    Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this
1
2
3
4
vi /etc/ansible/ansible.cfg
[defaults]
forks = 8 #执行时并发数
host_key_checking = False #不检测host key

查看组下所有的IP:

1
ansible all --list

基于ssh密钥来访问定义主机清单

设置密钥 manage node

1
2
3
ssh-keygen -t rsa -b 4096

ssh-keygen -t rsa -b 4096 -N '' -f ~/ansible/keys/id_rsa_test -q
  • ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。
1
2
3
4
5
6
7
8
9
10
-b:指定密钥长度;
-e:读取openssh的私钥或者公钥文件;
-C:添加注释;
-f:指定用来保存密钥的文件名;
-i:读取未加密的ssh-v2兼容的私钥/公钥文件,然后在标准输出设备上显示openssh兼容的私钥/公钥;
-l:显示公钥文件的指纹数据;
-N:提供一个新密语;
-P:提供(旧)密语;
-q:静默模式;
-t:指定要创建的密钥类型。

拷贝密钥并测试

1
2
3
4
5
6
# 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录 和ssh常用命令 
# https://blog.csdn.net/alifrank/article/details/48241699
ssh-copy-id root@192.168.171.136

## 登陆测试
ssh 192.168.171.136

或者手动拷贝

1
2
3
4
5
vim ~/.ssh/authorized_keys
# copy manage node's public key to here.

chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

使用ping检查‘web-servers’或者ansible节点的连通性。

1
2
3
4
5
6
7
ansible -i /etc/ansible/hosts 'remote' -m ping
# 这条命令我们也可以不指定hosts,效果是一样的,我们只要指定组即可
ansible 'remote' -m ping

# 有时候我们为了方便阅读也把主机组名写在最后面
# remote 这个组名,放在最后面
ansible -m command -a "uptime" 'remote'

案例1: 检查节点的内存情况

1
ansible -m command -a "free -m " 'remote'

案例2:给节点增加用户

1
ansible -m command -a "useradd summer" 'remote'

查看是否创建用户成功

1
ansible -m command -a "id summer" 'remote'

参考文章

评论