博客
关于我
puppet 学习总结(1)——puppet 入门详解
阅读量:795 次
发布时间:2023-03-04

本文共 5103 字,大约阅读时间需要 17 分钟。

Puppet 介绍

概述

Puppet 是一个 IT 基础设施自动化管理工具,能够帮助系统管理员全面管理基础设施的生命周期,包括供应(provisioning)、配置(configuration)、联动(orchestration)及报告(reporting)。

Puppet 的核心功能包括自动化重复任务、快速部署关键应用以及在本地或云端完成主动管理变更和快速扩展架构规模。
Puppet 基于 Ruby 语言开发,遵循 Apache 2.0 许可协议。

工作原理

工作模型

Puppet 通过声明性、基于模型的方法进行 IT 自动化管理:

  • 定义:通过 Puppet 的声明性配置语言定义基础设置的目标状态。
  • 模拟:在强制应用改变之前,先进行模拟性应用。
  • 强制:自动、强制部署达成目标状态,纠正任何偏离的配置。
  • 报告:报告当前状态与目标状态的不同,以及达成目标状态所进行的任何强制性改变。
  • 工作流程

    Puppet 的工作流程包括以下步骤:

  • 定义资源清单:在 manifest 文件中定义目标状态。
  • 编译清单:将 manifest 文件转换为可执行的指令。
  • 应用清单:将编译后的指令应用到目标设备上。
  • 监控与报告:持续监控配置状态并生成报告。
  • 使用模型

    Puppet 提供两个使用模型:

  • 单机使用模型:适用于单台设备的简单自动化任务。
  • master/agent 模型:实现集中式管理,agent 端周期性向 master 端发起请求。
  • 资源详解

    1. 程序安装及环境

    安装 Puppet 的方式有多种,例如使用源码安装或通过 yum 安装。以下是使用 yum 安装的示例:

    yum install -y puppet

    安装完成后,主配置文件位于 /etc/puppet/puppet.conf,主要程序位于 /usr/bin/puppet

    2. 资源简介

    资源抽象

    Puppet 从以下三个维度对资源进行抽象:

  • 类型(Type):将相似的资源抽象成同一种类型,如程序包资源、用户资源及服务资源。
  • 提供者(Provider):指明资源的管理接口。
  • 目标状态(State):描述资源的目标状态。
  • 资源定义

    资源定义通过向资源类型的属性赋值来实现,定义语法如下:

    type {'title': attribute1 => value1, attribute2 => value2, ...}

    其中,type 必须使用小写字符,title 必须唯一。

    资源属性

    资源属性包括:

    • Namevar:可简称为 name,定义资源名称。
    • Ensure:资源的目标状态,如 presentabsent
    • Provider:资源的管理接口。

    3. 常用资源

    以下是 Puppet 中常用的资源类型及其使用方法:

    Group

    管理系统用户组,属性包括:

    • name:组名,可省略,若省略则继承 title 的值。
    • gid:组的 GID。
    • system:是否为系统组。
    • ensure:目标状态。
    • members:组成员用户。

    示例:

    group{'mygrp':     name => 'mygrp',     ensure => 'present',     gid => 2000,     members => ['user1', 'user2']}

    User

    管理系统用户,属性包括:

    • name:用户名,可省略。
    • uid:UID。
    • gid:基本组 ID。
    • groups:附加组。
    • comment:注释。
    • home:用户的家目录。
    • shell:默认 shell 类型。
    • system:是否为系统用户。
    • ensure:目标状态。
    • password:加密后的密码。

    示例:

    user{'keerr':     ensure => 'present',     system => false,     comment => 'Test User',     shell => '/bin/tcsh',     home => '/data/keerr',     managehome => true,     groups => 'mygrp',     uid => 3000}

    Package

    管理软件包,属性包括:

    • ensure:目标状态,如 installedpresentlatestabsent
    • name:包名,可省略。
    • provider:安装方式。

    示例:

    package{'nginx':     ensure => 'installed',     provider => 'yum'}

    Service

    定义服务状态,属性包括:

    • ensure:服务的目标状态,如 runningstopped
    • enable:是否开机自动启动。
    • path:服务脚本路径。
    • startstoprestart:定制启动、关闭、重启命令。

    示例:

    service{'nginx':     ensure => 'true',     enable => 'true'}

    File

    管理文件、目录和符号链接,属性包括:

    • ensure:目标状态,如 filedirectoryabsent
    • path:文件路径。
    • source:源文件路径。
    • content:文件内容。
    • owner:文件属主。
    • group:文件属组。
    • mode:文件权限。

    示例:

    file{'aaa':     path => '/data/aaa',     source => '/etc/aaa',     owner => 'keerr',     mode => '611'}

    Exec

    执行外部命令,属性包括:

    • command:要运行的命令。
    • cwd:命令运行的目录。
    • creates:文件路径,命令只在该文件不存在时执行。
    • usergroup:运行命令的用户身份。
    • path:命令执行的搜索路径。
    • onlyif:条件命令正常运行时才执行命令。
    • unless:条件命令非正常运行时才执行命令。

    示例:

    exec{'cmd':     command => 'mkdir /data/testdir',     path => ['/bin', '/sbin', '/usr/bin', '/usr/sbin']}

    Cron

    定义周期性任务,属性包括:

    • command:要执行的任务。
    • ensure:目标状态。
    • minutehourmonthdaymonthweekday:任务调度时间。
    • user:执行命令的用户身份。

    示例:

    cron{'timesync':     command => '/usr/sbin/ntpdata 172.16.0.1',     ensure => 'present',     minute => '*/3',     user => 'root'}

    Notify

    调试输出,属性包括:

    • message:记录的信息。
    • name:信息名称。

    示例:

    notify{'redis_conf_modified':     message => 'Redis 配置文件已修改',     name => 'redis_conf'}

    4. 资源的特殊属性

    Puppet 提供 beforerequirenotifysubscribe 四个参数定义资源之间的依赖关系和通知关系。

    示例:

    file{'test.txt':     path => '/data/test.txt',     require => File['test.symlink']}

    5. 变量

    Puppet 变量以 $ 开头,赋值操作符为 =。变量类型包括:

    • 字符型(支持单引号强引用、双引号弱引用)。
    • 数值型。
    • 数组。
    • 布尔型值。
    • Hash。
    • undef(未定义变量的值类型)。

    变量的作用域分为 top scopenode scopeclass scope,优先级为 top scope > node scope > class scope

    6. 流程控制语句

    Puppet 支持 ifcaseselector 语句。

    if 语句

    if $operatingsystem == 'CentOS' {    if $operatingsystemmajrelease == '7' {        $db_pkg = 'mariadb-server'    } else {        $db_pkg = 'mysql-server'    }    package{"$db_pkg": ensure => installed}}

    case 语句

    case $osfamily {    "RedHat": {        $webserver = 'httpd'    }    /(i-mx:debian)/: {        $webserver = 'apache2'    }    default: {        $webserver = 'httpd'    }}

    selector 语句

    $pkgname = $operatingsystem ? {    '/(i-mx:ubuntu|debian)': 'apache2',    '/(i-mx:redhat|fedora|centos)': 'httpd',    default: 'httpd'}

    7. 类

    类是 Puppet 中的模块,用于定义一组通用目标的资源,可在全局范围内调用。类可以继承,并包含子类。

    定义类

    class NAME {    # 定义类的语法}

    带有参数的类

    class instpkg($pkg) {    package{"$pkg": ensure => installed}}

    类继承

    class redis::master inherits redis {    file{'/etc/redis.conf':         source => '/root/manifests/file/redis-master.conf',         owner => 'redis',         group => 'root',         mode => '0640'    }    Service['redis'] {         subscribe => File['/etc/redis.conf']    }}

    模块

    模块是 Puppet 的扩展机制,常用于存放 manifest 文件和相关资源。模块的命名规范如下:

    modules/├── MODULE_NAME/│   ├── manifests/│   │   └── init.pp│   ├── files/│   │   └── FILE_NAME│   ├── templates/│   │   └── TEMPLATE_NAME.erb│   ├── lib/│   └── spec/

    示例:定义一个 Redis 主从模块。

    class redis::master {    package{'redis': ensure => installed}    service{'redis': ensure => running}}

    master/agent 模型

    实现步骤

  • 主机名解析:确保所有主机在 /etc/hosts 中有解析记录。
  • 时间同步:使用 chronyd.service 实现时间同步。
  • 安装 Puppet 服务:在 master 和 agent 端安装 Puppet 服务。
  • 配置 Puppet 服务
    • master 端签署并颁发 agent 端的证书。
    • agent 端配置 server 地址。
  • 配置站点清单:定义站点清单文件,调用相关模块。
  • 实验示例

  • 环境准备:三台机器分别配置为 master、agent(Redis Master)和 agent(Redis Slave)。
  • 安装与配置:完成 Puppet 和 Redis 的安装与配置。
  • 验证主从架构:通过 Redis CLI 查看复制状态。
  • 添加模块(如 Chrony):创建模块并配置站点清单。
  • 测试:验证模块是否生效。
  • 通过以上步骤,可以实现 Redis 主从架构的自动化管理。

    转载地址:http://uzafk.baihongyu.com/

    你可能感兴趣的文章
    PublicCMS怎么用金蝶Apusic Application Server部署
    查看>>
    publish over ssh、 Kubernetes Continuous Deploy插件
    查看>>
    PubMed详解-ChatGPT4o作答
    查看>>
    Pubsub Extensions for Smack
    查看>>
    pulsar mq 单体验证demo, docker启动pulsar mq验证生产者消费者命令
    查看>>
    pulsar mq 学习使用,pulsar java客户端, spring boot pulsar , spring pulsarTemplate如何使用 pulsar4.0.0
    查看>>
    Pulsar mq 设置延迟消息模式 pulsar mq 发送延迟消息 pulsar如何发送消费延时消息
    查看>>
    Pulsar 游标回滚,移动偏移量测试
    查看>>
    pulsar开源消息队列_了解Pulsar---Pulsar工作笔记001
    查看>>
    Puppet 在大规模分布式系统中的性能优化策略有哪些?
    查看>>
    puppet 学习总结(1)——puppet 入门详解
    查看>>
    puppet 集中化管理PDF by 守住
    查看>>
    Puppet---自动化运维工具(进阶)
    查看>>
    puppeteer(三)常用API
    查看>>
    PyTorch 微调终极指南:第 2 部分 — 提高模型准确性
    查看>>
    pure css做的手机页面
    查看>>
    PureMVC--一款多平台MVC框架
    查看>>
    pure框架
    查看>>
    putty、Xshell、远程连接、密钥登录
    查看>>
    Putty建立SSH隧道代理上网
    查看>>