salt-stack部署安装

saltstack 安装:

saltstack python开发
salt C/S 架构 server: master client: minion

配置管理工具:
puppet 体量大,功能多, ruby语言
saltstack 适中,性能好
ansible 轻量,基于ssh
fabric

10.1.1.1 master
10.1.1.2 minion1
10.1.1.3 minion2

########## 安装依赖包 ############################################
yum install -y ntpdate wget xz gcc gcc-c++ zlib zlib-devel python-devel openssl-devel
ntpdate -u cn.pool.ntp.org

########### 升级python ############################################
wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz --no-check-certificate
tar xf Python-2.7.14.tgz
cd Python-2.7.14
./configure --prefix=/usr/local/python-2.7.14
make && make install

cd /usr/bin/
mv pydoc pydoc.bak
mv python python.bak
mv python-config python-config.bak
ln -s /usr/local/python-2.7.14/bin/pydoc pydoc
ln -s /usr/local/python-2.7.14/bin/python2.7 python2.7
ln -s /usr/local/python-2.7.14/bin/python2.7 python
ln -s /usr/local/python-2.7.14/bin/python-config python-config

sed -i ‘s@/usr/bin/python@/usr/bin/python2.6@g’ /usr/bin/yum
vim /usr/bin/yum
将第一行的#!/usr/bin/python 修改为 #!/usr/bin/python2.6

####### 安装pip ############################################
unzip setuptools-36.0.1.zip
cd setuptools-36.0.1
python setup.py install
cd …
tar xf pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install

ln -s /usr/local/python-2.7.14/bin/pip /usr/bin/pip

