文章目录

  • 一、saltstack部署
    • 1.安装和启动
      • 1)准备yum源
      • 2)master和minion安装包
      • 3)master端执行命令允许minion连接
      • 4)master端测试与minion端的连接:
    • 2.配置和使用
      • 1)salt使用语句(salt内置模块的调用)
      • 2) saltstack配置文件
      • 3)调用配置文件执行安装
      • 4)查看saltstack调用index.html的工作原理
      • 5)service.running:模块
      • 6)一个完整的sls文件:安装、配置、启动
      • 7)如果同时存在apache.sls 和 apache/init.sls,则子目录 apache/init.sls 被忽略,apache.sls将被用来表示 apache.
  • 二、Grains
    • 1.编写远程执行模块
    • 2信息查询:
    • 3.grains定义的三种方法
      • 方法1,在/etc/salt/minion中定义
      • 方法2,在/etc/salt/grains中定义
      • 方法3,编写grains模块,在salt-master端创建_grains目录
    • 4.grains匹配运用
      • 1)指令匹配
      • 2)在top文件中匹配,在指定的节点中创建应用,不同的主机中部署不同的grains
      • 3)server12配置apache;server13配置nginx
      • 4)安装和配置分开

一、saltstack部署

1.安装和启动

  • saltstack是一个配置管理系统,能够维护预定义状态的远程节点。是一个分布式远程执行系统,用来在远程结点上执行命令和查询数据。并行的。
  • 运维的核心是降低成本和提高效率
  • 准备三个纯净的虚拟机server1,2,3;server1是master,server2,3是minion
  • 包括安装、配置、管理
1)准备yum源
[root@server11 yum.repos.d]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-3000.el7.noarch.rpm
#阿里云镜像:https://developer.aliyun.com/mirror/saltstack?spm=a2c6h.13651102.0.0.3e221b118vroAq
[root@server11 yum.repos.d]# vim salt-3000.repo #改成阿里云的源http://mirrors.aliyun.com/saltstack
[salt-3000]
name=SaltStack 3000 Release Channel for Python 2 RHEL/Centos $releasever
baseurl=http://mirrors.aliyun.com/saltstack/yum/redhat/7/$basearch/3000
failovermethod=priority
enabled=1
gpgcheck=0

2)master和minion安装包
[root@server11 yum.repos.d]# yum install -y salt-master.noarch
[root@server11 yum.repos.d]# systemctl enable --now  salt-master
[root@server12 salt]# yum install -y salt-minion.noarch
[root@server12 ~]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写

[root@server12 salt]# systemctl enable --now salt-minion.service %server13也弄minion
[root@server13 salt]# yum install -y salt-minion.noarch
[root@server13 ~]# cd /etc/salt/
[root@server13 salt]# ls
[root@server13 salt]# vim minion
改:
master:192.168.100.241 #都要顶格写
[root@server13 salt]# systemctl enable --now salt-minion.service 
3)master端执行命令允许minion连接

master端有安全认证,需要同意连接

[root@server11 yum.repos.d]# salt-key -L
Accepted Keys:
server12
server13
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@server11 yum.repos.d]# salt-key -A#a是指定节点,A是指定所有
The following keys are going to be accepted:
Unaccepted Keys:
server12 server13
Proceed? [n/Y] y
Key for minion server12 server13 accepted.

4)master端测试与minion端的连接:
[root@server11 yum.repos.d]# yum install lsof -y
[root@server11 yum.repos.d]# lsof -i :4505
[root@server11 yum.repos.d]# salt '*' test.ping#*是指—L列出来的所有主机,检测一下是否有响应

[root@server11 yum.repos.d]# yum install python-setproctitle.x86_64 -y #安装后重起salt-master
[root@server11 yum.repos.d]# systemctl restart salt-master.service
[root@server12 salt]# pwd
/etc/salt
[root@server12 salt]# ls#在启动一个minion端时会产生一个minion_id文件,来记录主机名
cloud         cloud.deploy.d  cloud.profiles.d   master    minion    minion_id  proxy    roster
cloud.conf.d  cloud.maps.d    cloud.providers.d  master.d  minion.d  pki        proxy.d
[root@server12 salt]# cat minion_id #如果要改主机名。则改完主机名后要删掉该文件,重新生成
server12

