• 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。如何使用,需要更多的研究和实践。





  • 相关阅读:
    docker 删除所有的 docker ps -a 记录
    使用ES6的Promise完美解决回调地狱
    linux查看历史命令history
    linux命令补全 忘记命令只记得开头
    linux更改shell
    java信号量PV操作 解决生产者-消费者问题
    eclipse代码自动提示功能设置
    linux下mysql修改数据库账户root密码
    IntelliJ Idea12 破解码与中文乱码配置
    linux usermod修改用户所在组方法
  • 原文地址:https://www.cnblogs.com/zeweiwu/p/4749847.html
Copyright © 2020-2023  润新知