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

[经验分享] saltstack的使用

[复制链接]

尚未签到

发表于 2018-8-1 09:34:24 | 显示全部楼层 |阅读模式
  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
  安装软件
  [root@rsync2 ~]# salt -N lc1 pkg.install telnet
  查看已经安装的包
  [root@rsync2 ~]# salt '*' pkg.list_pkgs
  删除包
  [root@rsync2 ~]# salt '*' pkg.remove telnet
  查看你repos
  [root@rsync2 ~]# salt '*' pkg.list_repos
  模板的使用
  文件的拷贝
  [root@rsync2 salt]# 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 %}
  执行
  [root@rsync2 salt]# salt -N "lc2" state.sls zabbix.zabbix
  监控配置文件的更改
  [root@rsync2 salt]# 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          #使用的模板
  执行
  [root@rsync2 salt]# salt -N "lc2" state.sls apache.httpd
  创建用户
  [root@rsync2 users]# 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
  执行
  [root@rsync2 salt]# 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_等选项没有指定是,将自动使用下一个有效的或者系统默认的
  拷贝目录
  [root@rsync2 dir]# 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         #清理现在不存在文件或目录
  执行
  [root@rsync2 dir]# salt -N 'rsync1' state.sls dir.file
  引入变量
  一样的文件拷贝
  [root@rsync2 files]# cat myapp.sls
  /etc/myapp.conf:
  file.managed:
  - source: salt://files/myapp2.conf
  - mode: 644
  - owner: test2
  - group: test2
  - template: jinja
  参数的使用
  [root@rsync2 files]# cat myapp2.conf
  Listen: {{ pillar['db']['listen'] }}
  参数的定义
  [root@rsync2 pillar]# cat top.sls
  base:
  'rsync1.a.com':
  - data
  'rsync2.a.com':
  - data2
  [root@rsync2 pillar]# cat data.sls
  db:
  listen: 888
  [root@rsync2 pillar]# cat data2.sls
  db:
  listen: 1111
  执行
  [root@rsync2 pillar]# salt -N 'lc1' state.sls files.myapp
  查看所有变量
  [root@rsync2 pillar]# 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、欢迎大家加入本站运维交流群:群②: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.iyunv.com/thread-544556-1-1.html 上篇帖子: 使用Saltstack自动部署Openstack 下篇帖子: 自动化运维神器之saltstack (一)安装部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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