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

[经验分享] saltstack专题学习(一)

[复制链接]

尚未签到

发表于 2018-1-3 15:40:58 | 显示全部楼层 |阅读模式
  第一章:saltstack入门介绍
  1、基础概念
  saltstack是基于python开发的一套C/S架构配置管理工具,底层采用ZeroMQ消息队列,使用SSL证书签发的方式进行认证管理。server端就是salt的master,client端就是minion。master和minion都以守护进程的模式运行。
  2、saltstack架构安装
  2.1)软件依赖
  python:大于2.6小于3.0
  msgpack-python:salstack消息交换库
  YAML:saltStack配置解析定义语法
  Jinja2: saltStack states配置模板
  MarkupSafe:python unicode转换库
  apache-libcloud: SaltStack对云架构编排库
  Requests:HTTP Python 库
  ZeroMQ:saltStack消息系统
  pyzmq:ZeroMQ python库
  PyCrypto:python密码库
  M2Crypto: openssl python包装库
  2.2)安装环境
  master:10.2.11.210  saltStack01.91als.net
  minion: 10.2.11.218 web.91als.net
  minion: 10.2.11.219 tomcat.91als.net
  2.2.1)采用yum安装方式

  • 配置yum源 (在三台机器上配置)
[iyunv@saltstack01 ~]#yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-1.el6.noarch.rpm -y


  • master上安装  
[iyunv@saltstack01 ~]#yum info salt-master(查看版本)

[iyunv@saltstack01 ~]#yum -y install salt-master(安装master)

  查看
[iyunv@saltstack01 ~]# rpm -ql salt-master

  启动:
[iyunv@saltstack01 ~]#/etc/init.d/salt-master start

  查看:
[iyunv@saltstack01 ~]# ss -tunlp|egrep "4505|4506"

  tcp    LISTEN     0      128                    *:4505                  *:*      users:(("salt-master",14466,15))
  tcp    LISTEN     0      128                    *:4506                  *:*      users:(("salt-master",14473,23))

  • minion上安装
[iyunv@web ~]#yum -y install salt-minion

[iyunv@tomcat ~]#yum -y install salt-minion

  启动:
[iyunv@web ~]#/etc/init.d/salt-minion start

[iyunv@tomcat ~]#/etc/init.d/salt-minion start

  2.3)证书管理

  • SaltStack是使用SSL签证的方式进行安全认证的
[iyunv@saltstack01 ~]#salt-key -A -y #同意签证所有没有接受的签证请求


  • 查看
[iyunv@saltstack01 ~]# salt-key -L

  Accepted Keys:
  saltstack.91als.net
  saltstack01.91als.net
  tomcat.91als.net
  web.91als.net
  Denied Keys:
  Unaccepted Keys:
  Rejected Keys:

  • salt-key命令
  -L:显示所有public的keys
  -a ACCEPT --accept=ACCEPT指定接受指定认证的key
  -A 接受所有等待认证的key
  -r REJECT --reject=REJECT 拒绝指定认证的key
  -d DELETE --delete=DELETE 删除指定的key
  -D 删除所有keys
  2.4)测试访问
[iyunv@saltstack01 ~]# salt '*' test.ping

  saltstack.91als.net:
  True
  web.91als.net:
  True
  tomcat.91als.net:
  True
  saltstack01.91als.net:
  True
  2.5) 查看master上安装了那些文件
DSC0000.png

[iyunv@saltstack01 ~]# salt -h

  -c --config-dir=CONFIG_DIR:指定配置文件的目录,默认/etc/salt
  -t --timeout=TIMEOUT:指定timeout的时间(默认为5s)
  --async:异步执行
  --username=USERNAME:指定外部认证用户名
  --password=PASSWORD:指定外部认证密码
  -T:生成master token
  -d:查看指定模块的文件
  -G, --grain grains匹配
  -E --pcre 正则匹配
  -L --list 列表匹配
  -I --pillar pillar值匹配
  -S --ipcidr minions网段地址匹配
  -J, --pillar-pcre
  2.6)在minion上查看
DSC0001.png

  3、salt配置文件详解
  3.1)master配置文件
