自动化工具Ansible安装与简单使用

Ansible安装与使用

简介

Ansible (官网)是一个配置管理和应用部署工具,功能类似于目前业界的配置管理工具 Chef,Puppet,Saltstack。Ansible 是通过 Python 语言开发。Ansible 平台由 Michael DeHaan 创建,他同时也是知名软件 Cobbler 与 Func 的作者。Ansible 的第一个版本发布于 2012 年 2 月,现被红帽并购。

Ansible 默认通过 SSH 协议管理机器,所以 Ansible 不需要安装客户端程序在服务器上。您只需要将 Ansible 安装在一台服务器,在 Ansible 安装完后,您就可以去管理控制其它服务器。不需要为它配置数据库,Ansible 不会以 daemons 方式来启动或保持运行状态。Ansible 的目标有如下:

  • 自动化部署应用
  • 自动化管理配置
  • 自动化持续交付
  • 自动化的(AWS)云服务管理

根据 Ansible 官方提供的信息,当前使用 Ansible 的用户有:evernote、rackspace、NASA、Atlassian、twitter 等。

安装前的准备

Ansible 服务器需求
当前 Ansible 可以运行在安装了 Python2.6/7 或Python 3(版本3.5及更高版本)的任何机器上(暂不支持 windows 机器做中心控制服务器)。

提示:Ansible 2.2引入对Python 3(3.5及更高版本)的技术预览。

被管理服务器需求
在被管理节点服务器上,你需要一种通信方式,通常是ssh, 默认情况它使用sftp。 如果它不可用,您可以在ansible.cfg中切换到scp。您还需要安装 Python2.6 或更高的 Python 版本。

提示:如果在远程机器的启用了 SELinux,你还需要安装 libselinux-python。

安装依赖

yum install gcc gcc-c++ automake libtool ncurses-devel libffi-devel

源码安装Python3

wget http://zlib.net/zlib-1.2.11.tar.xz
tar Jxf zlib-1.2.11.tar.xz -C /usr/local/src/
cd /usr/local/src/zlib-1.2.11/
CFLAGS="-fPIC -O3" ./configure --shared --64
make -j `cat /proc/cpuinfo | grep processor | wc -l` && make install
echo '# User Defined.' > /etc/ld.so.conf.d/complie.conf
echo '/usr/local/lib' >> /etc/ld.so.conf.d/complie.conf
cd -
wget https://www.openssl.org/source/openssl-1.0.2n.tar.gz
tar zxf openssl-1.0.2n.tar.gz -C /usr/local/src/
cd /usr/local/src/openssl-1.0.2n/
CFLAGS="-fPIC -O3" ./config --prefix=/usr/local/openssl shared threads zlib
make -j `cat /proc/cpuinfo | grep processor | wc -l` && make install
echo '/usr/local/openssl/lib' >> /etc/ld.so.conf.d/complie.conf
echo 'export PATH=/usr/local/openssl/bin:$PATH' > /etc/profile.d/openssl.sh
source /etc/profile.d/openssl.sh
cd -
wget http://prdownloads.sourceforge.net/tcl/tcl8.6.8-src.tar.gz
tar zxf tcl8.6.8-src.tar.gz -C /usr/local/src/
cd /usr/local/src/tcl8.6.8/unix
CFLAGS="-fPIC -O3" ./configure --enable-64bit
make -j `cat /proc/cpuinfo | grep processor | wc -l` && make install
cd -
wget http://prdownloads.sourceforge.net/tcl/tk8.6.8-src.tar.gz
tar zxf tk8.6.8-src.tar.gz -C /usr/local/src/
cd /usr/local/src/tk8.6.8/unix/
CFLAGS="-fPIC -O3" ./configure --enable-64bit
make -j `cat /proc/cpuinfo | grep processor | wc -l` && make install
cd -
wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
tar Jxf Python-3.6.4.tar.xz -C /usr/local/src/
cd /usr/local/src/Python-3.6.4/
CFLAGS="-fPIC -O3" ./configure --prefix=/usr/local/python3 --enable-shared --enable-optimizations --enable-ipv6 --with-tcltk-includes='-I /usr/local/include' --with-tcltk-libs='-I /usr/local/lib'
vim Modules/Setup
SSL=/usr/local/openssl
_ssl _ssl.c \
        -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
        -L$(SSL)/lib -lssl -lcrypto

提示:由于我的OpenSSL也是源码方式安装,故需在Python的编译源文件中明确指定其位置。

make -j `cat /proc/cpuinfo | grep processor | wc -l` && make install
echo 'export PATH=$PATH:/usr/local/python3/bin/' > /etc/profile.d/python.sh
source /etc/profile.d/python.sh
echo '/usr/local/python3/lib/' >> /etc/ld.so.conf.d/complie.conf
ldconfig && pip3 install --upgrade pip setuptools

安装Ansible

wget http://releases.ansible.com/ansible/ansible-latest.tar.gz
tar zxf ansible-latest.tar.gz -C /usr/local/src/
cd /usr/local/src/ansible-2.4.4.0/
rm -rf ~/.cache/
pip3 install -r requirements.txt
/usr/local/python3/bin/python3 setup.py install
ansible --version

安装好之后,会多出一些ansible的命令:

ssh密钥登陆

上面介绍了,Ansible是使用SSH来管理远程主机的,故配置SSH密钥登陆很有必要,避免执行任务时还要输入密码。

  1. 在控制主机上创建密钥对:
    su - ansible -s /bin/bash
    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

    此操作会在用户宿主目录下新建.ssh目录(如果没有的话),并且生成私钥文件id_rsa和公钥文件id_rsa.pub。私钥文件存放于连接方(如连接主机,终端管理工具),用于证明自己;公钥文件内容存放于被连接方用户目录的.ssh/authorized_keys文件内,授权此用户进行连接。

  2. 将公钥内容分发给需要连接的节点用户:
    ssh-copy-id -p 22 [email protected]
    ssh-copy-id -p 22 [email protected]

    可以看到,源文件为上面生成的“id_rsa.pub”公钥文件;由于是第一次建立连接,会提示是否接受对端主机的ECDSA指纹标识,允许后会将其保存在~/.ssh/known_hosts中,如果拒绝连接将无法建立;然后会要求输入建立远端SSH连接用户的密码,认证通过后便将公钥内容复制到远程用户的~/.ssh/authorized_keys文件中。

  3. 验证使用密钥连接:
    ssh [email protected] "hostname"
    ssh [email protected] "hostname"

    可以看到连接过程十分顺利,不再需要使用密码。

发表评论

error: Content is protected !!