salt搭建及jdk自动部署例子

saltstack 安装:

 

saltstack python开发

salt C/S 架构  server: master   client: minion

 

 

配置管理工具:

puppet   体量大,功能多, ruby语言

saltstack  适中,性能好

ansible    轻量,基于ssh

fabric

扫描二维码关注公众号,回复: 5601194 查看本文章

......

 

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] '<target>' <function> [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:

- Sources:

      - foo: salt://rpms/foorpm

      - bar: http://somesite.org/bar.rpm

  

 用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=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH"

-"exportCLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib"

 

猜你喜欢

转载自blog.csdn.net/weixin_43231324/article/details/86689279
今日推荐