sdoghds88888 发表于 2018-8-1 09:34:24

saltstack的使用

  saltstack是自动化管理工具。
  术语:
  Master - 控制中心,salt命令运行和资源状态管理端
  Minions - 需要管理的客户端机器,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息
  States - 配置管理的指令集
  Grains - minion端的变量,静态
  pillar - minion端的变量,动态
  highstate - 给minion永久下添加状态,从sls配置文件读取到的
  salt schedule - 自动保持客户端配置
  安装源
  centos6
  rpm -ivh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel-release-6-8.noarch.rpm
  centos5
  rpm –ivh http://mirror.pnl.gov/epel/5/i386/epel-release-5-4.noarch.rpm
  安装
  yum –y install salt-master (master 安装)
  yum –y install salt-minion (minion 安装)
  master配置
  编辑配置文件/etc/salt/master 修改如下所示的配置项,去掉注释
  interface: 0.0.0.0
  keep_jobs: 12                        #12小时清楚一次cache
  file_recv: Ture             #开启master从minion上拉取文件
  file_recv_max_size: 2000             #拉取文件的最大2000m(默认为m)
  file_roots:                        #修改saltstack管理目录
  base:
  - /srv/salt
  nodegroups:                        #配置组
  lc1: 'L@rsync1.a.com,rsync2.a.com'
  minion配置
  master: 192.168.100.102
  id: rsync1.a.com
  schedule:                #配置受控端同步,每隔60秒与主控端进行同步一次 编辑/etc/salt/minion
  highstate:
  function: state.highstate
  seconds: 60
  证书管理
  salt-key -L                     #列出所有
  salt-key -a rsync1.a.com          #接受一个证书
  通信测试
  测试与受控主机网络是否通畅
  salt '*'test.ping
  执行客户端的命令
  salt '*'cmd.run 'ifconfig'
  可以通过grains查看一些系统信息,例如
  salt \* grains.items
  查看单个grain,使用grains.item命令
  salt \* grains.item os
  安装软件
  # salt -N lc1 pkg.install telnet
  查看已经安装的包
  # salt '*' pkg.list_pkgs
  删除包
  # salt '*' pkg.remove telnet
  查看你repos
  # salt '*' pkg.list_repos
  模板的使用
  文件的拷贝
  # cat zabbix/zabbix.sls
  /etc/zabbix/zabbix_agentd.conf:
  file.managed:
  - source: salt://zabbix/zabbix_agentd.conf
  - mode: 644
  - owner: root
  - group: root
  - template: jinja
  将zabbix/zabbix_agentd.conf中的Hostname换成下面
  {% if grains['os'] == 'Ubuntu' %}
  Hostname={{ grains['host'] }}
  {% elif grains['os'] == 'CentOS' %}
  Hostname={{ grains['fqdn'] }}
  {% endif %}
  执行
  # salt -N "lc2" state.sls zabbix.zabbix
  监控配置文件的更改
  # vim apache/httpd.sls
  test1:                         #id宣告
  pkg:                         #安装包管理
  - name: httpd            #安装哪个软件
  - installed                #要求是安装
  service:                     #服务管理
  - name: httpd            #指定服务
  - running                  #服务运行状态

  ->  - watch:                   #如果下面文件发生变化,就重启
  - file: /etc/httpd/conf/httpd.conf      #监控的文件地址
  /etc/httpd/conf/httpd.conf: #宣告
  file.managed:                #文件管理
  - source: salt://apache/httpd.conf          #源数据在哪里
  - user: root               #用户
  - group: root            #组
  - mode: 644                #权限
  - backup: minion         #备份一份
  - template: jinja          #使用的模板
  执行
  # salt -N "lc2" state.sls apache.httpd
  创建用户
  # vim lists.sls
  test13:
  user.present:
  - name: test13
  - gid: wheel
  - fullname: zhou test13
  - workphone: 11111111111
  - password: '$6$v9/LkY5c$t5OZ/2O0l6gWVd5LH7OHC8OEHMsWvfhYAsMYrZJ8trL5Xmfi02Y9.6XFiT8F6GH2vsjF6g9AefdGdpgp99p7Z1'
  - shell: /bin/bash
  - home: /home/test13
  /home/test13/.ssh/authorized_keys:
  file.managed:
  - source: salt://users/keys/test13
  - makedirs: True
  - mode: 600
  - owner: test13
  - group: wheel
  - template: jinja
  执行
  # salt "rsync1.a.com" state.sls users.lists
  rsync1.a.com:
  ----------

  >  Function: user.present
  Result: True
  Comment: User test13 is present and up to date
  Changes:
  ----------

  >  Function: file.managed
  Result: True
  Comment: File /home/test13/.ssh/authorized_keys is in the correct state
  Changes:
  Summary
  ------------
  Succeeded: 2
  Failed:    0
  ------------
  Total:   2
  user.present: 确保指定的账户名存在,并指定其对应的属性. 这些属性包括如下内容:
  name: 指定需要管理的账户名.
  uid: 指定uid, 如果不设置将配自动分配下一个有效的uid.

  gid: 指定默认的组id(group>  gid_from_name: 如果设置为_True_,默认的组id将自动设置为和本用户同名的组id
  groups: 分配给该用户的组列表(a list of groups). 如果组在minion上不存在,则本state会报错. 如果设置会空,将会删除本用户所属的除了默认组之外的其他组
  optional_groups: 分配给用户的组列表。 如果组在minion上不存在,则state会忽略它.
  home: 关于用户的家目录(home directory).
  password: 设置用户hash之后的密码.
  enforce_password: 当设置为_False_时,如果设置的_password_与用户原密码不同,将保持原密码不做更改.如果没有设置_password_选项,该选项将自动忽略掉.
  shell: 指定用户的login shell。 默认将设置为系统默认shell。
  unique: UID唯一,默认为True.
  system: 从_FIRST_SYSTEM_UID_和_LAST_SYSTEM_UID_间选择一个随机的UID.
  用户描述选项(GECOS)支持(当前只支持Linux和FreeBSD系统):
  fullname: 指定用户全名(full name).
  roomnumber: 指定用户的房间号.
  workphone: 指定用户的工作电话号码.
  homephone: 指定用户的家庭电话号码.
  user.absent 用于删除用户.其有以下选项:
  name: 指定需要删除的用户名.
  purge: 设置清除用户的文件(家目录)
  force: 如果用户当前已登录,则absent state会失败. 设置_force_选项为True时,就算用户当前处于登录状态也会删除本用户.
  当管理用户时,至少需要指定_user.present_或_user.absent_。 其他选项是可选的,比如_uid_、_gid_、_home_等选项没有指定是,将自动使用下一个有效的或者系统默认的
  拷贝目录
  # vi file.sls
  /tmp/zhou:                #id宣告
  file.recurse:         #使用文件递归模块
  - makedirs: Ture      #创建目录
  - user: root          #文件的用户
  - group: root         #文件的组
  - dir_mode: 755       #文件的权限
  - template: jinja   #使用的模板
  - source: salt://zhou #文件的来源
  - include_empty: True #空目录也拷贝
  - clean: True         #清理现在不存在文件或目录
  执行
  # salt -N 'rsync1' state.sls dir.file
  引入变量
  一样的文件拷贝
  # cat myapp.sls
  /etc/myapp.conf:
  file.managed:
  - source: salt://files/myapp2.conf
  - mode: 644
  - owner: test2
  - group: test2
  - template: jinja
  参数的使用
  # cat myapp2.conf
  Listen: {{ pillar['db']['listen'] }}
  参数的定义
  # cat top.sls
  base:
  'rsync1.a.com':
  - data
  'rsync2.a.com':
  - data2
  # cat data.sls
  db:
  listen: 888
  # cat data2.sls
  db:
  listen: 1111
  执行
  # salt -N 'lc1' state.sls files.myapp
  查看所有变量
  # salt 'rsync1.a.com' pillar.items
  高级部分
  cp.get_file用来从master下载文件到客户端,语法如下:
  # salt '*' cp.get_file salt://vimrc /etc/vimrc
  对于大文件,cp.get_file支持gzip压缩,在参数中指定gzip的压缩级别,如下:
  # salt '*' cp.get_file salt://vimrc /etc/vimrc gzip=5
  cp.get_file默认不在客户端上建立目录,如果客户端上没有这个目录了,文件拷贝将失败,可以指定makedirs=True来创建目录:
  # salt '*' cp.get_file salt://vimrc /etc/vim/vimrc makedirs=True
  cp.get_dir可以从master下载整个目录,语法如下:
  # salt '*' cp.get_dir salt://etc/apache2 /etc
  cp.get_dir也支持模板和压缩:
  # salt '*' cp.get_dir salt://etc/`pillar`.`webserver` /etc gzip=5 template=jinja
  get_url
  cp.get_url可以从一个URL地址下载文件,URL可以是msater上的路径(salt://),也可以是http网址。
  # salt '*' cp.get_url salt://my/file /tmp/mine
  # salt '*' cp.get_url http://www.slashdot.org /tmp/index.html
  get_template
  cp.get_template可以在文件下载之前用模板引擎处理。
  # salt '*' cp.get_template salt://path/to/template /minion/dest
页: [1]
查看完整版本: saltstack的使用