了解puppet自动化运维

了解Puppet

一、案例概述

作为一名系统管理员,维护服务器正常运行是最基本的职责。在管理几台到几十台服务器时,大部分管理员喜欢写自己的小工具来维护。但是随着服务器数量的增多, 任务量也逐渐增加,这时就需要简洁的、强大的框架来完成系统管理任务。 为实现这一目的, 引入一批工具。这批工具是“可编程”的,系统管理员只需要为这批工具写上几行“代码”,它便会自动完成所有的工作,Puppet 就是这批运维自动化工具中的其中一种。在一些大型互联网企业中, Puppet 运维自动化工具管理着几百甚至上千台服务器,它可以针对多台服务器进行统一操作,如部署统一软件、进行统 一上线维护等,而且能够快速完成上线部署,减少人力并降低人力误操作风险。

二、案例前置知识点

2.1 Puppet 工作原理

Puppet 的目的是让管理员只集中于要管理的目标,而忽略实现的细节。Puppet 既可以在单机上使用,也可以以 C/S 结构使用。在大规模使用 Puppet 的情况下,通常使用 C/S 结构。在这种结构中 Puppet 客户端只运行 Puppet Client, Puppet 服务器端只运行 Puppet Master。

2.2 Puppet 工作流程

  • 户端 Puppet 调用 Facter 工具( Facter 是通过 SSL 加密收集及检测分析客户端配置信息的一个工具),Facter 探测出主机的一些变量,如主机名、内存大小、 IP 地址等。Puppet 把这些信息通过 SSL 连接发送到服务器端。

  • 服务器端的 Puppet Master 通过 Facter 工具分析检测客户端的主机名, 然后找到项目主配置文件 manifest 里面对应的 node 配置, 并对该部分内容进行解析。 Facter 发送过来的信息可以作为变量处理, node 牵涉到的代码才解析, 其他没牵涉的代码不解析。解析分为几个阶段,首先进行语法检查。如果语法没错,就继续解析 。解析的结果生成一个中间的“伪代码”,然后把伪代码发给客户端。

  • 客户端接收到“伪代码”并且执行,客户端把执行结果发送给服务器。

  • 服务器端把客户端的执行结果写入日志。

2.3 Puppet 工作中的注意事项

1.为了保证安全,Client 和 Master 之间是基于 SSL 和证书的,只有经 Master 证书认证的 Client 才能与 Master 通信。

2.Puppet 会让系统保持在人们所期望的某种状态并一直维持下去。例如检测某个文件并保证其一直存在,保证 SSH 服务始终开启,如果文件被删除了或者 SSH 服务被关闭了,Puppet 下次执行时(默认 30 分钟),会重新创建该文件或者启动 SSH 服务。

部署Puppet并创建SSH服务

资源配置

操作系统配置主机名/IP软件
CentOS 7.92C2Gmaster.puppet.compuppet-server
CentOS 7.92C2Gclient01.puppet.compuppet
CentOS 7.92C2Gclient02.puppet.compuppet

一、基础环境

1.1 关闭防火墙

 systemctl stop firewalld
 systemctl disable firewalld

1.2 关闭selinux

 sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
 reboot

1.3 修改主机名

 hostnamectl set-hostname master.puppet.com
 hostnamectl set-hostname client01.puppet.com
 hostnamectl set-hostname client02.puppet.com

1.4 配置hosts 映射

 cat >> /etc/hosts << EOF
 172.16.10.10 master.puppet.com
 172.16.10.11 client01.puppet.com
 172.16.10.12 client02.puppet.com
 EOF

1.5 时间同步

 yum -y install chrony
 systemctl start chronyd
 chronyc sources -v

二、Puppet 安装与部署

2.1 安装puppet yum源

  • puppet服务端、客户端都要执行

 ## 上传 puppetlabs-release-7-12.noarch.rpm
 rpm -ivh puppetlabs-release-7-12.noarch.rpm

2.2 master节点,安装puppet服务端

 yum -y install puppet-server
 systemctl start puppetmaster
 systemctl enable puppetmaster

2.3 client节点,安装并配置puppet客户端

 yum -y install puppet
 ## 客户端修改配置文件。客户端都要执行
 vim /etc/puppet/puppet.conf 
 ##在[main]下面加上server这一行:指定master服务端主机名
     server = master.puppet.com
     

2.4 客户端注册

# 客户端申请注册。客户端执行
puppet agent --server=master.puppet.com --no-daemonize --verbose
##执行后界面会停留在前端界面,待服务端同意申请后,可以使用 Ctrl+C 结束

# 服务端查看申请。服务端执行
puppet cert --list
# 服务端同意申请。服务端执行
##同意指定客服端申请
puppet cert sign client01.puppet.com 
##同意全部客户端申请
puppet cert sign --all  
# 清理注册
puppet cert --clean client01.puppet.com

