zoukankan      html  css  js  c++  java
  • puppet overview

    安装

    以在Ubuntu server 14.04.2 TLS 为例:

    • 设置机器名。 编辑/etc/host以修改主机名,因为puppet是基于证书的,证书中包含主机名;

    • 更新包源。

      1. echo -e "deb http://apt.puppetlabs.com/ lucid main\ndeb-src http://apt.puppetlabs.com/ lucid main">>/etc/apt/sources.list.d/puppet.list
    • 对安装源进行一个检验。
      更新失败时才需要执行该命令
      1. apt-key adv --keyserver keyserver.ubuntu.com --recv XXXXXXXX
    • 系统更新 和安装
      1. apt-get update && apt-get dist-upgrade
    • 在控制节点上安装puppetmaster:
      1. apt-get install puppetmaster
    • 在客户端安装puppet:
      1. apt-get install puppet
    • puppet会监听8140端口,如果puppetmaster开启了防火墙需要做以下配置
      1. iptables -A INPUT -p tcp --dport 8140-j ACCEPT
    • 执行命令验证:

      1. netstat -lntup

      root@master:/home/andy# netstat -lntup
      Active Internet connections (only servers)
      Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
      tcp 0 0 0.0.0.0:8140 0.0.0.0: LISTEN 27918/ruby
      tcp 0 0 0.0.0.0:22 0.0.0.0:
      LISTEN 21070/sshd
      tcp6 0 0 :::8080 ::: LISTEN 1286/java
      tcp6 0 0 :::22 :::
      LISTEN 21070/sshd
      tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1286/java

    • 验证

    1. 在master上创建一个file资源
    2. 客户端发起验证:
      puppet agent --server xxxx(master) --test
    3. 服务器完成验证:
      puppet cert --list
      pupper cert sign xxx(client)
    4. 再次在客户端发起验证就可以看见验证成功了。

    经验总结:

    • Ubuntu 下安装很简单,不需要预先安装ruby等,系统更新后直接安装puppet;

    • 安装完后是不存在site.pp 文件的,需要创建:/etc/puppet/manifests/site.pp,作为站点的主模块配置文件。
      一般的site.pp 很简单,引入Nodes节点下客户端文件即可
      1. import"nodes/*.pp"
    • 关于“模块”
      /etc/puppet/manifests的文件结构:
      1. |-- nodes
      2. |`-- client.pp
      3. `-- site.pp
      client.pp 说明客户节点client需要执行哪些模块。内容是:
      1. node 'client'
      2. {
      3. include stdlib
      4. include sysup
      5. }
      上面说明节点“client”将会执行stdlib 和 sysup 这两个模块(或者称之为功能)。
      上面说的模块,就是你需要puppet做的事情,比如拷贝文件,修改文件,安装package,执行命令等。
      每件“事情”就是一个单独的“模块”。

    • 怎么定义“模块”?
      首先来看文件结构:/etc/puppet/modules
      1. .
      2. |-- ntp
      3. ||-- files
      4. ||-- manifests
      5. ||`-- init.pp
      6. | `-- templates
      7. |-- sim
      8. ||-- files
      9. ||`-- simf.sh
      10. | `-- manifests
      11. |`-- init.pp
      目录/etc/puppet/modules有很多子目录,每个子目录就是你要需要puppet做的一件事情,比如你要安装ntp, 那么你就需要创建一个ntp文件夹,该文件夹下又需要包含manifests(必须),files, templates这三个文件夹。
      在manifests文件夹下,新建一个名叫 init.pp 的文件(必须),这里将详细描述做这件事情的经过。比如 ntp 下的 init.pp:
      1. class ntp
      2. {
      3. package{
      4. "ntp":
      5. ensure=>installed,
      6. }
      7. }

      注意:类名必须和模块名称一致!!!

    • 怎样让puppet 修改node上的文件呢?
      一般的资源 file 只能用来创建,其content属性的内容将会 覆盖 已有文件的内容。
      解决办法是给puppet安装stdlib。
      1. puppet module install puppetlabs-stdlib
      然后使用 stdlib 中的 file_line 资源。 例如:
      1. file_line{"newline":
      2. path=>"/etc/apt/sources.list.d/cloudarchive-kilo.list",
      3. line=>"add a new line",
      4. }

      具体可以参考:stdlib

    • 错误Could not request certificate: SSL_connect returned=1
      1. Error:Couldnot request certificate: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed:[certificate signature failure for/CN=master]
      出现这样的问题只能重新签发证书了,但是在master上删除证书后需要重启puppet才能生效!!
      也要注意主从机器之间时间是否同步的问题。

    • 怎样自动签发证书
      当客户节点增多时,每个节点向主节点申请证书似乎很愚蠢。
      可以设置master自动签发所有的证书,我们只需要在/etc/puppet 目录下创建 autosign.conf 文件并添加下面内容。(不需要修改 /etc/puppet/puppet.conf文件,因为默认的autosign.conf 文件的位置没有修改)
      1. *.example.com
      这样就会对所有来自 example.com 的机器的请求都自动签发证书,见参考

    • 创建user后无法登陆
      使用user资源添加用户时,属性password不是明文,需要用工具grub-md5-crypt 来生成。
      但需要安装 grub, 生成的password用单引号包裹:
      1. user{"andy":
      2. ensure=>"present",
      3. uid=>666,
      4. gid=>666,
      5. password=>'$1$PzftN$XANlscGctdGF3VjXH3k9q0',
      6. home=>"/home/andy",
      7. shell=>"/bin/bash",
      8. managehome=>true,
      9. }
    • 如何主动更新
      节点每次更新都要运行 puppet agent --test, 但是如果上百上千台nodes怎么办?
      可以采用puppet kick 这种 master主动推送更新并让node执行的方法。例如:
      1. puppet kick -p 10 client1 client2 client3
      设置很简单:
      2. 设置节点的防火墙准许在端口8139上接入;3.在节点的auth.conf的开头加入以下代码:
      1. # Allow puppet kick access
      2. path /run
      3. method save
      4. auth any
      5. allow workstation.example.com
      上面代码的意思是准许主机(workstation.example.com)去触发一个puppet执行。当然你也可以用allow *准许任何主机触发puppet的执行。
      关于主动更新,或者可以用 MCollective Puppet Agent。如何使用,需要更多的研究和实践。





  • 相关阅读:
    将Nginx添加到windows服务中
    springboot使用redis管理session
    GIT常用命令
    阻止360、谷歌浏览器表单自动填充
    谈谈对Spring IOC的理解
    同一个Nginx服务器同一端口配置多个代理服务
    LeetCode 653. Two Sum IV
    109. Convert Sorted List to Binary Search Tree(根据有序链表构造平衡的二叉查找树)
    108. Convert Sorted Array to Binary Search Tree(从有序数组中构造平衡的BST)
    LeetCode 236. Lowest Common Ancestor of a Binary Tree(二叉树求两点LCA)
  • 原文地址:https://www.cnblogs.com/zeweiwu/p/4749847.html
Copyright © 2011-2022 走看看