puppet概述

2024-03-14 08:18
文章标签 概述 puppet

本文主要是介绍puppet概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



运维自动化概述

运维自动化目标:
 bootstrap --> configuration(目标) --> command and control
  bootstrap:实现自动化部署基础操作系统和软件。
   实现工具:PXE、cobbler、
  configuration:配置服务相关属性(开机自启动、计划任务)和操作系统中更精细的管理(用户、组、文件系统)以实现我们期望的目标条件。
   能够使得主机处于目标状态,但难以实现批量的自动化的配置。
            实现工具:puppet、saltstack(基于python开发)、chef、cfengine。
             示例:能够实现目标主机上是不是有指定用户,用户的用户名是什么,该用户对应的密码是什么,这个用户的登陆密码。
  command and control:运行命令并执行一些控制机制。
         实现工具:ansible、fabric。
         
puppet的运行机制:
 工作与master/agent模型下。
  puppet需要在认证之后才能对客户端主机进行配置(否则配置信息就会导致泄露),因此双方需要实现互相认证,因此双方基于一种加密的方式进行通信。
 功能:在操作系统已经安装好的情况下,主动在两台的服务器上各自安装Nginx和Tomcat,并配置好Nginx服务器,使得Nginx能够主动将前端的动态页面的请求反向代理至后段的Tomcat服务器。
  前提:
   1、puppet基于SSL进行认证,这个证书依赖于主机名(依赖主机名的好处还在于当IP为动态获取的,但证书仍然依赖于主机名实现认证)。
   2、被管控主机需要安装操作系统并配置IP地址和与之对应的主机名。
 
 服务器端:安装puppt master服务并启动。
 客户端:安装puppet agent,并启动,客户端主机。

帮助信息:
 puppet describe <file|user|group|package|service|exec|cron|notice>
 
文件的定义:
 file {"title":
  type => value,
 }
  ensure:确保指定资源的目标状态,其值可以为present、absent、file、directory、link。
  path:创建文件的位置。
  target:创建链接时的源文件的位置。
  content:指定创建文件的内容。
  source:复制文件时,指定源文件的位置。
  force:强制执行,其值为true或false。
  mode:指定创建文件时的权限,777,755,666。
  owner:指定文件创建时的拥有人。
  group:指定文件创建时的拥有组。
  
 练习:复制一个文件,源文件为/var/log/messages,复制后的文件存放在/tmp目录下,命名为abc,如果/tmp目录下有abc的文件则强制覆盖。
 # vim test2.pp
  file {"/tmp/abc":
   source => "/var/log/messages",
   force  => true,
  }
 # puppet apply test2.pp
 

用户:
 ensure:确保指定名称的用户是否存在,其值为present、absent。
 name:定义用户名。
 uid:指定用户的ID号。
 gid:指定用户的GID号。
 shell:定义用户的默认shell。
 home:定义用户的家目录。
 password:定义用户的密码,此处的密码为明文密码加密后的字符串,加密后的字符串应该写在单引号内。
  openssl passwd -1 -salt `openssl rand -hex 4`
 system:定义创建的用户是否为普通用户,false为普通用户,而true为系统用户。
 
 创建tom用户,id号为444,shell类型为tcsh。
  user {"tom":
   ensure  => present,
   uid   => 444,
   shell   => "/bin/tcsh",
   password => "redhat",
  }
 练习:添加一个用户,用户名为test_user,为系统用户,id号为400,默认shell为/bin/csh。
  user {"test_user":
   ensure  => present,
   uid   => 400,
   shell   => "/bin/csh",
   system  => true,
   password => "$1$12345678$0ME5N6oDyoEAwUp7b5UDM/",
  }

组:
 ensure:present(存在),absent(不存在)。
 name:定义组名。
 gid:定义组ID。
 system:是否为系统组。
 
 练习:添加一个系统组,组名为test_group,组ID为444。
  group {"test_group":
   ensure => present,
   gid  => 444,
   system => true,
  }
  
package:
 ensure:确保指定的名称的软件处于某个目标状态,present(installed),absent。
 name:指定软件包的名字。
 provider:rpm、yum,msi。
 source:指定软件包的位置。
  package {"mysql":
   ensure => installed,
   provider => "msi",
   source => "D:\software\mysql-5.6.32.msi",
  }
 
 
 练习:在某主机上安装mysql的服务。
  package {"mysql-server":
   ensure => installed,
  }