# 注册成功后,可以通过目录去查看已经注册的客户端
ll /var/lib/puppet/ssl/ca/signed/

三、配置实例:部署shh服务

3.1 配置测试节点

# Master 需要使用的相关配置文件如下
# 节点信息:/etc/puppet/manifests/nodes/
# 模块信息:/etc/puppet/modules/

# Master 上创建需要的目录
mkdir -p /etc/puppet/modules/ssh/{manifests,templates,files}
mkdir /etc/puppet/modules/ssh/files/ssh
mkdir /etc/puppet/manifests/nodes
chown -R puppet modules/

3.2 配置模块配置文件 install.pp

vim /etc/puppet/modules/ssh/manifests/install.pp
##检测是否安装ssh服务(首先确定客户端安装 SSH 服务)
class ssh::install{
    package{"openssh":
        ensure => present,
    }
}

3.3 配置模块配置文件 config.pp

vim /etc/puppet/modules/ssh/manifests/config.pp
# 输入以下信息配置需要同步的文件
class ssh::config{
    # 配置客户端需要同步的文件
    file { "/etc/ssh/sshd_config":
        # 确定客户端此文件存在
        ensure => present,
        # 文件所属用户
        owner =>"root",
        # 文件所属组
        group =>"root",
        # 文件属性
        mode =>"0600",
        # 从 服 务 器 端 同步文件
        source =>"puppet://$puppetserver/modules/ssh/ssh/sshd_config",
        # 调用 install.pp 确定 ssh 已经安装
        require => Class["ssh::install"],
        # 如果 config.pp 发生变化通知 service.pp
        notify => Class["ssh::service"],
    }
}

3.4 创建模块配置文件 service.pp

vim /etc/puppet/modules/ssh/manifests/service.pp
class ssh::service {
    service {"sshd":
        ensure=>running,
        hasstatus=>true,
        hasrestart=>true,
        enable=>true,
        require=>Class["ssh::config"]
    }
}

3.5 创建模块主配置文件 init.pp

vim /etc/puppet/modules/ssh/manifests/init.pp
class ssh{
    include ssh::install,ssh::config,ssh::service
}

3.5 建立服务器端 ssh 统一维护文件

# 复制服务器端/etc/ssh/sshd_config 文件到模块默认路径
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown -R puppet /etc/puppet/modules/ssh/files/ssh/

3.6 建立服务器端 ssh 统一维护文件

# 复制服务器端/etc/ssh/sshd_config 文件到模块默认路径
cp /etc/ssh/sshd_config /etc/puppet/modules/ssh/files/ssh/
chown -R puppet /etc/puppet/modules/ssh/files/ssh/

3.7 创建测试节点配置文件

vim /etc/puppet/manifests/nodes/ssh.pp
node 'client01.puppet.com'{
    include ssh
}
node 'client02.puppet.com'{
    include ssh
}

3.8 将测试节点载入 Puppet,即修改 site.pp

vim /etc/puppet/manifests/site.pp
import "nodes/ssh.pp"

3.9 修改服务端维护的sshd_config 配置文件

vim /etc/puppet/modules/ssh/files/ssh/sshd_config
## 取消注释并修改端口号为 2222
Port 9922 //取消注释并修改为 2222

3.10 重启 puppet master服务

# 查看目录文件层级
tree /etc/puppet/
# 重启
systemctl restart puppetmaster

3.11 配置同步

  • 客户端主动拉取

# 在其中一台 client01.puppet.com 客户端上,执行以下操作从服务器端主动拉取 配置
puppet agent -t

# 查看服务器 SSH 服务是否重启,端口是否生效
netstat -tunlp | grep ssh
  • 服务端主动推送

    • 当大规模部署时不可能在每台客户端都采用拉取动作,而此时用服务器推送模式反而更合理。

# 在客户端 client02.puppet.com 上做修改
# 修改 puppet 配置文件
vim /etc/puppet/puppet.conf
##最后一行添加以下内容
listen = true   ## 使 Puppet 监听 8139 端口

# 修改验证配置文件 auth.conf 定义一些验证信息及访问权限
vim /etc/puppet/auth.conf
##最后一行添加以下内容
allow *

# 启动 Puppet Agent 客户端
systemctl start puppetagent

# 修改客户端 client02.puppet.com 的/etc/ssh/sshd_config 文件,将 Port 9922 还原成最初始状态,然后重启 sshd 服务

# 向 client02.puppet.com 节点推送配置
puppet kick client02.puppet.com

# puppet kick -p 10  -host 客户端  
#-p表示一批10个客户端推送   --host 推送给谁
puppet kick –d --host `cat puppet.txt`
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值