2.配置和使用

1)salt使用语句(salt内置模块的调用)

具体参考官网:http://docs.saltstack.cn/ref/states/all/index.html

[root@server11 yum.repos.d]# salt server* test.ping
[root@server11 yum.repos.d]# salt server12 test.ping

[root@server11 yum.repos.d]# salt 'server12' sys.doc pkg|grep pkg.install#查看服务使用命令
[root@server11 ~]# salt server12 pkg.install httpd
[root@server11 ~]# salt 'server12' service.start httpd

[root@server11 ~]# salt 'server12' sys.doc file #查看文件使用命令
[root@server11 ~]# cat index.html
server12
[root@server11 ~]# salt-cp server12 index.html /var/www/html/#上传文件
2) saltstack配置文件

SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。

  • sls文件命名:

    • sls文件以”.sls”后缀结尾,但在调用是不用写此后缀。
    • 使用子目录来做组织是个很好的选择。
    • init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls 就是表示apache.
    • 如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache
  • 编写规则:缩进(不能用tab键)、冒号、短横杠(具体在官方文档中查看)

  • 创建一个sls文件:

vim /srv/salt/apache.sls
httpd: # ID声明pkg: # 状态声明- installed # 函数声明
[root@server11 srv]# vim /etc/salt/master #可以看到所有文件的根目录是/srv/salt,所以需要创建
[root@server11 ~]# cd /srv/
[root@server11 srv]# ls
[root@server11 srv]# mkdir salt
[root@server11 salt]# pwd
/srv/salt
3)调用配置文件执行安装
[root@server11 srv]# cd /srv/salt/
[root@server11 salt]# mkdir apache
[root@server11 salt]# mv ~/index.html apache/
[root@server11 salt]# cd apache/
[root@server11 apache]# pwd
/srv/salt/apache
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
httpd:pkg.installed
[root@server11 apache]# salt server12 state.sls apache.install#调用文本。不用加后缀
%安装多个
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
apache:pkg.installed:- pkgs:- httpd- php- php-mysql
[root@server11 apache]# salt server12 state.sls apache.install

[root@server11 apache]# mkdir files
[root@server11 apache]# mv index.html files/
##文件操作,所有的目录都是基于/srv/salt/
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
apache:pkg.installed:- pkgs:- httpd- php- php-mysqlfile.managed:- source: salt://apache/files/index.html- name: /var/www/html/index.html
[root@server11 apache]# salt server12 state.sls apache.install
4)查看saltstack调用index.html的工作原理
[root@server12 salt]# yum install tree -y
[root@server12 salt]# cd /var/cache/salt/
[root@server12 salt]# tree .

[root@server12 salt]# cd minion/files/base/apache/files/
[root@server12 files]# ls
index.html
[root@server12 files]# md5sum index.html
f493e0f9f1dba0d3e0da7ce811875763  index.html[root@server11 apache]# vim  files/index.html
[root@server11 apache]# cat files/index.html
server12
server12
[root@server11 apache]# salt server12 state.sls apache.install@@ -1 +1,2 @@server12+server12
[root@server11 apache]#  md5sum files/index.html
02f29ea0b1c28693e91a843cf6057b95  files/index.html
[root@server12 files]# md5sum index.html #在server11中改变index文件,执行install.sls,会发现server12会发生相应改变,且md5sum与server11中的一致
02f29ea0b1c28693e91a843cf6057b95  index.html

saltstack的工作原理: 每个文件都有自己的md5sum(md5码)。saltstack通过发布订阅系统,将sls文件推送到远程主机的本地(saltstack有自己的缓存目录/var/cache/salt),在本地执行sls文件。

5)service.running:模块
[root@server11 apache]# vim install.sls
[root@server11 apache]# cat install.sls
apache:pkg.installed:- pkgs:- httpd- php- php-mysqlfile.managed:- source: salt://apache/files/index.html- name: /var/www/html/index.htmlservice.running:- name: httpd
[root@server11 apache]# salt server12 state.sls apache.install

