fengda 发表于 2018-1-3 15:40:58

saltstack专题学习(一)

  第一章: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.210saltStack01.91als.net
  minion: 10.2.11.218 web.91als.net
  minion: 10.2.11.219 tomcat.91als.net
  2.2.1)采用yum安装方式

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

[*]master上安装  
#yum info salt-master(查看版本)
#yum -y install salt-master(安装master)
  查看
# rpm -ql salt-master
  启动:
#/etc/init.d/salt-master start
  查看:
# 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上安装
#yum -y install salt-minion
#yum -y install salt-minion
  启动:
#/etc/init.d/salt-minion start
#/etc/init.d/salt-minion start
  2.3)证书管理

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

[*]查看
# 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)测试访问
# salt '*' test.ping
  saltstack.91als.net:
  True
  web.91als.net:
  True
  tomcat.91als.net:
  True
  saltstack01.91als.net:
  True
  2.5) 查看master上安装了那些文件

# 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上查看

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

               



  3.2)minion配置文件



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

  1)管理对象(target)

  1.1)通过minion># 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      TTYFROMLOGIN@>  root   pts/010.2.11.251      09:11    1:46m0.16s0.16s -bash
  1.2)-E :正则匹配
#salt -E 'web1-(prod|devel)' test.ping
  (在top.sls中)
  base:
  'web1-(prod|devel):
  - match: pcre/granis/pillar
  - webserver
  -L: 列表匹配
# salt -L 'web.91als.net' test.ping
  web.91als.net:
  True
  1.3)-G:grains匹配
# 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
  (学习模块的方法)
# salt 'web.91als.net' sys.list_modules ----查看哪些模块
# salt 'web.91als.net' sys.list_functions service-----查看service模块支持哪些函数方法
# 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模块
# salt '*' service.available sshd ---判断服务是否运行
  web.91als.net:
  True
  案例2:status 模块是系统状态的常用信息模块,可以利用这个模块查看系统的信息
# salt -L 'web.91als.net' status.cpuinfo
  案例3:cmd 模块是常用的执行远程命令模块,具有强大的功能
# salt -L 'web.91als.net' sys.list_functions cmd---查看cmd支持哪些函数
# cmd.run 执行一个远程shell命令#salt '192.168.0.100' cmd.run 'ls -l' # cmd.script 在远程minion执行一个master上的脚本,命令会从master下载脚本到minion上并执行# 路径为file_root参数指定的路径为 salt:// 路径#salt '192.168.0.100' cmd.script salt://scripts/runme.sh  案例4:state 模块是salt state的管理模块,可以通过state模块简单的对minion操作sls状态
# salt -L 'web.91als.net' sys.list_functions state
  安全限制,限制指定用户访问某些模块,某些模块中的某些方法
  1)对模块的访问控制(/etc/salt/master)
  publisher_acl:
  oldboy:
  - test.ping
  - network.*
  2)新建用户oldboy,并授权
# chmod 755 /var/cache/salt /var/cache/salt/master /var/cache/salt/master/jobs /var/run/salt /var/run/salt/master
# chmod 777 /var/log/salt/master
  3)测试
# su - oldboy
$ salt '*' test.ping
  saltstack01.91als.net:
  True
  saltstack.91als.net:
  True
  tomcat.91als.net:
  True
  web.91als.net:
  True
$ 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).
  指定某个用户只能在某些机器上运行某些模块

  user01用户只可以在web开头的服务器上运行test.ping
# su - user01
$ 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).
$ 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返回的
# 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
# /etc/init.d/salt-master restart
# 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
# /etc/init.d/salt-minion restart
  3.1.5)测试
# salt '*' cmd.run 'w' --return mysql

  2、grains组件
  介绍:grains里面记录每台minion的常用属性,比如cpu,内存,硬盘信息,可以通过grains.items查看
  自定义grains常用的方法:
# 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服务
# vim /etc/salt/minion.d/grains.conf
  grains:
  roles:
  - webserver
  - memcache
  #deployment: datacenter4
  #cabinet: 13
  #cab_u: 14-15
  1.2)在salt-master上测试
# salt -G roles:webserver test.ping
  web.91als.net:
  True
# salt -G roles:memcache test.ping
  saltstack01.91als.net:
  True
  web.91als.net:
  True
  saltstack.91als.net:
  True
  2)通过grains模块定义grains
  在master上设置:
# salt 'tomcat.91als.net' grains.append saltboot 'tomcat' (定义tomcat.91als.net服务器上,定义saltboot并设置为tomcat)
  tomcat.91als.net:
  ----------
  saltboot:
  - tomcat
# salt 'tomcat.91als.net' grains.item saltboot
  tomcat.91als.net:
  ----------
  saltboot:
  - tomcat
# salt -G saltboot:tomcat test.ping
  tomcat.91als.net:
  True
  3、pillar组件
  3.1)打开配置文件/etc/salt/master
  pillar_roots:
  base:
  - /srv/pillar
  3.2) 配置文件
#mkdir -p /src/pillar
#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
#vim /src/pillar/top.sls
  base:
  '*':----------------#target目标
  - packages ----------------引用packages.sls
  - services ---------------------引用services.sls
# 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
# salt '*' saltutil.refresh_pillar
# 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
# salt 'web.91als.net' sys.list_modules
  web.91als.net:
  - acl
  - aliases

  ->  - apache
  - archive
  - artifactory
  - at
  - ....
  查看指定模块所有的funcation
# 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
  查看指定模块的说明:
# salt 'web.91als.net' sys.doc cmd.run-----------查看帮助
  5、state
# salt 'web.91als.net' sys.list_state_modules
# salt 'web.91als.net' sys.list_state_functions file
# salt 'web.91als.net' sys.state_doc file------------查看帮助
  (更多内容详见(saltstack专题学习(二)))
页: [1]
查看完整版本: saltstack专题学习(一)