阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ansible自动化工具部署实例

113次阅读
没有评论

共计 19274 个字符,预计需要花费 49 分钟才能阅读完成。

关于 puppet 的说明这里就不详细介绍了,这里主要介绍 puppet 的安装方式,和一些基本模块的应用。下面我们直接开始 puppet 的部署安装吧!
特别说明:请注意客户端和服务器端版本要一致。如果版本不一致的话,那么高版本的只能是 puppet server, 另一台只能作为 puppet 客户端,也就是说 puppet 服务端的版本可以大于或者等于客户端版本。
123 1. 关闭防火墙
[root@puppet01~]service iptables stop
[root@puppet01~]chkconfig iptables off

12 2. 设置 selinux
[root@puppet01~]sed -i’s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config

123456 3. 修改服务端跟客户端 hosts 文件, 添加 IP 和主机名称
[root@puppet01~]# cat /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4localhost4.localdomain4
::1        localhost localhost.localdomainlocalhost6 localhost6.localdomain6
192.168.1.231 puppetserver 
192.168.1.232 puppetclient

123 4. 服务端安装 puppetmaster
rpm-Uvh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
yum install puppet-server –y

123 5. 客户端安装 puppet
rpm-Uvh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
yum install puppet -y

12 6. 服务端开启 puppetmaster 服务
/etc/init.d/puppetmasterstart

12 7. 客户端证书申请
puppetagent –server puppetserver –test

123 8. 服务端查看证书是否生成
[root@puppet01~]# puppet cert –list
  “puppet02” (SHA256)36:1F:C6:80:48:66:90:52:87:3B:55:AB:6C:66:31:3F:33:35:CF:AE:8A:3A:BA:F9:D0:70:EE:C2:3F:FD:23:9C

12345 9. 服务端颁发证书
1. 可以为特定的主机颁发证书命令:puppetcert –s 
2. 给所有的主机颁发证书命令:puppetcert –s and –a 
为客户端颁发证书:
puppetcert –s puppetclient #后面是主机名

123456789 10. 客户端 /tmp 下面创建个 test.txt 文件, 做测试
touchtest.txt
# 服务端下面编辑 site.pp
vi /etc/puppet/manifests/site.pp 
node default {
file {
“/tmp/test.txt”: content => “helo,test!”; 
  } 
}

12345678910111213141516171819202122 11. 客户端测试
puppetagent –server puppetserver –test
  成功信息:
  Info:Caching certificate for puppetclient
Info:Caching certificate_revocation_list for ca
Info:Caching certificate for puppetclient
Info:Retrieving pluginfacts
Info:Retrieving plugin
Info:Caching catalog for puppetclient
Info:Applying configuration version ‘1426557149’
Notice:/Stage[main]/Main/Node[default]/File[/tmp/test.txt]/content: 
—/tmp/test.txt    2015-03-1621:51:08.889040996 -0400
+++/tmp/puppet-file20150316-1468-1n3cxlt-0 2015-03-1621:52:29.746041636 -0400
@@-0,0 +1 @@
+hello,test!
\No newline at end of file
 
Info:Computing checksum on file /tmp/test.txt
Info:/Stage[main]/Main/Node[default]/File[/tmp/test.txt]: Filebucketed /tmp/test.txtto puppet with sum d41d8cd98f00b204e9800998ecf8427e
Notice:/Stage[main]/Main/Node[default]/File[/tmp/test.txt]/content: content changed'{md5}d41d8cd98f00b204e9800998ecf8427e’ to'{md5}18ea2a60db7763506261f87ecb82fb96′
Info:Creating state file /var/lib/puppet/state/state.yaml
Notice:Finished catalog run in 0.05 seconds

12345 12. 设置 puppet 自动认证
在服务端的 puppet.conf 配置文件里面 [main] 下方加入
autosign= true
然后重启 puppetmaster 服务。
# 这样在客户端执行 puppetd –server=puppetserver –test 服务端会自动认证