6)一个完整的sls文件:安装、配置、启动
[root@server11 apache]# vim install.sls
apache:pkg.installed:- pkgs:- httpd- php- php-mysqlfile.managed:- source: salt://apache/files/httpd.conf- name: /etc/httpd/conf/httpd.confservice.running:- name: httpd- enable: true- watch:- file: apache
[root@server11 apache]# salt server12 state.sls apache.install
#在server12中查看结果
[root@server12 ~]# netstat -antlp#已改成8080
tcp6       0      0 :::8080                   :::*                    LISTEN      3667/httpd

7)如果同时存在apache.sls 和 apache/init.sls,则子目录 apache/init.sls 被忽略,apache.sls将被用来表示 apache.
[root@server11 apache]# mv install.sls init.sls
[root@server11 apache]# salt server12 state.sls apache#默认的读取init.sls
#apache.sls和init.sls同时存在在apache目录下,执行salt server12 state.sls apache时先找apache.sls,忽略init.sls

二、Grains

  • grains官方手册:http://docs.saltstack.cn/topics/grains/index.html
  • Grains是SaltStack的一个组件,存放在SaltStack的minion端。
    当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当
    minion重启时才会进行数据的更新。
    由于grains是静态数据,因此不推荐经常去修改它。
    应用场景:
    信息查询,可用作CMDB。
    在target中使用,匹配minion。
    在state系统中使用,配置管理模块。

1.编写远程执行模块

[root@server11 salt]# mkdir /srv/salt/_modules
[root@server11 salt]# cd _modules/
[root@server11 _modules]# ls
[root@server11 _modules]# pwd
/srv/salt/_modules
[root@server11 _modules]# vim mydisk.py
[root@server11 _modules]# cat mydisk.py
def df():return __salt__['cmd.run']('df -h')[root@server12 ~]# cd /var/cache/salt/minion/
[root@server12 minion]# tree .

[root@server11 _modules]# salt server12 cmd.run df
[root@server11 _modules]# salt server12 saltutil.sync_modules#推到minion端server12
server12:- modules.mydisk
[root@server11 _modules]# salt server12 mydisk.df

2信息查询:

[root@server11 _modules]# salt '*' grains.ls#默认可用的grains
[root@server11 _modules]# salt '*' grains.item#查看每一项的值
[root@server11 _modules]# salt server12 grains.item ipv4#取单项的值

3.grains定义的三种方法

方法1,在/etc/salt/minion中定义
[root@server12 salt]# cd /etc/salt/
[root@server12 salt]# ls
[root@server12 salt]# vim minion
改动:
grains:roles:- apache

[root@server12 salt]# systemctl restart salt-minion.service #重启salt-minion,否则数据不会更新
[root@server11 _modules]# salt server12 grains.item roles
server12:----------roles:- apache
方法2,在/etc/salt/grains中定义
[root@server13 salt]# pwd
/etc/salt
[root@server13 salt]# vim grains
[root@server13 salt]# cat grains
roles:- nginx
[root@server11 _modules]# salt server12 saltutil.sync_grains#静态的,需要同步数据
server12:
[root@server11 _modules]# salt '*' grains.item roles#查找自定义项

方法3,编写grains模块,在salt-master端创建_grains目录
[root@server11 _modules]# mkdir /srv/salt/_grains
[root@server11 _modules]# cd /srv/salt/_grains
[root@server11 _grains]# vim mygrain.py
[root@server11 _grains]# cat mygrain.py
def my_grain():grains = {}grains['salt'] = 'satck'grains['hello'] = 'world'return grains
[root@server11 _grains]# salt '*' saltutil.sync_grains

4.grains匹配运用

1)指令匹配
[root@server11 _grains]# salt -G roles:apache test.ping#在target中匹配minion
[root@server11 _grains]# salt -G roles:nginx test.ping
[root@server11 _grains]# salt -G salt:satck test.ping