DSC0002.png

DSC0003.png                

DSC0004.png

DSC0005.png

DSC0006.png

  3.2)minion配置文件
DSC0007.png

DSC0008.png

DSC0009.png

  第二章:saltstack组件
  1、salt '*' (1)  cmd.run(2)    'w'
DSC00010.png

  1)管理对象(target)

  1.1)通过minion>
[iyunv@saltstack01 ~]# salt 'web.*' cmd.run 'w'

  web.91als.net:
  15:55:02 up 1 day,  2:03,  1 user,  load average: 0.00, 0.00, 0.00

  USER      TTY  FROM  LOGIN@  >  root   pts/0  10.2.11.251      09:11    1:46m  0.16s  0.16s -bash
  1.2)-E :正则匹配
[iyunv@saltstack01 ~]#salt -E 'web1-(prod|devel)' test.ping

  (在top.sls中)
  base:
  'web1-(prod|devel):
  - match: pcre/granis/pillar
  - webserver
  -L: 列表匹配
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' test.ping

  web.91als.net:
  True
  1.3)-G:grains匹配
[iyunv@saltstack01 ~]# salt -G os:CentOS test.ping

  web.91als.net:
  True
  saltstack.91als.net:
  True
  saltstack01.91als.net:
  True
  tomcat.91als.net:
  True
  1.4)-N 根据组来匹配(实现需要定义好组)
  nodegroups:
  groups: 'web1.91als.net,tomcat.91als.net'
  1.5)-I pillar匹配
  1.6)-S cidr匹配 (-S '10.2.11.0/24')
  2、moudle 模块
  https://docs.saltstack.com/en/latest/ref/modules/all/index.html#all-salt-modules
  (学习模块的方法)
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_modules ----查看哪些模块

[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_functions service-----查看service模块支持哪些函数方法

[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.doc service.enable------查看某个函数的使用说明

  service.enable:
  Enable the named service to start at boot
  CLI Example:
  salt '*' service.enable <service name>
  案例1:service模块
[iyunv@saltstack01 ~]# salt '*' service.available sshd ---判断服务是否运行

  web.91als.net:
  True
  案例2:status 模块是系统状态的常用信息模块,可以利用这个模块查看系统的信息
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' status.cpuinfo

  案例3:cmd 模块是常用的执行远程命令模块,具有强大的功能
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' sys.list_functions cmd---查看cmd支持哪些函数

# cmd.run 执行一个远程shell命令[iyunv@yw_home salt]#salt '192.168.0.100' cmd.run 'ls -l' # cmd.script 在远程minion执行一个master上的脚本,命令会从master下载脚本到minion上并执行# 路径为file_root参数指定的路径为 salt:// 路径[iyunv@yw_home salt]#salt '192.168.0.100' cmd.script salt://scripts/runme.sh  案例4:state 模块是salt state的管理模块,可以通过state模块简单的对minion操作sls状态
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' sys.list_functions state

  安全限制,限制指定用户访问某些模块,某些模块中的某些方法
  1)对模块的访问控制(/etc/salt/master)
  publisher_acl:
  oldboy:
  - test.ping
  - network.*
  2)新建用户oldboy,并授权
[iyunv@saltstack01 ~]# chmod 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master

[iyunv@saltstack01 ~]# chmod 777 /var/log/salt/master

  3)测试
[iyunv@saltstack01 ~]# su - oldboy

[oldboy@saltstack01 ~]$ salt '*' test.ping

  saltstack01.91als.net:
  True
  saltstack.91als.net:
  True
  tomcat.91als.net:
  True
  web.91als.net:
  True
[oldboy@saltstack01 ~]$ salt '*' cmd.run 'w'

  Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).
  指定某个用户只能在某些机器上运行某些模块
DSC00011.png

  user01用户只可以在web开头的服务器上运行test.ping
[iyunv@saltstack01 ~]# su - user01

[user01@saltstack01 ~]$ salt '*' test.ping

  Failed to authenticate! This is most likely because this user is not permitted to execute commands, but there is a small possibility that a disk error occurred (check disk/inode usage).
