设为首页 收藏本站
查看: 704|回复: 0

[经验分享] 菜鸟学Linux 第109篇笔记 ansible puppet-Winthcloud

[复制链接]

尚未签到

发表于 2018-7-29 12:51:42 | 显示全部楼层 |阅读模式
  菜鸟学Linux 第109篇笔记 ansible puppet
  内容总览
  bootstrap
  ansible Properties
  ansible其它配置方式
  puppet 简介
  puppet: IT基础设施自动化管理工具
  puppet 工作模式
  puppet 层次
  puppet 的核心组件manifests
  puppet 命令格式
  puppet 定义资源格式
  puppet 常用资源类型(user,group,exec,file,cron,notify,package,service后两个下节写)
  配置心得
  bootstrap --> configuration (目标状态) --> command and control
  bootstrap: pxe, cobbler, 虚拟化环境下的部署方式(xen, kvm)
  configuration: puppet, saltstack(python), chef, cfengine
  command and control: ansible(轻量级), fabric, func
  Os Provisioning
  PXE, cobbler
  Os config
  cfengine, puppet, saltstack, chef
  Deployment
  func(ssl), fabric(python, ssh), ansible
  ansible Properties
  No Agents
  No Server
  No additional PKI
  Modules in any language
  YAML, not code
  ansible
  此软件可以实现远程在多台主机上同时运行相同的命令,它所传输命令的方式是基于ssh来传输的
  所以要事先最好配置好基于密钥通信与要配置的客户端之间
  安装
  ansible-2.2.1.0-1.el6.noarch.rpm
  libyaml-0.1.3-4.el6_6.x86_64.rpm
  python-crypto2.6-2.6.1-2.el6.x86_64.rpm
  python-httplib2-0.7.7-1.el6.noarch.rpm
  python-jinja2-26-2.6-3.el6.noarch.rpm
  python-keyczar-0.71c-1.el6.noarch.rpm
  python-six-1.7.3-1.el6.centos.noarch.rpm
  python34-3.4.5-1.el6.x86_64.rpm
  python34-libs-3.4.5-1.el6.x86_64.rpm
  python34-PyYAML-3.11-2.el6.x86_64.rpm
  PyYAML-3.10-3.1.el6.x86_64.rpm
  sshpass-1.06-1.el6.x86_64.rpm
  (有几个包非常难找呵呵 可以上此网站下载 pkgs.org)
  2. 配置基于密钥通信
  # ssh-keygen -t rsa
  # ssh-copy-id -i /root/.ssh/id_rsa.pug root:IP
  IP要使用现实中配置的远程IP
  3. 编辑配置文件/etc/ansible/hosts
  # vim /etc/ansible/hosts
  将其要一起配置的IP添加到最后
  格式
  [test]
  IP1
  IP2
  (现实配置要使用相对应的IP)
  4. 使用ansible来配置客户端格式
  ansible <host-pattern> [-m module_name] [-a args] [options]
  如:
  # ansible test -a 'date'
  (test是上边配置文件定义的一个区域,即此区域里配置的IP都会执行date命令)
  5. 使用模块
  ansible的所有在客户端执行的命令或安装等配置都是基于模块的,
  可以使用ansible-doc -l来查看相应模块的具体使用方式
  ansible其它配置方式
  ansible-playbook
  类似shell脚本,可以实现运行某个文件,此文件定义了要执行的命令或安装的软件等
  一系列对客户端的操作,然后对其执行,不同的是其格式和shell脚本有区别
  如 为所指定的客户端都安装httpd程序,并将本地的配置文件复制到客户端上
  # vim test.yaml
  - hosts: all
  remote_user: root
  tasks:
  - name: install httpd
  yum: name=httpd state=present
  - name: copy configuration file
  copy: src=/root/httpd.conf dest=/etc/httpd/conf/httpd.conf
  (需要注意的是文件结尾名字必须为yaml)
  配置格式的含义
  - hosts: 指定要配置给哪一个区域的主机是在/etc/ansible/hosts中定义的
  remote_user: 指定的是要以哪个用户的身份在远程主机端运行命令
  tasks: 表示此下段为要执行的任务
  -name: 注释段 用来显示执行命令的含义
  yum: 这个就是模块 后边的参数就是该模块需要指定的参数
  puppet 简介
  是一个c/s架构的软件,s端有其所定义的c端的执行码,c端每隔一段时间会去s端请求是否有自己
  需要执行的代码,c端在请求时也会把自己的状态报告给s端,说点大家容易懂一些的话哈哈, 它
  当此软件的客户端和服务器端配置好后,服务器端已经为客户机配置好其所需要执行的命令或安装
  的软件名,或参数调整等,客户端只需要连接网络访问服务器端后,此台电脑不需要任何人为操作
  便可自己自动布署服务器端所定义的操作,或需要安装的软件等。此软件适合用在大规模的自动化
  布署环境中。
  简要来讲 puppet所实现的功能ansible全都可以操作,区别在于,puppet是事先已经定义好所有的
  操作,客户端只需要来服务器拉取即可,而ansible需要自己来手动去执行代码,这样应该好理解
  puppet: IT基础设施自动化管理工具
  整个生命周期
  provisioning
  configuration
  orchestration
  reporting
  www.puppetlabs.org
  作者:Luke Kanies, PuppetLabs
  puppet
  master/agent
  master: puppet server
  agent: 真正执行相应管理操作的核心部件:周期性地去master请求与自己相关的配置
  puppet 工作模式
  声明性、基于模型
  定义:使用puppet配置语言定义基础配置信息
  模拟:模拟测试运行
  强制:强制当前节点与定义的目标状态保持一致
  报告:通过puppet api将执行结果发送给接收者
  puppet 层次
  Resource Abstraction Layer 资源抽象
  Transactional Layer 事务
  Configuration Language
  资源抽象层
  资源类型:例如用户、组、文件、服务、cron任务等等
  属性及状态 与其 实现方式分离
  期望状态
  puppet的核心组件:资源
  资源清单:manifests
  安装
  agent: puppet, facter (安装如下包及其所依赖的包)
  facter-2.4.6-1.el6.x86_64.rpm
  hiera-1.3.4-1.el6.noarch.rpm
  puppet-3.8.7-1.el6.noarch.rpm
  puppet-server-3.8.7-1.el6.noarch.rpm
  ruby-augeas-0.4.1-1.el6.x86_64.rpm
  ruby-shadow-1.4.1-2.el6.rf.x86_64.rpm
  rubygem-json-1.4.6-1.el6.x86_64.rpm
  master: puppet-server
  puppet命令格式
  Usage: puppet <subcommand> [options] <action> [options]
  获取帮助方法 # puppet help
  获取资源帮助 # puppet describe --list
  # puppet describe RESOURCE
  describe          Display help about resource types
  puppet定义资源格式
  type {'title':
  attribute1=> value1,
  attribute2=> value2,
  ...
  }
  要点:
  1. type必须小写

  2.>  3. 属性定义完成后要加逗号,最后一个属性可省略逗号
  4. ensure一般要有,表示此配置是添加还是删除
  常用资源类型
  user, group, file, package, service, exec, cron, notify
  例:使用本地定义一个manifests 添加组和用户
  # vim /root/resource/test1.pp
  group {'puppetg':
  gid=> 2000,
  ensure=> present,
  name => 'puppetg'
  }
  user {'puppetuser':
  gid=> 2000,
  uid=> 2000,
  home => '/home/puppetuser',
  shell => '/bin/bash',
  password => '$1$1234$/UWlwuVLGacuqMdm2P7KY1',
  ensure => present
  }
  本地应用刚刚编写好的manifest
  # puppet apply test1.pp
  常用资源类型属性解析
  group
  查询方式 # puppet describe group
  管理组资源
  常用属性
  name:组名,NameVar
  gid: GID
  system: true,false是否为系统组
  ensure: present,absent
  members: 组内成员
  user
  查询方式 # puppet describe user
  管理用户
  常用属性
  comment: 注释信息
  ensure: present, absent
  expiry: 过期期限
  gid: 基本组id
  groups: 附加组
  home: 家目录
  shell: 默认shell
  name: NameVar
  system: 是否为系统用户,true|false
  uid: UID
  password:
  files
  查询方式 # puppet describe file
  管理文件及其内容、从属关系以及权限,内容可通过content属性直接给出
  也可通过source属性从远程服务器路径下载生成
  指明文件来源
  content: 直接给出文件内容,支持\n, \t
  source: 从指定位置下载文件
  ensure: file, directory, link, present, absent
  常用属性
  force: 强制运行,如果该目录下有此文件或者目录直接删除并创建true, false
  group: 属组
  owner: 属主
  mode: 权限 a=r, 0664, ug+w 支持8进制格式权限
  path: 目标路径
  source: 源文件路径,可以是本地路径,也可以使用
  puppet:///modules/module_name/file_name
  target: 链接文件 当ensure为'link'时 target表示path指向的文件是链接文件
  此时content及source属性自动失效
  例: 创建files的manifests文件
  # vim test2.pp
  file{'/tmp/pupdir':
  ensure=> directory,
  }
  # 此上为创建目录
  file{'/tmp/file1':
  content => 'this is pupet file\nSecond line',
  ensure=> file,
  owner=> 'puppetuser',
  group=> 'puppetg',
  mode=> 0400,
  }
  # 此上为创建文件,并添加content所添加的字符,文件的权限和属组主
  file{'/tmp/file2':
  source => '/etc/fstab',
  ensure => file,
  }
  # 此上也是添加一个文件,只是文件的内容是引用source所指向的文件的内容
  file{'/tmp/link':
  ensure => link,
  target => '/tmp/file2',
  }
  #此上为添加一个链接文件
  exec
  查询使用帮助 # puppet describe exec
  运行一外部命令:命令应该具有“幂等性”;
  幂等性:
  1. 命令本身具有 幂等性
  2. 资源有onlyif, unless, creates等属性以实现命令的条件式运行
  3. 资源有refreshonly属性,以实现只有订阅的资源发生变化时才执行。
  command: 运行的命令 NameVar
  creates: 此属性指定的文件不存在时才执行此命令
  cwd: 在此属性指定的路径下运行命令
  user:
  group: 以指定组运行此命令
  onlyif: 给定一个测试命令,仅在此命令执行成功,即返回状态码为0,才运行command
  unless: 给定一个测试命令,其返回值不为0时执行command所定义的命令
  refresh: 接受到其它资源发来的refresh通知时,默认是重新执行exec定义的command
  refresh可改变这种行为,即可指定仅在refresh时所运行的命令;
  refreshonly: 仅在收到refresh通知,才运行此资源
  returns: 期望的状态返回值,返回非此值时表示命令执行失败,默认为0
  tries: 尝试执行的次数
  timeout: 超时时长
  path: 指明命令的搜索路径,其功能类似PATH环境变量,其值通常为列表
  ['path1','path2',...],如不定义,必须给定命令的绝对路径
  例:  执行命令echo 并添加到某文件, 当配置当在何时才能执行此命令
  exec {'echo command1 > /tmp/cmd1.txt':
  user=> root,
  group=> root,
  creates=> '/tmp/cmd1.txt',
  path=> ['/bin'],
  }
  # creates直接可以判断文件是否存在
  exec {'echo command2 > /tmp/cmd2.txt':
  user=> root,
  group=> root,
  path=> ['/bin','/usr/bin'],
  unless=> 'test -e /tmp/cmd2.txt',
  }
  # 此种方式是unless所定义的命令执行的状态返回值不为0时才执行exec的命令
  notify
  查询使用帮助 # puppet describe notify
  核心属性
  message: 要发送的消息内容,NameVar
  例:
  # vim test4.pp
  notify{'This is a notify':}
  # 执行时会直接输出此条信息
  # puppet apply -v test4.pp
  cron
  查询使用帮助 # puppet describe cron
  管理cron任务
  常用属性
  ensure: present, absent
  command: 要运行的job
  hour:
  minute:
  month:
  monthday:
  weekday:
  name:
  user:运行的用户
  environment:运行时的环境变量
  例:
  # vim test5.pp
  cron {'update time':
  command=> '/usr/sbin/ntpdate 192.168.11.1',
  ensure=> present,
  minute=> '*/15',
  }
  含义:定义一个任务每15分钟执行一次,
  ensure 为present表示添加此条任务 当为absent 你懂得呵呵
  # puppet apply test5.pp
  配置心得
  1. 定义exec时命令的路径path需要定义,如未定义则命令执行需要指定绝对路径
  2. puppetlabs.com网站下载puppet需要找到doc>安装向导,然后往下找里边有yum源路径
  (有企业版了,所以开源版的软件连接藏得很深呵呵,,你懂得)
  3. yum.repo.d里所定义的yum源如果是光盘的centos6分两个DVD,自己手动将其合并为一个
  Packages目录里,然后再将其制作成ftp://user:passwd@IP/PATH
  (为何如此做是因为有的包放在第二个光盘里,无法使用yum来安装使其解决依赖关系)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543068-1-1.html 上篇帖子: Ansible学习:(一)Ansible基础 下篇帖子: ansible的安装及配置文件更改
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表