2)在top文件中匹配,在指定的节点中创建应用,不同的主机中部署不同的grains
[root@server11 _grains]# pwd
/srv/salt/_grains
[root@server11 _grains]# cd ..
[root@server11 salt]# pwd
/srv/salt
[root@server11 salt]# vim top.sls
[root@server11 salt]# cat top.sls #server12上有apache,server13上有nginx
base:'roles:apache':- match: grain- apache'roles:nginx':- match: grain- nginx[root@server11 salt]# mkdir nginx
[root@server11 salt]# cd nginx/
[root@server11 nginx]# pwd
/srv/salt/nginx
[root@server11 nginx]# mkdir files
[root@server11 nginx]# cd files/
[root@server11 files]# pwd
/srv/salt/nginx/files
[root@server11 files]# ls
nginx-1.18.0.tar.gz
[root@server11 files]# cd ..
[root@server11 nginx]# vim init.sls
[root@server11 nginx]# cat init.sls
nginx:file.managed:- source: salt://nginx/files/nginx-1.18.0.tar.gz- name: /mnt/nginx-1.18.0.tar.gz[root@server11 nginx]# salt '*' state.highstate#查看运行结果
[root@server13 salt]# cd /mnt/
[root@server13 mnt]# ls
nginx-1.18.0.tar.gz

3)server12配置apache;server13配置nginx
[root@server11 salt]# cd /srv/salt/nginx/
[root@server11 nginx]# ls
files  init.sls
[root@server11 nginx]# vim init.sls
nginx-install:pkg.installed:- pkgs:- gcc- pcre-devel- openssl-develfile.managed:- source: salt://nginx/files/nginx-1.18.0.tar.gz- name: /mnt/nginx-1.18.0.tar.gzcmd.run:- name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null- creates: /usr/local/nginx#判断有没有这个目录
[root@server11 nginx]# salt server13 state.sls nginx[root@server11 nginx]# scp server13:/usr/local/nginx/conf/nginx.conf .
root@server13's password:
nginx.conf                                              100% 2656     1.9MB/s   00:00
[root@server11 nginx]# mv nginx.conf files/
[root@server11 nginx]# cd files/
[root@server11 files]# ls
nginx-1.18.0.tar.gz  nginx.conf
[root@server11 files]# vim nginx.conf
#改正用户:
user  nginx;


搜索nginx systemed,看官方写法:

[root@server11 files]# vim nginx.service
[root@server1 files]# cat nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true[Install]
WantedBy=multi-user.target[root@server11 files]# cd ..
[root@server11 nginx]# vim init.sls
[root@server11 nginx]# cat init.sls
nginx-install:pkg.installed:- pkgs:- gcc- pcre-devel- openssl-develfile.managed:- source: salt://nginx/files/nginx-1.18.0.tar.gz- name: /mnt/nginx-1.18.0.tar.gzcmd.run:- name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null- creates: /usr/local/nginx
/usr/local/nginx/conf/nginx.conf:file.managed:- source: salt://nginx/files/nginx.confnginx-service:user.present:- name: nginx- shell: /sbin/nologin- home: /usr/local/nginx- createhome: falsefile.managed:- source: salt://nginx/files/nginx.service- name: /usr/lib/systemd/system/nginx.serviceservice.running:- name: nginx- enable: true- reload: true- watch:- file: /usr/local/nginx/conf/nginx.conf[root@server11 nginx]# salt server13 state.sls  nginx[root@server13 ~]# ps aux#查看用户登陆
nginx     7405  0.0  0.0  46320  2024 ?        S    01:03   0:00 nginx: worker process

4)安装和配置分开
[root@server11 nginx]# cp init.sls install.sls
[root@server11 nginx]# vim install.sls

[root@server11 nginx]# vim init.sls
[root@server1 nginx]# cat init.sls

#两个文件一起推
[root@server11 nginx]# salt server13 state.sls nginx.install
[root@server11 nginx]# cd ..
[root@server11 salt]# ls
apache  _grains  _modules  nginx  top.sls
[root@server11 salt]# salt '*' state.highstate#运行install和init