[user01@saltstack01 ~]$ salt 'web.91als.net' test.ping

  web.91als.net:
  True
  黑名单:
  #publisher_acl_blacklist:
  #  users:
  #    - root
  #    - '^(?!sudo_).*$'   #  all non sudo users
  #  modules:
  #    - cmd
  3)返回returns
  https://docs.saltstack.com/en/latest/ref/returners/index.html#full-list-of-returners
  3.1)案例:存到mysql数据
  3.1.1)创建表
  mysql> CREATE DATABASE  `salt`
  ->   DEFAULT CHARACTER SET utf8
  ->   DEFAULT COLLATE utf8_general_ci;
  Query OK, 1 row affected (0.00 sec)
  mysql> use salt
  Database changed
  mysql> CREATE TABLE `jids` (
  ->   `jid` varchar(255) NOT NULL,
  ->   `load` mediumtext NOT NULL,
  ->   UNIQUE KEY `jid` (`jid`)
  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  Query OK, 0 rows affected (0.07 sec)
  mysql> CREATE INDEX jid ON jids(jid) USING BTREE;
  ERROR 1061 (42000): Duplicate key name 'jid'
  mysql> CREATE TABLE `salt_returns` (
  ->   `fun` varchar(50) NOT NULL,
  ->   `jid` varchar(255) NOT NULL,
  ->   `return` mediumtext NOT NULL,
  ->   `id` varchar(255) NOT NULL,
  ->   `success` varchar(10) NOT NULL,
  ->   `full_ret` mediumtext NOT NULL,
  ->   `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  ->   KEY `id` (`id`),
  ->   KEY `jid` (`jid`),
  ->   KEY `fun` (`fun`)
  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  Query OK, 0 rows affected (0.07 sec)
  mysql> CREATE TABLE `salt_events` (
  -> `id` BIGINT NOT NULL AUTO_INCREMENT,
  -> `tag` varchar(255) NOT NULL,
  -> `data` mediumtext NOT NULL,
  -> `alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  -> `master_id` varchar(255) NOT NULL,
  -> PRIMARY KEY (`id`),
  -> KEY `tag` (`tag`)
  -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  Query OK, 0 rows affected (0.05 sec)

  mysql> grant all on salt.* to salt@'10.2.11.%'>  Query OK, 0 rows affected (0.01 sec)
  mysql> flush privileges;
  3.1.2)安装python-mysqldb包(所有minion上都需要安装)----返回程序是minion返回的
[iyunv@saltstack01 ~]# yum -y install MySQL-Python

  3.1.3)配置/etc/salt/master
  #####      Returner settings          ######
  ############################################
  # Which returner(s) will be used for minion's result:
  #return: mysql
  mysql.host: '10.2.11.210'
  mysql.user: 'salt'
  mysql.pass: 'salt123'
  mysql.db: 'salt'
  mysql.port: 3306
[iyunv@saltstack01 ~]# /etc/init.d/salt-master restart

[iyunv@saltstack01 ~]# salt '*' saltutil.refresh_pillar

  3.1.4)在minion端(/etc/salt/minion)
  ###### Returner settings ######
  ############################################
  # Default Minion returners. Can be a comma delimited string or a list:
  #
  #return: mysql
  mysql.host: '10.2.11.210'
  mysql.user: 'salt'
  mysql.pass: 'salt123'
  mysql.db: 'salt'
  mysql.port: 3306
[iyunv@web minion.d]# /etc/init.d/salt-minion restart

  3.1.5)测试
[iyunv@saltstack01 ~]# salt '*' cmd.run 'w' --return mysql

DSC00012.png

  2、grains组件
  介绍:grains里面记录每台minion的常用属性,比如cpu,内存,硬盘信息,可以通过grains.items查看
  自定义grains常用的方法:
[iyunv@saltstack01 ~]# salt -L 'web.91als.net' sys.list_functions grains

  web.91als.net:
  - grains.append
  - grains.delval
  - grains.fetch
  - grains.filter_by
  - grains.get
  - grains.get_or_set_hash
  - grains.has_value
  - grains.item
  - grains.items
  - grains.ls
  - grains.remove
  - grains.set
  - grains.setval
  - grains.setvals
  1)通过minion配置
  注意:定义好grains后,minion服务必须重启
  1.1)定义grains文件,然后重启salt-minion服务