#######pip 给python安装salt模块
mkdir -pv /usr/src/pip_salt
cd /usr/src/pip_salt
pip download salt
pip install ./*

最后的配置

·@master:
cd pip_salt
tar xf salt-2017.7.2.tar.gz
cd salt-2017.7.2
mkdir /etc/salt
cp -a conf/master /etc/salt/
cp -a pkg/suse/salt-master /etc/init.d/
chmod +x /etc/init.d/salt-master
chkconfig salt-master on
mkdir -p /var/log/salt /srv/salt
ln -s /usr/local/python-2.7.14/bin/salt-master /usr/bin
ln -s /usr/local/python-2.7.14/bin/salt /usr/bin
ln -s /usr/local/python-2.7.14/bin/salt-key /usr/bin

sed -i “s@#interface: 0.0.0.0@interface: 10.1.1.1@” /etc/salt/master
/etc/init.d/salt-master start

·@minion:
cd pip_salt
tar xf salt-2017.7.2.tar.gz
cd salt-2017.7.2
mkdir /etc/salt
cp -a conf/minion /etc/salt/
cp -a pkg/suse/salt-minion /etc/init.d/
chmod +x /etc/init.d/salt-minion
chkconfig salt-minion on
mkdir -p /var/log/salt
ln -s /usr/local/python-2.7.14/bin/salt-minion /usr/bin

sed -i “s@#master: salt@master: 10.1.1.1@” /etc/salt/minion
sed -i “s@#id:@id: minion_10.1.1.2@” /etc/salt/minion
/etc/init.d/salt-minion start

##############################################################

配置:
1.master:
[/etc/salt/master]
interface: 10.1.1.1

service salt-master restart

2.minion:
[/etc/salt/minion]
master: 10.1.1.1
id: minion-1

service salt-minion restart

校验安装结果:
salt-key -L ,显示已经或未认证的被控端id,Accepted Keys为已认证清单,Unaccepted Keys为未认证清单
salt ‘minion-1’ test.ping

salt-key -D 	,删除所有认证主机id证书
salt-key -d id	,删除单个id
salt-key -A	,接受所有id证书请求
salt-key -a id	,接受单个id证书请求

salt_boot_start安装
先下载salt_boot_start

https://github.com/saltstack/salt-bootstrap/releases下载地址
单独安装
saltmaster yum -y install openssh-clients 安装scp
sh bootstrap-salt.sh -M -N

单独安装salt-minion
sh bootstrap-salt.sh

master 命令

salt-key -L
salt-key -a minion
salt-key -f minion 查看minion密钥
salt minion sys.list_functions test 查看test模块其他函数
salt minion sys.doc test.echo 查看test模块中echo 的用法
Usage: salt [options] ‘’ [arguments] salt语法

        命令本身   目标      目标定位字符串   远程执行函数参数

salt minion cmd.run ‘ls -l’
远程命令
salt --summary minion cmd.run ‘echo my salt’ 概要显示–summary 或则 -s
salt --verbose minion cmd.run ‘echo my salt’ 详细显示命令 -v 或则–verbose、

[root@bogon salt-bootstrap-2017.12.13]# salt --out=json minion cmd.run_all “echo my salt”
{
“minion”: {
“pid”: 3325,
“retcode”: 0,
“stderr”: “”,
“stdout”: “my salt”
}
}
以json 格式输出命令结果
[root@bogon salt-bootstrap-2017.12.13]# salt --out=yaml minion cmd.run_all “echo my salt”
minion:
pid: 3331
retcode: 0
stderr: ‘’
stdout: my salt

以yaml格式输出命令结果

[root@bogon salt-bootstrap-2017.12.13]# salt --out=yaml [a-z]inio[a-z] cmd.run_all “echo my salt”
minion:
pid: 3349
retcode: 0
stderr: ‘’
stdout: my salt
[a-z]代表匹配 a-z 的一个字符
?代表匹配 任意一个字符
[root@bogon salt-bootstrap-2017.12.13]# salt -E ‘min’ test.ping
minion:
True
-E代表匹配正则表达式

[root@bogon salt-bootstrap-2017.12.13]# salt -N ‘min’ test.ping
Node group min unavailable in /etc/salt/maste
分组匹配 需要制定/etc/salt/master 的nodegroup

一个minion可以告诉master 他的grains数据 而minion 需要从master获取pillar数据

grains可以看作是描述minion本身固有属性的静态数据
salt minion grains.items
可以查看minion的 cpu信息 网卡信息 swap信息 python信息 内核网关 ip地址

[root@bogon salt-bootstrap-2017.12.13]# salt minion grains.item os
minion:
----------
os:
CentOS
检索某一项
[root@bogon salt-bootstrap-2017.12.13]# salt -G ‘os:centos’ test.ping
minion:
True
按系统定位主机

也可以按网卡定位主机
[root@bogon salt-bootstrap-2017.12.13]# salt -G ‘osrelease:6.*’ test.ping
minion:
True
安全局匹配
[root@bogon salt-bootstrap-2017.12.13]# salt minion grains.setval cpu_num 1
minion:
----------
cpu_num:
1
自己定义minion的cpu数量来定义grains数据

pillar 类似于动态的形式 安全的数据存储库

[root@bogon salt-bootstrap-2017.12.13]# salt -I “role:web” test.ping

匹配role(角色)
应用
符合匹配模式

远程命令模块cmd.run
salt “*” cmd.run “ps -ef | wc -l”
安装包模块pkg.install
salt minion pkg.install “httpd” 安装httpd服务包
[root@bogon salt-bootstrap-2017.12.13]# salt minion pkg.version “httpd”
minion:
2.2.15-69.el6.centos
查看httpd的安装版本
[root@bogon salt-bootstrap-2017.12.13]# salt minion pkg.remove “httpd”
minion:
----------
httpd:
----------
new:
old:
2.2.15-69.el6.centos
查看HTTP的版本

管理服务模块

[root@bogon salt-bootstrap-2017.12.13]# salt minion service.status httpd
minion:
False
查看服务状态 还可以stop start
文件管理模块
[root@bogon salt-bootstrap-2017.12.13]# salt minion file.stats /etc/passwd
minion:
----------
atime:
1541217894.09
ctime:
1541217893.65
gid:
查看文件状态

salt ‘*’ file.chown /a.txt root root 修改minion上文件属组

用户管理模块
[root@bogon salt-bootstrap-2017.12.13]# salt minion user.del “deploy”
minion:
----------
user.del:
‘user.del’ is not available.
user.delete:

        Remove a user from the minion
    
        CLI Example:
    
            salt '*' user.delete name remove=True force=True

ERROR: Minions returned with non-zero exit code
[root@bogon salt-bootstrap-2017.12.13]# salt minion user.delete “deploy”
minion:
True
删除用户
[root@bogon salt-bootstrap-2017.12.13]# salt minion user.info “deploy”
minion:
----------
fullname:
gid:
500
groups:
- deploy
home:
/home/deploy
homephone:
name:
deploy
other:
passwd:
x
roomnumber:
shell:
/bin/bash
uid:
500
workphone:
查看用户信息
salt ‘*’ saltutil.sync_modules
自定义执行模块函数
vim /srv/salt/_modules/hello.py
def world():

return 'hello,world!'

def kk():
return ‘hell,kk’
~

执行函数模块命令:
[root@bogon python3.7]# salt ‘’ saltutil.sync_modules
minion:
- modules.hello
[root@bogon python3.7]# salt '
’ hello.kk
minion:
hell,kk

[root@bogon python3.7]# cd /usr/lib/python2.7/site-packages/salt/modules/ 自带函数模块位置

状态模块安装apache
[root@bogon /]# salt minion state.sls apache

minion:

      ID: install_httpd
Function: pkg.installed
    Name: httpd
  Result: True
 Comment: The following packages were installed/updated: httpd
 Started: 06:17:31.609702
Duration: 81678.151 ms
 Changes:   
          ----------
          httpd:
              ----------
              new:
                  2.2.15-69.el6.centos
              old:

Summary for minion

Succeeded: 1 (changed=1)
Failed: 0

Total states run: 1
Total run time: 81.678 s
运行状态模块好处是判断minion上服务是否已经安装 ,如果未安装就之久安装 ,已经安装就直接跳过
比cmd.run多了一个状态判断 这叫做幂等性。

可以通过判断来让minion 以最小的代价进入 指定的状态。

状态文件的构成:
SLS配置文件使用 YAML语言描述。
规则: 第一缩进两个空格
第二 冒号values表现形式为为键值对 冒号+空格
第三 短横杠 – list_value_one

salt minion sys.list_state_modules 这个命令可以列举所有状态模块列表

file模块包含很多函数

file.managed 下发文件
[root@bogon salt]# vim apache.sls
install_httpd:
pkg.installed:
- name: httpd
httpd_running:
service.running:
- name: httpd
- enable: True
- require:
- pkg: install_httpd
- watch:
- file: httpd_conf
httpd_conf:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://httpd.conf
- user: root
- group: root

  • mode: 600

Highstate函数通过top.sls文件作为入口对模块和主机进行管理的,通过top.sls文件对两个状态文件尽心整合。Mkdir -pv /sev/salt/lamp
Mkdir -pv /srv/salt/nginx
把对应的文件放置在对应的目录下
Lamp—(httpd.conf lamp.sls my.cnf php.ini )
Nginx----(nginx.j2 nginx.sls test_vhost.conf)

Vim top.sls 编辑入口文件

Installed结尾的模块位置/usr/lib/python2.7/site-packages/salt/states

Install结尾的 模块位置 /usr/lib/python2.7/site-packages/salt/modules/下
调用模块及传参数图流程

  • mode: 755

必须要给可执行权限,因为这里是脚本启动,不是二进制文件

minion 命令
salt-call --local key.finger 查看minion的指纹密钥

制定RPM包来源
Mypkgs::
Pkg.installed:

用top.sls文件将Pillar文件定位到不同minion. Top.sls也可以用来在状态系统中

将不同状态文件定位到不同的minion中。

include:

  • soft.modules #包含模块配置文件
    #nginx.tar.gz
    nginx_source:
    file.managed:
    • name: /tmp/nginx-1.12.0.tar.gz #标识文件所在位置
    • unless: test -e /tmp/nginx-1.12.0.tar.gz #检测文件是否存在,只在第一次检测
    • source: salt://nginx/files/nginx-1.12.0.tar.gz #把maser上的文件传过去
      #extract
      extract_nginx:
      cmd.run:
    • cwd: /tmp #进入/tmp目录
    • names:
      • tar zxvf nginx-1.12.0.tar.gz #解压
    • unless: test -d /tmp/nginx-1.12.0.tar.gz
    • require:
      • file: nginx_source #这个命令必须在上面的函数执行成功后才继续执行
        #user
        nginx_user:
        user.present: #用户创建
    • name: nginx
    • createhome: False #不用家目录
    • gid_from_name: True
    • shell: /sbin/nologin #指定shell
      #nginx_pkgs
      nginx_pkg:
      pkg.installed: #安装必备组件
    • pkgs:
      • gcc
      • gcc-c++
      • epel-release
      • openssl-devel
      • pcre-devel
      • zlib-devel
      • gd-devel
      • lua-devel
        #nginx_compile
        nginx_compile: #nginx进行编译
        cmd.run:
    • cwd: /tmp/nginx-1.12.0
    • names:
      • ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-file-aio
        –with-http_ssl_module --with-http_realip_module --with-http_addition_module
        –with-http_image_filter_module --with-http_gzip_static_module
        –with-http_stub_status_module --with-mail --with-mail_ssl_module
        –with-pcre --with-ld-opt=-Wl,-rpath,/usr/local/luajit/lib
        –with-http_sub_module --add-module=/soft/ngx_cache_purge-2.3
        –add-module=/soft/ngx_devel_kit-0.3.0rc1
        –add-module=/soft/echo-nginx-module-master
        –add-module=/soft/lua-nginx-module-master && make && make install
    • require:
      • cmd: extract_nginx
      • pkg: nginx_pkg
        #- unless: test -d /usr/local/nginx/ #检测或不检测目录是否存在
        #cache_dir
        cache_dir:
        cmd.run:
    • names: #创建虚拟主机目录,把nginx目录权限给相关用户
      • mkdir -p /usr/local/nginx/conf/vhosts && chown -R nginx.nginx /usr/local/nginx/
    • require:
      • cmd: nginx_compile
    • unless: test -d /usr/local/nginx/conf/vhosts/
      #vhosts
      file.managed:
    • name: /usr/local/nginx/conf/nginx.conf #修改后的配置文件复制过去
    • source: salt://nginx/files/nginx.conf
      #- unless: test -e /usr/local/nginx/conf/nginx.conf #建议不进行检测,如果检测,有这个文件将不会进行更新

/usr/local/nginx/conf/proxy.conf:
file.managed:
- name: /usr/local/nginx/conf/proxy.conf
- source: salt://nginx/files/proxy.conf
#- unless: test -e /usr/local/nginx/conf/proxy.conf

jdk-config:
file.append:

  • name: /etc/profile
  • text:
  • “#############JAVA ENVIRONMNET################”
  • “export JAVA_HOME=/usr/local/java”
  • “export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:JAVA_HOME/jre/bin: P A T H " − " e x p o r t C L A S S P A T H = . PATH" -"exportCLASSPATH=. PATH""exportCLASSPATH=.CLASSPATH: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JAVA_HOME/jre/lib”
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值