saltstack(1)环境部署、(2)Grains相关推荐

  1. Saltstack自动化环境部署

    Saltstack知多少 Saltstack是一种全新的基础设施管理方式,是一个服务器基础架构集中化管理平台,几分钟内便可运行起来,速度够快,服务器之间秒级通讯,扩展性好,很容易批量管理上万台服务器, ...

  2. 企业运维实战--自动化运维Saltstack(上)之saltstack的安装部署、远程执行、grains和pillar详解以及Jinja模板的使用

    企业运维实战--自动化运维Saltstack(上) 前言 一.Saltstack安装部署 二.sls文件远程执行 saltstack安装httpd并启动 saltstack源码编译安装nginx 启动 ...

  3. 实战 | 某小公司项目环境部署演变之路

    点击上方蓝色"视学算法",选择"设为星标" 获取独家整理的学习资料! 作者 | 邵磊 来源 | juejin.im/post/5ade8a37f265da0b8 ...

  4. 【Smobiler企业APP开发之一】开发环境部署

    最近研究了下Smobiler-.net移动开发,对于做企业APP开发Smobiler还是够用的,况且是完全使用C#进行编程,对于使用C#进行程序设计的程序员来说还是很容易上手的. 本章节主要介绍Smo ...

  5. ansible自动化运维(二)——环境部署及常用模块的使用

    实验环境 主机 ip server1(主控端) 172.25.6.1 server2(节点) 172.25.6.2 server3(节点) 172.25.6.3 一.环境部署 ansible的配置文件 ...

  6. kafka 基础知识梳理及集群环境部署记录

    一.kafka基础介绍 Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特 ...

  7. 华为云计算FusionCompute环境部署实验之使用批量部署工具安装

    本文由乾颐堂HCIE培训讲师姜帆老师提供 一.环境介绍 使用实验环境必须提前在中登记预约 1. 实验拓扑 2. 环境简介 使用环境安装虚拟机通过服务器的BMC接口实现,电源控制 访问Console 光 ...

  8. eclipse中hadoop2.3.0环境部署及在eclipse中直接提交mapreduce任务

    转自:http://my.oschina.net/mkh/blog/340112 1 eclipse中hadoop环境部署概览 eclipse中部署hadoop包括两大部分:hdfs环境部署和mapr ...

  9. Mac下web自动化环境部署

    1.前提:安装python环境,文件可参考:https://www.cnblogs.com/nbnuan/p/9717881.html 2.浏览器很多,主流的浏览器有:ie,firefox,chrom ...

最新文章

  1. OpenCV实现幻灯片滑slides soble的实例(附完整代码)
  2. php mysql int string_php从mysql取出int数据,变成了string
  3. HDU 5652 India and China Origins(二分 + BFS)
  4. Java——集合(Map集合的两种迭代)
  5. 【转】 谈谈C++中的swap函数
  6. Python语言程序设计 嵩天
  7. 其他计算机找不到共享打印机驱动程序,win10连接共享打印机时“找不到驱动程序”怎么解决_win10连接共享打印机时“找不到驱动程序”处理方法...
  8. 内网穿透工具开发者运维人员必备
  9. 复指数信号正交性的简单证明
  10. 将1自动补位为01_英雄联盟如何避免被自动补位到辅助位置
  11. 【项目小结】爬虫学习进阶:获取百度指数历史数据
  12. Google的恶搞新闻联播
  13. SpringBoot集成rabbitmq错误:org.springframework.amqp.AmqpConnectException: java.net.ConnectException的解决办法
  14. NX二次开发-UFUN自定义尺寸导出NX窗口区域图像UF_DISP_create_framed_image
  15. 修复损坏的gz或tar.gz压缩文件之方法篇
  16. 基于中台的公共图书馆数据服务研究
  17. 【程序】Altera FPGA NIOS实现Scatter-Gather DMA(SGDMA)收发回环测试,描述符和缓冲区全部放在同一块SDRAM里面
  18. 【怎么辨别一个公司是不是外包?】
  19. 深信服上网行为管理(AC)部署三两事
  20. Go 1.19.3 select原理简析

热门文章

  1. 字符串的冒泡排序c语言,c语言单链表冒泡排序_c语言字符串排序冒泡法_c语言链表排序...
  2. Elasticsearch:constant keyword 数据类型
  3. 开源赋能 普惠未来|元遨/CARSMOS诚邀您参与2023开放原子全球开源峰会
  4. 计算机PS英语词汇,Photoshop 词汇中英文对照-L
  5. 事态升级是什么意思_分手后,你是怎样挽回对方的呢?
  6. 揭开智能配置上网(微信Airkiss)的奥妙面纱
  7. 辰光php客服系统源码_仿伊对梵高相亲交友系统产品特性以及构成基础,你了解吗?...
  8. 【技巧】MySql 分组Group 查询 用|隔开 取分组后的其他字段
  9. Leetcode 398.随机数索引
  10. 小程序适配IphoneX