saltstack基本操作第一篇章
一、安装saltstack
1)官网安装
http://repo.saltstack.com/#rhel
saltstack的模块: https://www.unixhot.com/docs/saltstack/ref/modules/all/
2)启动服务
安装源,(所有机器)
yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm -y [root@k8s6 ~]# yum install salt-master salt-minion -y # 安装master和agent [root@node01 ~]# yum install salt-minion -y # 节点安装agent ---
直接启动master
[root@k8s6 ~]# systemctl start salt-master 在master修改salt-minion 配置文件
[root@k8s6 ~]# cd /etc/salt/
[root@k8s6 salt]# cp /etc/salt/minion /etc/salt/minion.bak
[root@k8s6 salt]# vim /etc/salt/minion
master: 192.168.10.22
[root@k8s6 salt]# systemctl start salt-minion # 启动agent
启动会产生 minion_id 这个文件,内容默认为主机名
[root@k8s6 salt]# cat minion_id
k8s6
---
节点服务器修改配置文件
[root@node01 salt]# vim /etc/salt/minion
master: 192.168.10.22
[root@node01 salt]# systemctl start salt-minion
3)秘钥认证过程
master和agent虽然都启动了,但需要得到master的认可才行
agent启动后会产生秘钥对
[root@node01 salt]# tree pki
pki
├── master
└── minion
├── minion.pem 私钥
└── minion.pub 公钥 服务端的秘钥对
[root@k8s6 salt]# tree pki
pki
├── master
│ ├── master.pem 私钥
│ ├── master.pub 公钥
│ ├── minions
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre 查看正在等待被管理的机器
│ │ ├── k8s6
│ │ └── node01
│ └── minions_rejected
└── minion
├── minion.pem
└── minion.pub
[root@k8s6 salt]# salt-key # 列出所有的key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
k8s6
node01
Rejected Keys:
[root@k8s6 salt]# salt-key -a k8s6 # 同意
The following keys are going to be accepted:
Unaccepted Keys:
k8s6
Proceed? [n/Y] y
Key for minion k8s6 accepted.
[root@k8s6 salt]# salt-key # 再次查看
Accepted Keys:
k8s6
Denied Keys:
Unaccepted Keys:
node01
Rejected Keys:
[root@k8s6 salt]# salt-key -a node* # 使用通配符
The following keys are going to be accepted:
Unaccepted Keys:
node01
Proceed? [n/Y] y
Key for minion node01 accepted. 再次查看文件 ===》认证过程则是交换公钥的过程
[root@k8s6 salt]# tree pki
pki
├── master
│ ├── master.pem
│ ├── master.pub
│ ├── minions
│ │ ├── k8s6
│ │ └── node01
│ ├── minions_autosign
│ ├── minions_denied
│ ├── minions_pre
│ └── minions_rejected
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
[root@node01 salt]# tree pki
pki
├── master
└── minion
├── minion_master.pub
├── minion.pem
└── minion.pub
二、执行命令
1) 直接命令行执行命令
[root@k8s6 ~]# salt '*' test.ping # 查看机器在不在
k8s6:
True
node01:
True
[root@k8s6 ~]# salt 'node01' test.ping
node01:
True
[root@k8s6 ~]# salt "node01" cmd.run "date" 执行命令
node01:
Mon Mar :: CST
[root@k8s6 ~]# salt "node01" cmd.run "w" 新命令
node01:
:: up days, :, user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/ 192.168.10.22 Thu19 3days .10s .10s -bash
2)以执行文本的形式去执行
2.1)修改配置服务
[root@k8s6 ~]# vim /etc/salt/master
#file_roots:
# base:
# - /srv/salt
===》改为
file_roots:
base:
- /srv/salt
vim /etc/salt/master
2.2)重启服务
[root@k8s6 ~]# systemctl restart salt-master
[root@k8s6 ~]# mkdir -p /srv/salt/web
2.3)编辑apache.sls文件,安装启动httpd服务
[root@k8s6 ~]# cat /srv/salt/web/apache.sls
apache-install:
pkg.installed:
- names:
- httpd
- httpd-devel apache-service:
service.running:
- name: httpd
- enable: True
apache.sls
2.4)执行过程
[root@k8s6 ~]# salt '*' state.sls web.apache
执行中,发生的事情。master将编辑的文件发生给minion
[root@node01 ~]# cd /var/cache/salt/
[root@node01 salt]# tree
.
└── minion
├── extmods
├── files
│ └── base
│ └── web
│ └── apache.sls
└── proc
└── directories, files
3)salt的高级状态,指定哪台机器执行什么服务。(top file使用案例一)
3.1)编辑配置文件,让k8s去执行web文件夹内的apache服务
[root@k8s6 ~]# cat /srv/salt/top.sls
base:
'k8s6':
- web.apache
3.2)执行之前需要 检测,防止出错
[root@k8s6 ~]# salt 'k8s6' state.highstate test=True # 先检测
[root@k8s6 ~]# salt 'k8s6' state.highstate # 再执行
三、salt的消息队列
1)服务端监听的端口
消息的发布与订阅
[root@k8s6 ~]# netstat -lntup|grep python
tcp 0.0.0.0: 0.0.0.0:* LISTEN /python 4505端口,消息发布的监听端口
tcp 0.0.0.0: 0.0.0.0:* LISTEN /python
[root@k8s6 ~]# lsof -i: -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mini root 21u IPv4 0t0 TCP 192.168.10.22:->192.168.10.22: (ESTABLISHED)
salt-mast root 16u IPv4 0t0 TCP *: (LISTEN)
salt-mast root 18u IPv4 0t0 TCP 192.168.10.22:->192.168.10.23: (ESTABLISHED)
salt-mast root 19u IPv4 0t0 TCP 192.168.10.22:->192.168.10.22: (ESTABLISHED) 消息的返回值
[root@k8s6 ~]# lsof -i: -n
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-mast root 24u IPv4 0t0 TCP *: (LISTEN)
2)安装服务yum install python-setproctitle -y 。可查看具体进程跑的服务
[root@k8s6 ~]# ps aux|grep salt-master
root 0.0 0.0 pts/ S+ : : grep --color=auto salt-master
root 0.0 1.0 ? Ss : : /usr/bin/python /usr/bin/salt-master
root 0.0 0.5 ? S : : /usr/bin/python /usr/bin/salt-master
root 0.0 0.9 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.0 0.9 ? S : : /usr/bin/python /usr/bin/salt-master
root 0.2 1.8 ? S : : /usr/bin/python /usr/bin/salt-master
root 0.0 0.9 ? S : : /usr/bin/python /usr/bin/salt-master
root 0.0 0.9 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.0 1.4 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.2 0.9 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.0 1.3 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.0 1.4 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.0 1.4 ? Sl : : /usr/bin/python /usr/bin/salt-master
root 0.0 1.4 ? Sl : : /usr/bin/python /usr/bin/salt-master
[root@k8s6 ~]# yum install python-setproctitle -y
[root@k8s6 ~]# systemctl restart salt-master
[root@k8s6 ~]# ps aux|grep salt-master
root 0.2 1.0 ? Ss : : /usr/bin/python /usr/bin/salt-master ProcessManager
root 0.0 0.5 ? S : : /usr/bin/python /usr/bin/salt-master MultiprocessingLoggingQueue
root 0.0 0.9 ? Sl : : /usr/bin/python /usr/bin/salt-master ZeroMQPubServerChannel
root 0.0 0.8 ? S : : /usr/bin/python /usr/bin/salt-master EventPublisher
root 0.3 1.2 ? S : : /usr/bin/python /usr/bin/salt-master Maintenance
root 0.0 0.9 ? S : : /usr/bin/python /usr/bin/salt-master ReqServer_ProcessManager
root 0.0 0.9 ? Sl : : /usr/bin/python /usr/bin/salt-master MWorkerQueue
root 0.7 1.2 ? Sl : : /usr/bin/python /usr/bin/salt-master MWorker-
root 0.7 1.2 ? Sl : : /usr/bin/python /usr/bin/salt-master MWorker-
root 0.7 1.2 ? Sl : : /usr/bin/python /usr/bin/salt-master MWorker-
root 0.1 0.9 ? Sl : : /usr/bin/python /usr/bin/salt-master FileserverUpdate
root 0.7 1.2 ? Sl : : /usr/bin/python /usr/bin/salt-master MWorker-
root 0.7 1.2 ? Sl : : /usr/bin/python /usr/bin/salt-master MWorker-
root 0.0 0.0 pts/ S+ : : grep --color=auto salt-master
yum install python-setproctitle -y
四、根据salt的组件角色来进行分组
1)根据内置组件判断分组执行服务器的命令
[root@k8s6 ~]# salt 'k8s6' grains.ls 显示所有的key
[root@k8s6 ~]# salt 'k8s6' grains.items 查看所有的key
[root@k8s6 ~]# salt 'k8s6' grains.item os 查看key里面的值,如操作系统
[root@k8s6 ~]# salt -G 'os:CentOS' test.ping 目标选择。根据操作系统来进行选择执行的命令
k8s6:
True
node01:
True
[root@k8s6 ~]# salt -G 'os:CentOS' cmd.run 'echo hehe'
k8s6:
hehe
node01:
hehe
2)自定义角色进行分组
[root@k8s6 ~]# vim /etc/salt/minion
#grains:
# roles:
# - webserver
# - memcache
===》
grains:
roles: apache
[root@k8s6 ~]# salt '*' grains.item roles
k8s6:
----------
roles:
node01:
----------
roles:
[root@k8s6 ~]#
[root@k8s6 ~]# systemctl restart salt-minion
[root@k8s6 ~]# salt '*' grains.item roles
k8s6:
----------
roles:
apache
node01:
----------
roles:
执行命令,找到 有apache服务的,为一个角色
[root@k8s6 ~]# netstat -lntup|grep httpd
tcp6 ::: :::* LISTEN /httpd
[root@k8s6 ~]# salt -G 'roles:apache' cmd.run 'systemctl stop httpd'
k8s6:
[root@k8s6 ~]# netstat -lntup|grep httpd
[root@k8s6 ~]# salt -G 'roles:apache' cmd.run 'systemctl start httpd'
k8s6:
[root@k8s6 ~]#
五、top案例使用方式二。根据角色来选择
1)配置文件编写,在服务端编写角色
[root@k8s6 ~]# cat /srv/salt/top.sls
base:
'k8s6':
- web.apache
'roles:apache':
- match: grain 选择匹配方式
- web.apache
2)在nodes编写角色
[root@node01 salt]# cat /etc/salt/grains
cloud: openstack
3)刷新出来角色(重启或刷新)
[root@node01 salt]# systemctl restart salt-minion
master服务端获取角色
[root@k8s6 ~]# salt '*' grains.item cloud
k8s6:
----------
cloud:
node01:
----------
cloud:
openstack
================
可以不用重启,可刷新后,再获取
[root@k8s6 ~]# salt '*' saltutil.sync_grains 服务端刷新
六、开发一个grains。使用Python自定义item
1)脚本存放的固定位置文件夹
mkdir /srv/salt/_grains
2)Python脚本返回字典即可
[root@k8s6 ~]# cat /srv/salt/_grains/my_grains.py
#!/usr/bin/env python
#-*- coding: utf- -*- def my_grains():
grains = {}
grains["iaas"] = "openstack"
grains["edu"] = "oldboy"
return grains
my_grains.py
3)执行脚本同步命令
[root@k8s6 ~]# salt '*' saltutil.sync_grains
k8s6:
- grains.my_grains
node01:
- grains.my_grains
salt '*' saltutil.sync_grains
同步之后可在node节点中查看到该python脚本
[root@node01 ~]# cd /var/cache/salt/
[root@node01 salt]# tree
.
└── minion
├── accumulator
├── extmods
│ └── grains
│ ├── my_grains.py
│ └── my_grains.pyc
├── files
│ └── base
│ ├── _grains
│ │ └── my_grains.py
│ ├── top.sls
│ └── web
│ └── apache.sls
├── highstate.cache.p
├── module_refresh
├── proc
└── sls.p
cd /var/cache/salt/
查看效果
[root@k8s6 ~]# salt '*' grains.item iaas
k8s6:
----------
iaas:
openstack
node01:
----------
iaas:
openstack
4)grians的优先级查找
Grians优先级
)系统自带
)grains 文件写的
)minion 配置文件写的
)自己写的
七、另一种动态配置管理pillar
1)启动配置管理
[root@k8s6 ~]# salt "*" pillar.items # 先查看,没有内容
k8s6:
----------
node01:
----------
[root@k8s6 ~]# vim /etc/salt/master # 修改配置
#pillar_opts: False
==》pillar_opts: True
[root@k8s6 ~]# systemctl restart salt-master
[root@k8s6 ~]# salt "*" pillar.items # 再次查看,将出现很多值
salt "*" pillar.items
展示的内容太多,不太好使用,还是需要注释掉
2)使用过程
[root@k8s6 web]# cat /srv/pillar/web/apache.sls
{% if grains['os'] == 'CentOS' %}
apache: httpd
{% elif grains['os'] == 'Debian' %}
apache: apache2
{% endif %}
[root@k8s6 srv]# cat /srv/pillar/top.sls
base:
'k8s6':
- web.apache
[root@k8s6 srv]# tree pillar/
pillar/
├── top.sls
└── web
└── apache.sls
[root@k8s6 ~]# salt '*' pillar.items apache
k8s6:
----------
apache:
node01:
----------
apache:
[root@k8s6 ~]#
[root@k8s6 ~]# salt '*' saltutil.refresh_pillar # 刷新
k8s6:
True
node01:
True
[root@k8s6 ~]# salt '*' pillar.items apache
k8s6:
----------
apache:
httpd
node01:
----------
apache:
[root@k8s6 ~]# salt -I 'apache:httpd' test.ping # 匹配到执行命令??
salt '*' pillar.items apache
3)Grians和pillar的区别
Grians vs Pillar
类型 数据采集方式 应用场景 定义位置
Grians 静态 minion启动时收集 数据查询,目标选择,配置管理 minion
Pillar 动态 master自定义 目标选择,配置管理,敏感数据 master
八、执行命令解析
1)选择目标机器的通配符
选择目标机器的通配符
salt '*' test.ping
salt 'web01' test.ping
salt 'web0[1|2]' test.ping
salt 'web?.com' test.ping
salt 'web0[1-2]' test.ping
salt 'web0[!2]' test.ping
salt -L 'web01,web02' test.ping
salt -E 'web(01|02)' test.ping
salt -S 192.168.10.22 test.ping
salt -S 192.168.10.0/ test.ping
salt -G 'os:RedHat' --batch-size % apache.singel restart # --batch-size %,根据25%的比例重启服务
2)自定义分组
[root@k8s6 ~]# vim /etc/salt/master
#nodegroups:
# group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com or bl*.domain.com'
# group2: 'G@os:Debian and foo.domain.com'
# group3: 'G@os:Debian and N@group1'
# group4:
# - 'G@foo:bar'
# - 'or'
# - 'G@foo:baz'
nodegroups: # 新增
web: 'L@k8s6,node01' # 分组的。新增 [root@k8s6 ~]# systemctl restart salt-master
[root@k8s6 ~]# salt -N web test.ping
3)模块解析执行命令
salt '*' network.active_tcp # 返回所有的tcp连接
salt '*' network.arp # 返回arp表
salt '*' network.get_hostname # 返回主机名
salt '*' service.available sshd # 查看服务是否在运行
salt '*' service.get_all # 查看所有正在运行的服务
salt '*' service.status sshd # 查看运行的状态
salt-cp '*' /etc/hosts /tmp/hehe # 拷贝文件
salt '*' state.show_top # 查看在top里面需要做什么事
salt '*' state.single pkg.installed name=lsof # 手动执行安装
= salt '*' cmd.run 'yum install lsof -y'
九、将返回结果写入数据库
https://www.unixhot.com/docs/saltstack/ref/returners/index.html # 支持的返回的位置
salt '*' state.single pkg.installed name=MySQL-python # 实质则是安装mysql
https://www.unixhot.com/docs/saltstack/ref/returners/all/salt.returners.mysql.html # 官网,所需要执行的步骤
1)数据库操作,创建库,授权
)创建salt数据库
CREATE DATABASE `salt`
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci; )进入当前库
USE `salt`; )创建jids表
DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
`jid` varchar() NOT NULL,
`load` mediumtext NOT NULL,
UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE INDEX jid ON jids(jid) USING BTREE; )创建salt_returns表
DROP TABLE IF EXISTS `salt_returns`;
CREATE TABLE `salt_returns` (
`fun` varchar() NOT NULL,
`jid` varchar() NOT NULL,
`return` mediumtext NOT NULL,
`id` varchar() NOT NULL,
`success` varchar() 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; )创建salt_events表
DROP TABLE IF EXISTS `salt_events`;
CREATE TABLE `salt_events` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`tag` varchar() NOT NULL,
`data` mediumtext NOT NULL,
`alter_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`master_id` varchar() NOT NULL,
PRIMARY KEY (`id`),
KEY `tag` (`tag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; )授权
grant all on salt.* to salt@'%' indentified by 'salt@pw';
flush privileges; 测试连接
mysql -h192.168.10. -usalt -psalt@pw
2)修改配置文件,添加数据库的连接方式
[root@k8s6 ~]# vim /etc/salt/minion
# 最后添加
mysql.host: '192.168.10.22'
mysql.user: 'salt'
mysql.pass: 'salt@pw'
mysql.db: 'salt'
mysql.port:
[root@k8s6 ~]# systemctl restart salt-minion
vim /etc/salt/minion
3)执行操作
[root@k8s6 ~]# systemctl restart salt-minion
[root@k8s6 ~]# tail -f /var/log/salt/minion 进行日志监听
[root@k8s6 ~]# salt '*' test.ping --return mysql
进入数据库查看是否有数据
十、编写自己的执行模块
存放位置: /srv/salt/_modules
命名:文件名就是模块名
[root@k8s6 ~]# cat /srv/salt/_modules/my_disk.py
def list():
cmd = "df -h"
ret = __salt__["cmd.run"](cmd)
return ret
[root@k8s6 ~]# salt '*' saltutil.sync_modules 刷新
k8s6:
- modules.my_disk
node01:
- modules.my_disk
[root@k8s6 ~]# salt '*' my_disk.list # 执行自己的模块
saltstack基本操作第一篇章的更多相关文章
- saltstack系列~第一篇
一 简介:从今天开始学习saltstack 二 salt的认证系列操作 1 原理 saltstack通过/etc/salt/pki/目录下面的配置文件的密钥进行通信,master端接受minion端后 ...
- 《JavaScript高级程序设计》心得笔记-----第一篇章
第一章 JavaScript由ECMAScript.DOM.BOM组成.其中BOM功能在HTML5中有了正式的规范,使BOM的兼容性越来越高. 第二章 1.<script>属性中的asyn ...
- 【第一篇章-android平台buffer播放探索】native media
在android平台,从4.0开始,提出了openmax架构,所以在DNK的R7版本中有了openmax AL层播放的DEMO即native media,这个DEMO就是读本地文件,然后把所读buff ...
- C语言学习之路,第一篇章。
看的书是 C primer plus ,这本书好评很多, 学过C#,没有精通,了解Java,所以看这本书会很容易上手,编译器用的是VC++6.0,因为VS2010好像不支持C99标准,有些代码功能 ...
- saltstack 基本操作
一.常用操作 ①.模块查看 #查看全部模块 [root@k8s_master ~]# salt '*' sys.list_modules # "*"为所有node节点 (此处可以写 ...
- MySQL的基本操作--第一弹
前言:在听许嵩,忆当年,意气风发 ———————————————————————————————————————————————— 好了,今天和大家同步讲解mysql的知识了.都是最基本的知识. 一. ...
- Redis第一篇章 Hello Word!
1.找到redis目录 2.在新建一个文件夹(myredis) 3.将redis.conf 进行复制到myredis 文件夹里面 4.启动redis redis-server /home/dc2-us ...
- 12 Spring Data JPA:orm思想和hibernate以及jpa的概述和jpa的基本操作
spring data jpa day1:orm思想和hibernate以及jpa的概述和jpa的基本操作 day2:springdatajpa的运行原理以及基本操作 day3:多表操作,复杂查询 d ...
- 01 . SaltStack部署配置及简单应用
SaltStack简介 SaltStack saltstack是一个新的基础平台管理工具,只需要花费数分钟即可运行起来,可以支撑管理上万台服务器的规模,数秒钟即可完成数据传递. saltstack是使 ...
随机推荐
- jquery+html实现前端的上传图片预览
就是这样的一个功能,点击加号,出现图片选择,然后选择好以后生成预览. input那么丑,UI看不惯,一定要改成加号 我就用了fa的图标,外部套一个bootstrap4中的class:borde ...
- mysql02---客户端与服务器模型
目录 一.客户端与服务器模型 连接MySQL方式 总结: 二.MySQL服务器构成 三.MySQL的结构 一.客户端与服务器模型 1.mysql是一个典型的C/S服务结构 1.1 mysql自带的客户 ...
- linux 性能测试之基准测试工具
https://niyunjiu.iteye.com/blog/316302 system: lmbench unixbench5.1.2 ubench freebench nbench ltp xf ...
- 第05章 AOP细节
第05章 AOP细节 1.切入点表达式 1.1 作用 通过表达式的方式定位一个或多个具体的连接点. 1.2 语法细节 ①切入点表达式的语法格式 execution([权限修饰符] [返回值类型] [简 ...
- C++ KMP文本匹配
代码如下: 环境为VC #include <iostream> #include <algorithm> #include <string> #include &l ...
- LOJ3119. 「CTS2019 | CTSC2019」随机立方体 二项式反演
题目传送门 https://loj.ac/problem/3119 现在 BZOJ 的管理员已经不干活了吗,CTS(C)2019 和 NOI2019 的题目到现在还没与传上去. 果然还是 LOJ 好. ...
- 前端-PC端瀑布流【10张图】
.HTML 利用封装的 jquerywaterfall.js 方法 完成 <!DOCTYPE html> <html lang="en"> <head ...
- sublime text 3插件下载教程
Sublime官网下载地址:http://www.sublimetext.com/ 安装插件:(插件包管理Preferences Browse Packages) 插件官网:http://www.fe ...
- java通过url调用远程接口返回json数据
java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...
- wangeditor 粘贴word内容带样式
这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用 后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下) ...