service:
 ensure:确保服务处于哪种目标状态,stoped、running,true、false。
 enable:定义服务是否开机自启动,true、false。
 name:定义服务的名字。
 
  service {"mysqld":
   ensure => running,
   enable => true,
  }

exec:
 command:定义要执行的命令。
 path:对应命令所在的目录,多个路径间已冒号分隔。
  /bin:/sbin
 user:以哪个用户的身份去执行。
 group:以指定的组的身份去执行命令。
 
  练习:在/tmp目录下创建一个文件,文件的名字为hello,并且以test_user的身份和test_user组的身份去执行。
  


cron:定义计划任务。
 ensure:确保计划任务是否启动,present、absent。
 command:定义计划任务中要执行的命令或脚本。
 environment:定义命令查找的目录。
 minute:
 hour:
 monthday:1-31
 month:定义月份。
 weekday:定义周几。
 user:定义计划任务以哪个用户的身份去执行。
 name:为计划任务命名。
 
 cron {"ntpd":
  ensure =>present,
  command =>"ntpdate 192.168.1.250 &> /dev/null"
  environment =>"PATH=/bin:/sbin:/usr/bin:/usr/sbin",
  hour  =>['6-18/2'],
 }
 
notify:定义通知。
 message:定义通知的内容。
 
 nofity {"notice":
  message => "text change",
 }


安装httpd的软件包并启动httpd的服务。
 require:依赖于。
 before:定义当前的资源在另一个资源之前执行。
  package {"httpd":
   ensure => installed,
  }
  service {"httpd":
   ensure => running,
   enable => true,
   require => Package['httpd'],
  }

类:
class mysqld {
 package {"httpd":
  ensure => installed,
 }
 service {"httpd":
  ensure => running,
  enable => true,
  require => Package['httpd'],
 }
}

 基类:父类,所有子类的父类。
 
定义模块:
 1、创建模块所需的目录。
  # cd /etc/puppet/modules
  # mkdir httpd/{manifests,files,lib} -pv
 
 2、创建功能模块的基类。
  # cd httpd/manifests
  # vim init.pp
   class httpd {
    package {"httpd":
     ensure => present,
    }
   }

 3、调用模块。
  # puppet apply -v -d -e "include httpd"
  
puppet_master:
1、创建基类以及要使用的子类。

# cd /etc/puppet/modules
# mkdir nginx/{manifests,files,lib} -pv
# cd nginx/manifests
# vim init.pp
 class nginx {
  package {"nginx":
   ensure => installed,
  }
 }
# vim web.pp
 class nginx::web inherits nginx {
  file {"nginx":
   ensure => present,
   source => "puppet:///modules/nginx/nginx_web.conf",
   force  => true,
   path  => "/etc/nginx/nginx.conf",
  }
  service {"nginx":
   ensure => running,
   enable => true,
   require => File['nginx'],
  }
 }
# cp /tmp/nginx_web.conf /etc/puppet/modules/nginx/files/

2、定义节点文件。
# cd /etc/puppet/manifests
# vim client.example.com.pp
 node 'client.example.com' {
  include nginx::web
 }
# vim site.pp
 import "client.example.com.pp"

3、创建证书文件并启动puppetmaster服务。
# puppet master --genconfig >> /etc/puppet/puppet.conf
# puppet master --no-daemonize -v -d (让它运行在前台,完成后直接ctrl+c退出)
# service puppetmaster start

puppet_agent:
1、测试连接服务器端主机。
# puppet agent --server server.example.com --noop --test -v -d

puppet_master:
1、为agent端签署证书。
# puppet cert list
# puppet cert sign client.example.com

2、查看当前主机上有哪些已签署的证书。
# puppet cert --list --all

puppet_agent:
1、编辑配置文件,指定master的主机名。
# vim /etc/puppet/puppet.conf
 [main]
 server = server.example.com
 [agent]
 listen = true

# vim /etc/puppet/auth.conf
 allow *

2、启动agent端的服务。
# service puppet start

主动推送:
# puppet kick -d --host client.example.com






 
  
  


  

这篇关于puppet概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807768

相关文章

关于最长递增子序列问题概述

《关于最长递增子序列问题概述》本文详细介绍了最长递增子序列问题的定义及两种优化解法:贪心+二分查找和动态规划+状态压缩,贪心+二分查找时间复杂度为O(nlogn),通过维护一个有序的“尾巴”数组来高效... 一、最长递增子序列问题概述1. 问题定义给定一个整数序列,例如 nums = [10, 9, 2

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开