12345 13. 重新生成证书:
因为很多时候需要更换主机名称,所以需要重新认证
1. 首先在客户端删除:rm –rf /var/lib/puppet/ssl 文件夹
2. 然后在服务端删除:puppet cert–clean puppetclient
3. 最后重新获取证书:puppet agent–server puppetserver –test

123456789101112131415161718 14. 客户端配置 puppet 相关参数和同步时间:
vi /etc/puppet/sysconfig/puppet
#The puppetmaster server
PUPPET_SERVER=puppetserver
#If you wish to specify the port to connect to do so here
PUPPET_PORT=8140
#Where to log to. Specify syslog to send log messages to the system log.
PUPPET_LOG=/var/log/puppet/puppet.log
#You may specify other parameters to the puppet client here
PUPPET_EXTRA_OPTS=–waitforcert=500
# 最后重启 puppet 服务
/etc/init.d/puppetstart
# 默认配置完毕后,客户端是半小时同步一次的,我们可以修改同步的时间间隔:
vim/etc/puppet/puppet.conf
# 在 [agent] 下方加入:runinterval = 60 
# 代表是 60 秒跟服务器同步一次
# 最后重启 puppet 服务
/etc/init.d/puppetstart

12345678910111213141516171819202122 15.puppetrun 的使用 (puppet kick)
# 在服务器端使用 puppetrun 这个命令可以给客户端发送一段信号,告诉客户端立刻跟服务器同步
1.    修改客户端上的 puppet 配置文件
vim /etc/puppet/puppet.conf
在[agent]下方添加
listen = true #目的是让 puppet 监听 8139 端口
2.    修改客户端的 puppet 的 /etc/sysconfig/puppet 文件
vim /etc/sysconfig/puppet
PUPPET_SERVER=puppetserver  #server 主机名称
3.    在客户端新建 namespaceauth.conf 文件
[puppetrunner]
allow *
4.    在客户端修改 auth.conf, 在 paht / 的前面添加以下内容:
#test
path /run
method save
allow *
5.    最后重启 puppet 服务
/etc/init.d/puppet restart
6.    在服务端测试命令:
puppet kick –d host puppetclient
#code 0 表示成功

1234567891011121314151617 16. 文件同步
1. 首先编辑 fileserver.conf 文件:
[root@masterpuppet]# vim fileserver.conf
[files]    定义模块名称è后面的 site.pp 里面要调用这个名称
path/opt/
allow192.168.1.0/24
 
2. 然后编辑 site.pp 文件:
[root@masterpuppet]# vim manifests/site.pp
file{“/opt”:  # 传输的文件名称这个可以随便写
source=>”puppet:///files/”, #要传输的文件
recurse=> true;  # 传送该目录下所有文件
}
#puppet://” 等价于主配置文件 puppet.config 中的 modulepath 值
 
3. 最后执行命令
puppet agent –server puppetserver –test

    以上就是 puppet 的基本介绍了。关于 puppet 的功能不仅能够管理多台服务器,执行文件的同步,安装软件,管理服务等功能,还可以结合 svn 发布代码!
    好了,puppet 的基本安装就到此!今后会继续更新 puppet+svn 代码发布的方案!

上次写了个 Puppet 安装的文档,今天给大家介绍另外一款自动化运维工具:Ansible

Ansible 自动化工具只需要在一台机器上安装,其他机器不需要安装任何东西,这就是 ansible 比 puppet, saltstck 方便的地方。ansible 的特点有哪些呢?下面为你逐个介绍:

特点:
(1)、轻量级,无需在客户端安装 agent,更新时,只需在操作机上进行一次更新即可;
(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
(3)、使用 Python 编写,维护更简单;
(4)、基于 SSH 工作;
(5)、支持文件同步并且对修改之前的文件进行备份,支持回滚;
        好了,下面我们开始安装 ansible:首先得准备好安装环境

我这里准备了两台机器:
    server1: 192.168.1.231 
    server2: 192.168.1.232

一、安装准备
# 在 server1 上部署
# 关闭防火墙 iptables
service iptables stop
chkconfig iptables off
 
# 并且修改 SELINUX=disabled
sed -i’s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config
 
# 使用 yum 安装 python 等软件
 yum install PyYAML.x86_64 python-paramiko.noarch python-jinja2.x86_64 python-devel –y

二、下载安装包
# 下载 ansible 和 setuptools 安装包
wget https://pypi.python.org/packages/source/a/ansible/ansible-1.7.2.tar.gz
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz

三、解压安装软件
# 解压安装 setuptools
tar zfxv setuptools-7.0.tar.gz
cd setuptools-7.0
python setup.py install
cd ..
 
# 解压安装 ansible
tar fzvx ansible-1.7.2.tar.gz 
cd ansible-1.7.2
python setup.py build 
python setup.py install
mkdir /etc/ansible
cp examples/ansible.cfg /etc/ansible/
cp examples/hosts /etc/ansible/
cd ..

四、修改配置文件
# 配置 ansible, 我这里默认是不需要修改的
vi /etc/ansible/ansible.cfg
hostfile      = /etc/ansible/hosts
library        = /usr/share/ansible
remote_tmp    = $HOME/.ansible/tmp
pattern        = *
forks          = 5
poll_interval  = 15
sudo_user      = ansible
#ask_sudo_pass = True
#ask_pass      = True
transport      = smart
remote_port    = 22
module_lang    = C
 
# 修改 /etc/ansible/hosts 文件
#local_Server
[localhost]
127.0.0.1
#client
[client]
192.168.1.232  #server2 的 IP

五、SSH 通信设置
#ssh 互信
[root@ansibleserver ~]#ssh-keygen –b 1024 -t rsa
# 不断的回车即可
The key’s randomart image is:
+–[RSA 2048]—-+
|    o  o.        |
|    +=o .      |
|    .=+* o      |
|      o* OE.    |
|      .S.=      |
|      +..      |
|      . +        |
|      .        |
|                |
+—————–+

# 然后进入.ssh/ 目录下
[root@ansibleserver ~]#cd .ssh/
cat *.pub > authorized_keys
chmod –R 700 .
 
# 再通过 scp 命令将 authorized_keys 拷贝到客户端 192.168.1.232
scp authorized_keys root@192.168.1.232:/root/.ssh/authorized_keys
 
# 执行 scp 出现的错误以及解决方法:
scp: /root/.ssh/authorized_keys: No such file or directory
# 解决方法:在客户端也直接生成一个 ssh-keygen –b 124 –t rsa 文件即可,这样的做法主要是生成.ssh/ 的目录,服务端才能够将公钥拷贝过去

# 测试互信是否成功
[root@ansibleserver ~]# ssh 192.168.1.232
Last login: Tue Mar 17 22:56:26 2015 from 192.168.1.231
# 无需密码,直接登录成功!说明互信已经成功了!
[root@localhost ~]# ifconfig 
eth1      Link encap:Ethernet  HWaddr 08:00:27:41:28:38 
          inetaddr:192.168.1.232 Bcast:192.168.1.255 Mask:255.255.255.0

六、模块测试

模块命令
-i 设备列表路径,可以指定一些动态路径
-f 并发任务数
-private-key 私钥路径
-m 模块名称
-M 模块夹的路径
-a 参数
-k 登陆密码
-K sudo 密码
-t 输出结果保存路径
-B 后台运行超时时间
-P 调查后台程序时间
-u 执行用户
-U sudo 用户
-l 限制设备范围
-s 是此用户 sudo 无需输入密码

ping 模块
# 使用 ansible 的 ping 模块测试 client 是否能够通信!
# 注意:all 代表所有 client 的意思
[root@ansibleserver ~]# ansible all -m ping
192.168.1.232 | success >> {
    “changed”: false, 
    “ping”:”pong”
}
127.0.0.1 | success >> {
    “changed”: false, 
    “ping”:”pong”
}
 
# 查看时间
[root@ansibleserver ~]# ansible all -m command -a “date”
192.168.1.232 | success | rc=0 >>
Tue Mar 17 23:06:43 EDT 2015
127.0.0.1 | success | rc=0 >>
Tue Mar 17 23:06:44 EDT 2015

安装软件测试
[root@ansibleserver ~]# ansible all -m command -a “yum install unzip -y”
192.168.1.232 | success | rc=0 >>
Loaded plugins: fastestmirror
Setting up Install Process
Determining fastest mirrors
…………
Installed:
  unzip.x86_64 0:6.0-1.el6                                                     
Complete!

copy 模块
# 拷贝文件到远程主机
相关选项如下:
backup:在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值
dest:必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
directory_mode:递归设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为 yes,则强制覆盖,如果为 no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为 yes
others:所有的 file 模块里的选项都可以在这里使用
src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于 rsync。

实例:拷贝本地的 /root/script 目录所有内容到 192.168.1.232 的 /tmp 目录下
注意:因为 script 后面没有加 /,所以拷贝的是整个目录
ansible 192.168.1.232 -m copy -a “src=/root/script dest=/tmp/owner=root group=root mode=0644”
# 拷贝成功的返回信息
192.168.1.232 | success >> {
  “changed”: true, 
  “dest”: “/tmp/”, 
  “src”: “/root/script”
}
 
# 切换到 192.168.1.232 机器中查看
[root@localhost ~]# ls /tmp/script/
a.txt  b.txt
# 拷贝 script 目录的文件实例:
注意:这里的 script 后面是加了 /,所以只拷贝 script 目录下的文件
[root@ansibleserver script]# ansible 192.168.1.232 -m copy -a”src=/root/script/ dest=/tmp/script/ owner=root group=root mode=0644″
192.168.1.232 | success >> {
    “changed”: true, 
    “dest”:”/tmp/script/”, 
    “src”:”/root/script”
}

在 192.168.1.232 的 script 目录下查看内容
[root@localhost script]# ll
total 0
-rw-r–r– 1 root root 0 Mar 17 23:38 a.txt
-rw-r–r– 1 root root 0 Mar 17 23:38 b.txt
-rw-r–r– 1 root root 0 Mar 1723:38 c.txt
-rw-r–r– 1 root root 0 Mar 1723:38 d.txt
#backup 参数:有 yes|no 两个选项
ansible 192.168.1.232 -m copy -a “src=/root/script/ dest=/tmp/script/owner=root group=root mode=0644 backup=yes”
提示:例如,src 和 dest 同时有个 a.txt 文件,如果在 src 修改了 a.txt  再执行 copy 的时候,dest 就会生成一个备份
 
[root@localhost script]# ll
total 4
-rw-r–r– 1 root root 12 Mar 18 03:09 a.txt
-rw-r–r– 1 root root  0 Mar 18 03:08 a.txt.2015-03-18@03:09~ 
# 因为 a.txt 被修改过了,所以生成了一个备份
 
[root@localhost script]# cat a.txt  #这里被修改过,然后 copy 过来的
hello world
[root@localhost script]# cat a.txt.2015-03-18\@03\:09~ #备份的 a.txt 默认没有内容

file 模块
# 使用 file 模块,更改文件的用户和权限
[root@ansibleserver ~]# ansible 192.168.1.232 -m file -a “dest=/tmp/a.txtmode=600”
# 查看更改情况
[root@localhost tmp]# ll
total 8
-rw——-  1 root root    0 Mar 17 23:38 a.txt
 
# 创建目录,类似 mkdir –p
[root@ansibleserver ~]# ansible 192.168.1.232 -m file -a”dest=/tmp/to/c mode=755 owner=root group=root state=directory”
 
# 查看创建情况
[root@localhost c]# pwd
/tmp/to/c
# 删除文件或者目录
[root@ansibleserver ~]# ansible 192.168.1.232 -m file -a”dest=/tmp/a.txt state=absent”
192.168.1.232 | success >> {
    “changed”: true, 
    “path”:”/tmp/a.txt”, 
    “state”:”absent”
}
 
# 查看删除情况
[root@localhost tmp]# ll
total 8
-rw-r–r–  1 root root    0 Mar 17 23:38 b.txt
drwxr-xr-x  2 root root 4096 Mar 1723:38 script
drwxr-xr-x  3 root root 4096 Mar 1723:53 to
-rw——-. 1 root root    0 Dec 2819:45 yum.log

cron 模块
# 注意:cron 是为远程主机定义任务计划的
# 批量定义远程主机上的定时任务
# 首先我们在本地的 /etc/ansible/ 目录下定义一个 cron.yml 文件
– hosts: 192.168.1.232  #远程主机 IP
  remote_user: root    #指定执行的用户
  tasks:                #任务
    – name: cron      #任务名称
      cron: name=’cp file’ minute=1job=’/usr/bin/tmp/script/test.sh’
提示:name 为注释名称,minute 为执行任务的时间间隔,job 为执行的脚本
 
# 定义好之后,我们执行下 ansible-playbook 命令
[root@ansibleserver ansible]# ansible-playbook cron.yml
PLAY RECAP********************************************************************
192.168.1.232              :ok=2    changed=1    unreachable=0    failed=0
# 出现 ok=2 change=1, 代表已经在远程机子上做好定时任务了
 
# 在远程主机上查看:
[root@ansible-client script]# crontab -l
#Ansible: cp file
1 * * * * /usr/bin/tmp/script/test.sh

实例 2:
目的:在指定节点上定义一个计划任务,每隔 3 分钟到主控端更新一次时间
命令:ansible all-m cron -a ‘name=”custom job” minute=*/3 hour=* day=* month=*weekday=* job=”/usr/sbin/ntpdate 172.16.254.139″‘

synchronize 模块
# 先声明下,使用 rsync 模块,远程主机系统必须安装 rsync 包,否则无法使用这个模块
# 先给远程机装个 rsync 吧
[root@ansibleserver ~]# ansible 192.168.1.232 -m yum -a ‘name=rsyncstate=latest’
# 再次验证下 rsync 是否安装成功
[root@ansibleserver ~]# ansible 192.168.1.232 -a “which rsync”
192.168.1.232 | success | rc=0 >>
/usr/bin/rsync
# 看来没问题了!

# 看下使用的参数
[root@ansibleserver ~]# ansible-doc -s synchronize
– name: Uses rsync to make synchronizing file paths in your playbooks quickand easy.
action: synchronize
archive                # 是否采用归档模式同步,即以源文件相同属性同步到目标地址
checksum              # 是否效验
compress              # 是否压缩
copy_links            # 同步的时候是否复制连接
delete                # 删除源中没有而目标存在的文件
dest=                  # 目标地址
dest_port              # 目标接受的端口
dirs                  # 以非递归的方式传输目录
existing_only          # Skipcreating new files on receiver.
group                  # Preservegroup
links                  # Copysymlinks as symlinks.
mode                  # 模式,rsync 同步的方式 PUSH\PULL
recursive              # 是否递归 yes/no
rsync_opts            # 使用 rsync 的参数
rsync_path            # 服务的路径(源码编译时需指定)
rsync_timeout          # Specify a–timeout for the rsync command in seconds.
set_remote_user        # put user@for the remote paths. If you have a custom ssh config to define the remote userfor
src=\’#\'” /pre><PRE class=”brush”:bash;toolbar:false> 实例:将 ansible 端 /tmp/ 目录下的 script 同步到 232 机子的 /tmp/ 目录下面
[root@ansibleserver ~]# ansible 192.168.1.232 -m synchronize -a ‘src=/tmp/scriptdest=/tmp/’ 
192.168.1.232 | success >> {
    “changed”: true, 
    “cmd”: “rsync–delay-updates -FF –compress –archive –rsh ‘ssh  -o StrictHostKeyChecking=no’–out-format='<<CHANGED>>%i %n%L’ \”/tmp/script\”\”root@192.168.1.232:/tmp/\””, 
    “msg”:”cd+++++++++ script/\n<f+++++++++ script/a.txt\n”, 
    “rc”: 0, 
    “stdout_lines”: [
        “cd+++++++++script/”, 
        “<f+++++++++script/a.txt”
    ]
}
# 注意:要想 ansible 端于远程端的文件保持一致,最好用 delete=yes 参数
因为,有时候在 ansible 的目录下删除了某个文件,若不加 delete=yes 参数的话,远程端的目录下仍然保留有旧的文件!

# 启动 client 的 httpd 服务
[root@ansibleserver ~]# ansible 192.168.1.232 -m service -a”name=httpd state=started”
192.168.1.232 | success >> {
    “changed”: true, 
    “name”:”httpd”, 
    “state”:”started”
}
# 注意:state 的状态有:started  restarted  stoped
#client 端查看情况
[root@localhost ~]# netstat -lntup|grep httpd
tcp        0      0 :::80                      :::*                        LISTEN      1565/httpd

# 收集主机的所有系统信息
[root@ansibleserver ~]# ansible 192.168.1.232 -m setup
# 收集系统信息并以主机名为文件名分别保存在 /tmp/facts 目录
[root@ansibleserver facts]# ansible 192.168.1.232 -m setup –tree/tmp/facts
[root@ansibleserver facts]# ll
total 12
-rw-r–r– 1 root root 8656 Mar 18 00:25 192.168.1.232
# 收集系统内存相关信息
[root@ansibleserver ~]# ansible 192.168.1.232 -m setup -a’filter=ansible_*_mb’
192.168.1.232 | success >> {
    “ansible_facts”: {
      “ansible_memfree_mb”: 299, 
      “ansible_memtotal_mb”: 490, 
      “ansible_swapfree_mb”: 2047, 
      “ansible_swaptotal_mb”: 2047
    }, 
    “changed”: false
}
# 收集网卡信息
[root@ansibleserver ~]# ansible 192.168.1.232 -m setup -a’filter=ansible_eth[0-2]’

对于需反复执行的、较为复杂的任务,我们可以通过定义 Playbook 来搞定。Playbook 是 Ansible 真正强大的地方,它允许使用变量、条件、循环、以及模板,也能通过角色及包含指令来重用既有内容。下面我们来看看一些具体的实例。

# 首先在 /etc/ansible 目录下建立一个 php.yaml 的文件
[root@ansibleserver ansible]# vim php.yaml
– hosts: 192.168.1.232  #主机名,如果是全部主机,可以用 all
  remote_user: root    #指定执行操作的用户
  tasks:                #任务
    – name: php installing  #起个任务的名字
      yum: name=php state=present #利用 yum 模块,安装软件的包名为 php
参数:present 为安装  absent 为卸载
提示:注意对齐的格式,不然会出错
 
# 用 ansible-playbook 参数调用 php.yaml
[root@ansibleserver ansible]# ansible-playbook php.yaml 
PLAY [192.168.1.232]********************************************************** 
GATHERING FACTS*************************************************************** 
ok: [192.168.1.232]
TASK: [php installing]******************************************************** 
changed: [192.168.1.232]
PLAY RECAP ********************************************************************
192.168.1.232            : ok=2    changed=1    unreachable=0    failed=0
# 看到结果,ok=2  changed=1 说明客户机 (232) 上的 php 安装成功了!

# 建立一个 cron.yaml 文件,然后每月 10 号来运行 /root/dd.sql 脚本
#cron 定时任务参数
# Ensure a job that runs at 2 and 5 exists.
# Creates an entry like “* 5,2 * * ls -alh > /dev/null”
– cron: name=”check dirs” hour=”5,2″ job=”ls -alh> /dev/null”
# Ensure an old job is no longer present. Removes any job that is prefixed
# by “#Ansible: an old job” from the crontab
– cron: name=”an old job” state=absent
 
# Creates an entry like “@reboot /some/job.sh”
– cron: name=”a job for reboot” special_time=rebootjob=”/some/job.sh”
 
# Creates a cron file under /etc/cron.d
– cron: name=”yum autoupdate” weekday=”2″ minute=0hour=12
        user=”root”job=”YUMINTERACTIVE=0 /usr/sbin/yum-autoupdate”
      cron_file=ansible_yum-autoupdate
# Removes a cron file from under /etc/cron.d
– cron:cron_file=ansible_yum-autoupdate state=absent

# 关于 ansible 的介绍就到此,有不足之处,希望大家多多指教!

Ansible 和 Docker 的作用和用法  http://www.linuxidc.com/Linux/2014-11/109783.htm

Ansible 批量搭建 LAMP 环境 http://www.linuxidc.com/Linux/2014-10/108264.htm

Ansible:一个配置管理和 IT 自动化工具  http://www.linuxidc.com/Linux/2014-11/109365.htm

Linux 下安装部署 Ansible http://www.linuxidc.com/Linux/2015-02/112774.htm

Ansible 的详细介绍:请点这里
Ansible 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-04/115646.htm

关于 puppet 的说明这里就不详细介绍了,这里主要介绍 puppet 的安装方式,和一些基本模块的应用。下面我们直接开始 puppet 的部署安装吧!
特别说明:请注意客户端和服务器端版本要一致。如果版本不一致的话,那么高版本的只能是 puppet server, 另一台只能作为 puppet 客户端,也就是说 puppet 服务端的版本可以大于或者等于客户端版本。
123 1. 关闭防火墙
[root@puppet01~]service iptables stop
[root@puppet01~]chkconfig iptables off

12 2. 设置 selinux
[root@puppet01~]sed -i’s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config

123456 3. 修改服务端跟客户端 hosts 文件, 添加 IP 和主机名称
[root@puppet01~]# cat /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4localhost4.localdomain4
::1        localhost localhost.localdomainlocalhost6 localhost6.localdomain6
192.168.1.231 puppetserver 
192.168.1.232 puppetclient

123 4. 服务端安装 puppetmaster
rpm-Uvh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
yum install puppet-server –y

123 5. 客户端安装 puppet
rpm-Uvh http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-1.noarch.rpm
yum install puppet -y

12 6. 服务端开启 puppetmaster 服务
/etc/init.d/puppetmasterstart

12 7. 客户端证书申请
puppetagent –server puppetserver –test

123 8. 服务端查看证书是否生成
[root@puppet01~]# puppet cert –list
  “puppet02” (SHA256)36:1F:C6:80:48:66:90:52:87:3B:55:AB:6C:66:31:3F:33:35:CF:AE:8A:3A:BA:F9:D0:70:EE:C2:3F:FD:23:9C

12345 9. 服务端颁发证书
1. 可以为特定的主机颁发证书命令:puppetcert –s 
2. 给所有的主机颁发证书命令:puppetcert –s and –a 
为客户端颁发证书:
puppetcert –s puppetclient #后面是主机名

123456789 10. 客户端 /tmp 下面创建个 test.txt 文件, 做测试
touchtest.txt
# 服务端下面编辑 site.pp
vi /etc/puppet/manifests/site.pp 
node default {
file {
“/tmp/test.txt”: content => “helo,test!”; 
  } 
}

12345678910111213141516171819202122 11. 客户端测试
puppetagent –server puppetserver –test
  成功信息:
  Info:Caching certificate for puppetclient
Info:Caching certificate_revocation_list for ca
Info:Caching certificate for puppetclient
Info:Retrieving pluginfacts
Info:Retrieving plugin
Info:Caching catalog for puppetclient
Info:Applying configuration version ‘1426557149’
Notice:/Stage[main]/Main/Node[default]/File[/tmp/test.txt]/content: 
—/tmp/test.txt    2015-03-1621:51:08.889040996 -0400
+++/tmp/puppet-file20150316-1468-1n3cxlt-0 2015-03-1621:52:29.746041636 -0400
@@-0,0 +1 @@
+hello,test!
\No newline at end of file
 
Info:Computing checksum on file /tmp/test.txt
Info:/Stage[main]/Main/Node[default]/File[/tmp/test.txt]: Filebucketed /tmp/test.txtto puppet with sum d41d8cd98f00b204e9800998ecf8427e
Notice:/Stage[main]/Main/Node[default]/File[/tmp/test.txt]/content: content changed'{md5}d41d8cd98f00b204e9800998ecf8427e’ to'{md5}18ea2a60db7763506261f87ecb82fb96′
Info:Creating state file /var/lib/puppet/state/state.yaml
Notice:Finished catalog run in 0.05 seconds

12345 12. 设置 puppet 自动认证
在服务端的 puppet.conf 配置文件里面 [main] 下方加入
autosign= true
然后重启 puppetmaster 服务。
# 这样在客户端执行 puppetd –server=puppetserver –test 服务端会自动认证

12345 13. 重新生成证书:
因为很多时候需要更换主机名称,所以需要重新认证
1. 首先在客户端删除:rm –rf /var/lib/puppet/ssl 文件夹
2. 然后在服务端删除:puppet cert–clean puppetclient
3. 最后重新获取证书:puppet agent–server puppetserver –test

123456789101112131415161718 14. 客户端配置 puppet 相关参数和同步时间:
vi /etc/puppet/sysconfig/puppet
#The puppetmaster server
PUPPET_SERVER=puppetserver
#If you wish to specify the port to connect to do so here
PUPPET_PORT=8140
#Where to log to. Specify syslog to send log messages to the system log.
PUPPET_LOG=/var/log/puppet/puppet.log
#You may specify other parameters to the puppet client here
PUPPET_EXTRA_OPTS=–waitforcert=500
# 最后重启 puppet 服务
/etc/init.d/puppetstart
# 默认配置完毕后,客户端是半小时同步一次的,我们可以修改同步的时间间隔:
vim/etc/puppet/puppet.conf
# 在 [agent] 下方加入:runinterval = 60 
# 代表是 60 秒跟服务器同步一次
# 最后重启 puppet 服务
/etc/init.d/puppetstart

12345678910111213141516171819202122 15.puppetrun 的使用 (puppet kick)
# 在服务器端使用 puppetrun 这个命令可以给客户端发送一段信号,告诉客户端立刻跟服务器同步
1.    修改客户端上的 puppet 配置文件
vim /etc/puppet/puppet.conf
在[agent]下方添加
listen = true #目的是让 puppet 监听 8139 端口
2.    修改客户端的 puppet 的 /etc/sysconfig/puppet 文件
vim /etc/sysconfig/puppet
PUPPET_SERVER=puppetserver  #server 主机名称
3.    在客户端新建 namespaceauth.conf 文件
[puppetrunner]
allow *
4.    在客户端修改 auth.conf, 在 paht / 的前面添加以下内容:
#test
path /run
method save
allow *
5.    最后重启 puppet 服务
/etc/init.d/puppet restart
6.    在服务端测试命令:
puppet kick –d host puppetclient
#code 0 表示成功

1234567891011121314151617 16. 文件同步
1. 首先编辑 fileserver.conf 文件:
[root@masterpuppet]# vim fileserver.conf
[files]    定义模块名称è后面的 site.pp 里面要调用这个名称
path/opt/
allow192.168.1.0/24
 
2. 然后编辑 site.pp 文件:
[root@masterpuppet]# vim manifests/site.pp
file{“/opt”:  # 传输的文件名称这个可以随便写
source=>”puppet:///files/”, #要传输的文件
recurse=> true;  # 传送该目录下所有文件
}
#puppet://” 等价于主配置文件 puppet.config 中的 modulepath 值
 
3. 最后执行命令
puppet agent –server puppetserver –test

    以上就是 puppet 的基本介绍了。关于 puppet 的功能不仅能够管理多台服务器,执行文件的同步,安装软件,管理服务等功能,还可以结合 svn 发布代码!
    好了,puppet 的基本安装就到此!今后会继续更新 puppet+svn 代码发布的方案!

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计19274字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中