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密钥登陆很有必要,避免执行任务时还要输入密码。
- 在控制主机上创建密钥对:
su - ansible -s /bin/bash ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
此操作会在用户宿主目录下新建.ssh目录(如果没有的话),并且生成私钥文件id_rsa和公钥文件id_rsa.pub。私钥文件存放于连接方(如连接主机,终端管理工具),用于证明自己;公钥文件内容存放于被连接方用户目录的.ssh/authorized_keys文件内,授权此用户进行连接。
- 将公钥内容分发给需要连接的节点用户:
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文件中。
- 验证使用密钥连接:
ssh [email protected] "hostname" ssh [email protected] "hostname"
可以看到连接过程十分顺利,不再需要使用密码。