随笔 - 11  文章 - 0  评论 - 0  阅读 - 1617

Puppet

  • puppet是一种集中配置管理系统,可管理配置文件、用户、cron任务、软件包、系统服务等。这些系统实体称为资源。
  • puppet是一个c/s结构,所有客户端同一个服务端通讯,每个客户端每半小时连接一次服务端,下载最新的配置文件,并且严格按照配置文件来配置服务器。配置完成以后,客户端可以反馈一个消息给服务端,出错也会反馈消息。
  • 他是大规模的集群管理工具,客户端每隔一段时间会连到服务端检查下资源变化情况,发生变化的话就会按照配置动作进行相关操作。
  • puppet所有可操作对象可以抽象为资源。目前涵盖40多种。

1、工作原理

  1. 客户端puppet调用facter,facter会探测出这台主机的一些变量,如主机名、内存大小、IP地址等信息。然后puppet客户端将这些信息发送到服务端。
  2. 服务端的【puppetmaster】进程检测到客户端的主机名,然后到mainfest里面对应的node配置,然后对这段内容进行解析,facter发送过来的信息可以作为变量进行处理,node牵涉到的代码才可解析,其他不解析,解析过程分为:语法检查、然后生成伪代码,然后把伪代码发送给客户端。
  3. 客户端接收到伪代码就会执行,然后执行结果发送给服务端。
  4. 服务端把客户端执行结果写入日志。

img

2、安装

puppet需要ruby支持Ruby支持。

puppet要求主机有完整的域名,如果没有DNS提供域名的话,可以在机器上设置主机名,注意需要先设置主机名,再安装Puppet。因为Puppet安装时,会把主机名写入证书,客户端和服务端通信需要这个证书。

# 修改主机名
hostnamectl set-hostname master

#配置域名解析
 vim /etc/hosts
192.168.200.11  master.weikuo.com
192.168.200.12  node.weikuo.com

> hostname master.weikuo.com

> vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=master.weikuo.com
GATEWAY=192.168.50.1

vim /etc/resolv.conf
search localdomain # 需要注释

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

#关闭SELinux安全模式
setenforce 0
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config

#配置时间同步
yum install -y ntpdate
ntpdate ntp1.aliyun.com

#配置CentOS镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

#更新YUM源
yum clean all
yum makecache

#升级系统
yum update

# 安装阿里云仓库
rpm -ivh https://mirrors.aliyun.com/puppet/yum/puppetlabs-release-el-7.noarch.rpm

# 主节点服务端安装
yum install -y puppet puppet-server facter

# 启动服务
systemctl  start  puppetmaster
systemctl  enable  puppetmaster

# puppetmaster服务开启后,默认监听TCP 8140

# 客户端安装
yum install puppet  -y

3、申请证书命令

Puppet客户端与服务器端是通过SSL隧道通信,客户端安装完成,需要向服务器端申请证书。

Puppetmaster第一次启动会自动生成证书自动注册自己。

证书路径:/var/lib/puppet/ssl

客户端申请证书

puppet agent --server 服务端主机名 --test

imgExiting; no certificate found and waitforcert is disabled # 服务端没有同意证书

请求证书会存放在服务端的:/var/kib/puppet/ssl/ca/request,签发完毕会删除。

服务器端颁发证书

puppet cert -s 客户端主机名

puppet cert --list # 查看申请证书的客户端主机名

puppet cert -s # 给指定主机颁发证书

puppet cert --sign --all # 签发所有证书

客户端取回通过的证书

puppet agent --server 服务端主机名 --test

服务端自动签发证书

vim /etc/puppet/autosign.conf

*ewin.com # 所以来自ewin.com的机器,都自动签发证书

注销证书

puppet cert revoke 客户端主机名

puppet cert revoke --all

重装服务端

yum remove puppet-server puppet -y

rm -rf /etc/puppet

rm -rf /var/lib/puppet

yum install puppet-server -y

4、第一个案例

服务器端保存着所有对客户端服务器的配置代码,在puppet里叫manifest,客户端下载manifest之后,可以根据manifest对服务器进行配置,如软件包管理、用户管理和文件管理。

默认服务器的manifest目录在/etc/puppet下,只需要在该目录下创建site.pp文件,然后写入配置,客户端就可以和服务端在同步时,检查该文件,然后做相关的同步。

# 服务端
vim /etc/puppet/manifest/site.pp

node "base02.weikuo.com" {

  file {

    "/tmp/test2.txt": content => "hello,Puppet";
  }

}
node default {
# default是所有客户端都可以
  file {

    "/tmp/test2.txt": content => "hello,Puppet";
  }

}

# 客户端
puppet  agent  --server base01.weikuo.com --test

5、各种资源的案例

1)、file

负责文件管理。

file {

    "/tmp/test2.txt": content => "hello,Puppet";
  }
  
  # 新建文件test2.txt,且内容为hello,Puppet。
  file {
    "/tmp/nginx_install.sh": # 目标地址
    source => "puppet://服务端主机名/files/nginx_install.sh", # 源地址
    group => root,
    owner => root,
    mode => "755"
  }
  
# 服务端
>  vim /etc/puppet/fileserver.conf 
[files]
path /etc/puppet/files/
allow *

> mkdir /etc/puppet/files
> touch nginx_install.sh
> 

2)、package

软件包的安装管理。

package {
    ["screen","ntp"]: ensure => "installed";
    "pppoe": ensure => "absent";
  }
  # 安装screen和ntp,卸载pppoe

3)、service

系统服务管理。

service {
    "sshd": ensure => running;
    "nfs": ensure => stopped;
  }
  # 启动sshd,停止ntp服务。

4)、cron

配置自动任务计划

cron {
    "ntpdate": command =>"/usr/sbin/ntpdate pool.ntp.org",
    user => root,
    hour => 0,
    minute => 0,
  }
  # 0时0分 时间同步命令,设置crontab
  0 0 * * * /usr/sbin/ntpdate pool.ntp.org

5)、exec

远程执行运行命令。

# 远程执行命令
exec {
    "/tmp/nginx_install.sh":
    cwd => "/tmp",
    user => root,
    path =>["/usr/bin","/usr/sbin","bin","/bin/sh"],
  }
# 某个文件发生变化 执行命令
exec {
    "sysctl refresh kernel config":
    path => ["/usr/bin","/usr/sbin","bin","/bin/sh"],
    command => "/sbin/sysctl -p",
    subscribe => File["/etc/sysctl.conf"],
    refreshonly => true
  }

6、Puppet日常管理和配置

6.1、自动认证

前提是配置好hosts或者内部的DNS服务器。然后在/etc/puppet/puppet.conf里[main]添加autosign = true****,重启puppetmaster即可。

6.2、重新申请证书

客户端操作

rm -rf /var/lib/puppet/ssl/*

服务端操作

puppet cert --clean 客户端主机名

puppet cert --clean --all

6.3、客户端自动同步

vim /etc/sysconfig/puppet

PUPPET_SERVER=base01.weikuo.com

PUPPET_PORT=8140

PUPPET_LOG=/var/log/puppet/puppet.log

PUPPET_EXTRA_OPTS=--waitforcert=500

重启puppet即可。会每半小时和服务端同步一次。

修改同步时间

vim /etc/puppet/puppet.conf的[agent]部分。

runinterval=60 // 每60秒同步一次

6.4、服务器主动推送

服务端使用puppetrun命令可以告知客户端进行同步。

在服务端的配置文件agent段,添加

listen = true // 让puppet监听8139端口

posted on   weikuo  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示