[iyunv@web minion.d]# vim /etc/salt/minion.d/grains.conf

  grains:
  roles:
  - webserver
  - memcache
  #  deployment: datacenter4
  #  cabinet: 13
  #  cab_u: 14-15
  1.2)在salt-master上测试
[iyunv@saltstack01 ~]# salt -G roles:webserver test.ping

  web.91als.net:
  True
[iyunv@saltstack01 ~]# salt -G roles:memcache test.ping

  saltstack01.91als.net:
  True
  web.91als.net:
  True
  saltstack.91als.net:
  True
  2)通过grains模块定义grains
  在master上设置:
[iyunv@saltstack01 ~]# salt 'tomcat.91als.net' grains.append saltboot 'tomcat' (定义tomcat.91als.net服务器上,定义saltboot并设置为tomcat)

  tomcat.91als.net:
  ----------
  saltboot:
  - tomcat
[iyunv@saltstack01 ~]# salt 'tomcat.91als.net' grains.item saltboot

  tomcat.91als.net:
  ----------
  saltboot:
  - tomcat
[iyunv@saltstack01 ~]# salt -G saltboot:tomcat test.ping

  tomcat.91als.net:
  True
  3、pillar组件
  3.1)打开配置文件/etc/salt/master
  pillar_roots:
  base:
  - /srv/pillar
  3.2) 配置文件
[iyunv@saltstack01 ~]#mkdir -p /src/pillar

[iyunv@saltstack01 ~]#vim /src/pillar/packages.sls

  zabbix:
  package-name: zabbix
  version: 2.2.4
  root@saltstack01 ~]#vim /src/pillar/services.sls
  zabbix:
  port:10050
  user:admin
[iyunv@saltstack01 ~]#vim /src/pillar/top.sls

  base:
  '*':----------------#target目标
  - packages ----------------引用packages.sls
  - services ---------------------引用services.sls
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_functions pillar

  web.91als.net:
  - pillar.data
  - pillar.ext
  - pillar.fetch
  - pillar.file_exists
  - pillar.get
  - pillar.item
  - pillar.items
  - pillar.keys
  - pillar.ls
  - pillar.obfuscate
  - pillar.raw
[iyunv@saltstack01 ~]# salt '*' saltutil.refresh_pillar

[iyunv@saltstack01 ~]# salt '*' pillar.item zabbix

  tomcat.91als.net:
  ----------
  zabbix:
  ----------
  package-name:
  zabbix
  port:
  10050
  user:
  admin
  version:
  2.2.4
  4、module组件
  saltstack通过push的方式进行管理的入口,比如日常简单的执行命令,查看包的安装情况,查看服务运行情况等,默认软件安装完后,安装了很多module模块
  4.1)查看所有module
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_modules

  web.91als.net:
  - acl
  - aliases

  ->  - apache
  - archive
  - artifactory
  - at
  - ....
  查看指定模块所有的funcation
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_functions cmd

  web.91als.net:
  - cmd.exec_code
  - cmd.exec_code_all
  - cmd.has_exec
  - cmd.powershell
  - cmd.retcode
  - cmd.run
  - cmd.run_all
  - cmd.run_bg
  - cmd.run_chroot
  - cmd.run_stderr
  - cmd.run_stdout
  - cmd.script
  - cmd.script_retcode
  - cmd.shell
  - cmd.shell_info
  - cmd.shells
  - cmd.tty
  - cmd.which
  - cmd.which_bin
  查看指定模块的说明:
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.doc cmd.run-----------查看帮助

  5、state
[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_state_modules

[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.list_state_functions file

[iyunv@saltstack01 ~]# salt 'web.91als.net' sys.state_doc file------------查看帮助

  (更多内容详见(saltstack专题学习(二)))

运维网声明 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-431207-1-1.html 上篇帖子: SaltStack(五) SaltStack与ZeroMQ 下篇帖子: 三百六十行,行行转IT
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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