saltstack 自動化運維管理(安裝配置、遠程執行、grains/pillar數據系統、jinja模板、job管理、salt-ssh、salt-syndic、salt-api)

實驗環境:
172.25.0.1 作爲master
172.25.0.2 作爲minion
172.25.0.3 作爲minion

1.saltstack 介紹

saltstack是一個配置管理系統,能夠維護預定義狀態的遠程節點。
saltstack是一個分佈式遠程執行系統,用來在遠程節點上執行命令和查詢數據。
saltstack是運維人員提高工作效率、規範業務配置與操作的利器。

Salt的核心功能:
命令發送到遠程系統是並行的而不是串行的
使用安全加密的協議
使用最小最快的網絡載荷
提供簡單的編程接口
Salt同樣引入了更加細緻化的領域控制系統來遠程執行,使得系統成爲目標不止可以通過主機名,還可以通過系統屬性。

Salt的通信機制:
SaltStack 採用 C/S模式,minion與master之間通過ZeroMQ消息隊列通信,默認監聽4505端口。
在這裏插入圖片描述
Salt Master運行的第二個網絡服務就是ZeroMQ REP系統,默認監聽4506端口。
在這裏插入圖片描述


2.saltstack的安裝與配置

2.1 配置yum源

官網:https://www.saltstack.com/
設置官方YUM倉庫:

 yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

2.2 配置master

yum install -y salt-master #安裝master端
systemctl enable salt-master --now #設置master自啓動

2.3 配置minion

yum install -y salt-minion #安裝master端
vim /etc/salt/minion 在minion端設置master主機的ip

master: 172.25.0.1

systemctl enable salt-minion --now #設置master自啓動


2.4 配置master驗證minion

lsof-key -L查看等待驗證的minionsalt-key -a server2添加server2的minion端salt-key -A添加所有minion端salt-key -d server2`刪除指定minion端
(如果hostname與minion端中minion_id中的名稱不符合,需要刪除salt-key和minion_id後,重啓master重新驗證)**

yum install -y python-setproctitle.x86_64可以在ps中查看更詳細的內容
systemctl restart salt-master


配置master
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


配置minion
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


配置master驗證minion
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.saltstack 遠程執行

3.1 salt命令的組成

Salt命令由三個主要部分構成:

salt '<target>' <function>[arguments]

target: 指定哪些minion,默認的規則是使用glob匹配minion id.
salt '*' test.ping
在這裏插入圖片描述
Targets也可以使用正則表達式:
salt -E 'server[1-3]' test.ping
在這裏插入圖片描述
Targets也可以指定列表:
salt -L 'server2,server3' test.ping
在這裏插入圖片描述

funcation是module提供的功能,Salt內置了大量有效的functions.
salt '*' cmd.run 'uname -a'
在這裏插入圖片描述
arguments通過空格來界定參數:
salt 'server2' sys.doc pkg #查看模塊文檔
salt 'server2' pkg.install httpd
salt 'server2' pkg.remove httpd
在這裏插入圖片描述
在這裏插入圖片描述
注意:命令由4505端口推送,4506端口接收響應
在這裏插入圖片描述
在這裏插入圖片描述
salt內置的執行模塊列表可參考 link
在這裏插入圖片描述


3.2 編寫遠程執行模塊

1.編輯master配置文件:vim /etc/salt/master

file_roots:
  base:
    - /srv/salt

重啓master服務:systemctl restart salt-master
在這裏插入圖片描述
/srv/salt/爲salt數據的根目錄


2.創建模塊目錄:
mkdir /srv/salt/_modules


3.編寫模塊文件:
vim /srv/salt/_modules/mydisk.py

def df():   
    return __salt__['cmd.run']('df -h')

4.同步模塊:
salt server2 saltutil.sync_modules


5.運行模塊
salt server2 mydisk.df


在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.3 瞭解Yaml語法

規則一: 縮進
Salt需要每個縮進級別由兩個空格組成,不要使用tabs。

規則二: 冒號
字典的keys在YAML中的表現形式是一個以冒號結尾的字符串。
my_key: my_value

規則三: 短橫槓
想要表示列表項,使用一個短橫槓加一個空格。
-list_value_one
-list_value_two


3.4 配置管理(sls)

1.創建SLS文件

1.SLS表示系統將會是什麼樣的一種狀態,而且是以一種很簡單的格式來包含這些數據,常被叫做配置管理。

2.Salt 狀態系統的核心是SLS,或者叫SaLt State 文件。

3.sls文件命名:sls文件以”.sls”後綴結尾,但在調用是不用寫此後綴。

4.推薦使用子目錄來做組織是個很好的選擇。

5.init.sls 在一個子目錄裏面表示引導文件,也就表示子目錄本身, 所以apache/init.sls 就是表示apache.
如果同時存在apache.sls 和apache/init.sls,則 apache/init.sls 被忽略,apache.sls將被用來表示 apache.


創建一個sls文件:
vim /srv/salt/apache.sls

httpd:                    # ID聲明,同時也是軟件包的名稱 
   pkg:                   # 狀態聲明
     -installed            # 函數聲明

也可以寫成這中形式:
vim /srv/salt/apache.sls

httpd:     #也可以寫成這中形式
   pkg.installed  

也可以寫成這中形式:
vim /srv/salt/apache.sls

web:
  pkg.installed:
    - pkgs:
      - httpd
      - php ##也可以裝多個包

注意:在安裝包時會自動安裝依賴性,在卸載時則不會卸載依賴性,只會滿足所需要的狀態


指定主機執行:
salt server2 state.sls apache


在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


2.創建top文件

top是一個高級狀態,可以對應不同的節點有不同的操作

vim /srv/salt/top.sls

base:
  '*':
      - apache

批量執行:
salt '*' state.highstate
在這裏插入圖片描述


3.使用子目錄配置管理

mkdir /var/salt/apache建立子目錄
vim /var/salt/apache/install.sls
salt server2 state.sls apache.install

注意:可以在任意目錄下執行
在這裏插入圖片描述


也可以更簡單:
mkdir /var/salt/apache建立子目錄
vim /var/salt/apache/init.sls
salt server2 state.sls apache

在這裏插入圖片描述
在這裏插入圖片描述


4.sls示例——配置httpd

vim /srv/salt/apache/init.sls

web:
  pkg.installed:
    - pkgs:
      - httpd
      - php

  file.managed:
    - source: salt://apache/file/httpd.conf
    - name: /etc/httpd/conf/httpd.conf

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: web ##觸發;注意這樣的調用只能有一次

也可以換一種寫法:

web:
  pkg.installed:
    - pkgs:
      - httpd
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/file/httpd.conf

mkdir /srv/salt/apache/file
scp server2:/etc/httpd/conf/httpd.conf /srv/salt/apache/file/
salt server2 state.sls apache

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述


sls示例——配置nginx

方法一
mkdir /srv/salt/nginx
mkdir /srv/salt/nginx/files
vim /srv/salt/nginx/files/nginx.service啓動腳本文件

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.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

vim /srv/salt/nginx/files/nginx.

#user  nobody;
worker_processes  2; ##設置work進程數

vim /srv/salt/nginx/init.sls

nginx-install:
  pkg.installed:
    - pkgs:
      - openssl-devel
      - pcre-devel
      - gcc

  file.managed:
    - name: /mnt/nginx-1.18.0.tar.gz
    - source: salt://nginx/files/nginx-1.18.0.tar.gz

  cmd.run:
    - name: cd /mnt/ && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./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.conf

nginx-service:
  file.managed:
    - name: /usr/lib/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service

  service.running:
    - name: nginx
    - enable: True
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf 

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


方法二
vim /srv/salt/nginx/init.sls

include:
  - nginx.install

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf

nginx-service:
  file.managed:
    - name: /usr/lib/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service

  service.running:
    - name: nginx
    - enable: True
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

vim /srv/salt/nginx/install.sls

nginx-install:
  pkg.installed:
    - pkgs:
      - openssl-devel
      - pcre-devel
      - gcc

  file.managed:
    - name: /mnt/nginx-1.18.0.tar.gz
    - source: salt://nginx/files/nginx-1.18.0.tar.gz

  cmd.run:
    - name: cd /mnt/ && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


sls示例——top文件配置不同主機安裝不同程序

vim /srv/salt/top.sls

base:
  'server2':
    - apache
  'server3':
    - nginx

salt '*' state.highstate高級狀態
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.saltstack的數據系統——grains與pillar

grains與pillar是saltstack的數據系統。

3.1 grains(靜態)

1. grains的介紹

Grains是SaltStack的一個組件,存放在SaltStack的minion端。
當salt-minion啓動時會把收集到的數據靜態存放在Grains當中,只有當minion重啓時纔會進行數據的更新。
由於grains是靜態數據,因此不推薦經常去修改它。

應用場景:
信息查詢,可用作CMDB。
在target中使用,匹配minion。
在state系統中使用,配置管理模塊

2. grains的信息查詢

salt server2 grains.ls
salt server3 grains.item fqdn查詢域名
salt server3 grains.item ipv4查詢IP

在這裏插入圖片描述
在這裏插入圖片描述


3. 自定義grains項

在minion端(方法一)
vim /etc/salt/minion

grains:
  roles: apache

systemctl restart salt-minion.service
在master端查看:salt server2 grains.item roles
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


在minion端(方法二)
vim /etc/salt/grains 創建grains文件

roles: nginx

在master端同步數據:salt server3 saltutil.sync_grains
在master端查看:salt server3 grains.item roles

在這裏插入圖片描述
在這裏插入圖片描述


在master端
mkdir /srv/salt/_grains
vim /srv/salt/_grains/my_grain.py

def my_grain():
    grains = {}
    grains['salt'] = 'stack'
    grains['hello'] = 'world'
    return grains

salt '*' saltutil.sync_grains
salt server2 grains.item salt查看數據
salt server2 grains.item hello

在這裏插入圖片描述
在這裏插入圖片描述


4.grains匹配運用

target中匹配
salt -G roles:apache cmd.run hostname -G通過grains
salt -G roles:nginx cmd.run hostname
salt -G salt:stack cmd.run hostname
salt -G hello:world cmd.run hostname

在這裏插入圖片描述


在top文件中匹配
vim /srv/salt/top.sls

在這裏插入代碼片base:
  'roles:apache':
    - match: grain
    - apache
  'roles:nginx':
    - match: grain
    - nginx

salt '*' state.highstate
在這裏插入圖片描述
在這裏插入圖片描述


3.2 pillar(動態)

1.pillar的介紹

pillar和grains一樣也是一個數據系統,但是應用場景不同。
pillar是將信息動態的存放在master端,主要存放私密、敏感信息(如用戶名密碼等),而且可以指定某一個minion纔可以看到對應的信息
pillar更加適合在配置管理中運用。


2.自定義pillar項

vim /etc/salt/master(這裏是默認設置)

pillar_roots: 
  base:
    - /srv/pillar

mkdir /srv/pillar定義pillar基礎目錄
vim /srv/pillar/packages.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
{% elif grains['fqdn'] == 'server3' %}
package: apache
{% endif %}

vim /srv/pillar/top.sls

base:
  '*':
    - packages

salt '*' saltutil.refresh_pillar刷新pillar數據
salt '*' pillar.items查詢pillar數據
salt '*' pillar.item packkages查詢pillar數據

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.pillar的數據匹配

命令行中匹配
salt -I package:httpd cmd.run hostname
在這裏插入圖片描述
state系統中使用
vim /srv/salt/apache/init.sls

web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/file/httpd.conf

salt server2 state.sls apache

在這裏插入圖片描述
在這裏插入圖片描述


4.Jinja模板

4.1 Jinja模板的介紹

Jinja是一種基於python的模板引擎,在SLS文件裏可以直接使用jinja模板來做一些操作。
通過jinja模板可以爲不同服務器定義各自的變量。

Jinja模板兩種分隔符: {% … %} 和 {{ … }},前者用於執行諸如 for 循環
或賦值的語句,後者把表達式的結果打印到模板上。


4.2 Jinja模板的使用方式

1.使用控制結構包裝條件

vim /srv/salt/test.sls

/mnt/testfile:
  file.append:
    {% if grains['fqdn'] == 'server2' %}
    - text: server2
    {% elif grains['fqdn'] == 'server3' %}
    - text: server3
    {% endif %}

salt '*' state.sls test
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


2.Jinja在普通文件的使用

方法一
vim /srv/salt/apache/init.sls

web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/file/httpd.conf
    - template: jinja
    - context:
      bind: 172.25.0.2

vim /srv/pillar/packages.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
{% elif grains['fqdn'] == 'server3' %}
package: apache
{% endif %}

vim /srv/salt/apache/file/httpd.conf

Listen {{ bind }}:80

salt server2 state.sls apache


在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


3.直接引用pillar/grains變量

直接引用pillar變量
vim /srv/pillar/packages.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
port: 80
{% elif grains['fqdn'] == 'server3' %}
package: apache
{% endif %}

vim /srv/salt/apache/file/httpd.conf

Listen {{ bind }}:{{ pillar['port'] }} ##直接引用pillar變量,必須是有jinja模板的前提
Listen {{ grains['ipv4'][1] }}:{{ pillar['port'] }} ##使用grain變量

salt server2 state.sls apache
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


直接引用grains變量
vim /srv/salt/apache/file/httpd.conf

Listen {{ bind }}:{{ port }}

vim /srv/salt/apache/init.sls可以在入口文件中設置變量

web:
  pkg.installed:
    - pkgs:
      - {{ pillar['package'] }}
      - php

  service.running:
    - name: httpd
    - enable: True
    - watch:
      - file: /etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://apache/file/httpd.conf
    - template: jinja
    - context:
      bind: {{ grains['ipv4'][1] }}
      port: {{ pillar['port'] }}

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


4.使用jinja模板的Import方式

vim /srv/salt/lib.sls

{% set port = 8000 %} ##定義端口

vim /srv/salt/apache/file/httpd.conf

{% from 'lib.sls' import port %} ##在apache配置文件中導入模板文件

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


4.3 示例:高可用的安裝配置

vim /srv/salt/keepalived建立目錄
vim /srv/salt/keepalived/files建立文件目錄
vim /srv/salt/keepalived/files/keepalived.conf配置keepalived文件

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state {{ STATE }}
    interface ens33
    virtual_router_id 51
    priority {{ PRI }}
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.0.100
    }
}

vim /srv/salt/keepalived/init.sls

kp-install:
  pkg.installed:
    - pkgs:
      - keepalived

  file.managed:
    - name: /etc/keepalived/keepalived.conf
    - source: salt://keepalived/files/keepalived.conf
    - template: jinja
    - context:
      STATE: {{ pillar['state'] }}
      PRI: {{ pillar['pri'] }}

  service.runnning:
    - name: keepalived
    - enable: True
    - reload: True
    - watch:
      - file:kp-install

vim /srv/pillar/packages/init.sls

{% if grains['fqdn'] == 'server2' %}
package: httpd
port: 80
state: MASTER
pri: 100
{% elif grains['fqdn'] == 'server3' %}
package: nginx
state: BACKUP
pri: 50
{% endif %}

salt '*' state.sls keepalived 自動化安裝


在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


5.Job管理

5.1 Job介紹

master在下發指令任務時,會附帶上產生的jid。
minion在接收到指令開始執行時,會在本地的/var/cache/salt/minion/proc目錄下產生該jid命名的文件,用於在執行過程中master查看當前任務的執行情況。
指令執行完畢將結果傳送給master後,刪除該臨時文件

Job緩存默認保存24小時:
vim /etc/salt/master

keep_jobs: 24

master端Job緩存目錄:/var/cache/salt/master/jobs
在這裏插入圖片描述


5.2 把job存儲到數據庫

可參考官網:http://docs.saltstack.cn/topics/jobs/external_cache.html#external-master-cache(緩存的配置)
docs.saltstack.cn/ref/returners/all/salt.returners.mysql.html#module-salt.returners.mysql(數據庫的配置)

1.配置數據庫

yum install -y mariadb-server server1也作爲數據庫
systemctl start mariadb
mysql**

> grant all on salt.* to salt@localhost identified by 'salt';  ##創建用戶並授權
> > grant all on salt.* to salt@'%' identified by 'salt';

vim add.sql建立數據庫表
mysql -p < add.sql 導入數據庫

CREATE DATABASE  `salt`
  DEFAULT CHARACTER SET utf8
  DEFAULT COLLATE utf8_general_ci;

USE `salt`;

--
-- Table structure for table `jids`
--

DROP TABLE IF EXISTS `jids`;
CREATE TABLE `jids` (
  `jid` varchar(255) NOT NULL,
  `load` mediumtext NOT NULL,
  UNIQUE KEY `jid` (`jid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- CREATE INDEX jid ON jids(jid) USING BTREE;

--
-- Table structure for table `salt_returns`
--

DROP TABLE IF EXISTS `salt_returns`;
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;

--
-- Table structure for table `salt_events`
--

DROP TABLE IF EXISTS `salt_events`;
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;

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


2.把job存儲到數據庫

在這裏插入圖片描述
在master端配置:
yum install -y MySQL-python.x86_64 使master可以訪問數據庫
vim /etc/salt/master 修改master端配置

master_job_cache: mysql
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'

systemctl restart salt-master重啓salt-master服務:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
測試:
在這裏插入圖片描述
在這裏插入圖片描述
*在這裏插入圖片描述
注意:此方式配置在minion端,配置方法同上。
yum install -y MySQL-python.x86_64 使minion可以訪問數據庫
vim /etc/salt/minion 修改minion端配置

return mysql ##返回數據到數據庫
mysql.host: 'localhost'
mysql.user: 'salt'
mysql.pass: 'salt'
mysql.db: 'salt'

systemctl restart salt-minion重啓salt-minion服務:


5.3 Job管理

salt-run jobs.active 查看所有minion當前正在運行的jobs(在所有minions上運行saltutil.running)

salt-run jobs.list_jobs 列出當前master jobs cache中所有job

salt-run jobs.lookup_jid <jid> 從master jobs cache中查詢指定jid的運行結果
在這裏插入圖片描述
在這裏插入圖片描述


6.salt-ssh

6.1 salt-ssh的介紹

salt-ssh可以獨立運行的,不需要minion端。
salt-ssh 用的是sshpass進行密碼交互的。
以串行模式工作,性能下降。

6.2 配置salt-ssh

yum install -y salt-ssh 在master安裝salt-ssh
vim ~/.ssh/config

StrictHostKeyChecking ##可以設置跳過詢問

vim /etc/salt/roster配置roster文件

server2:
  host: 172.25.0.2
  user: root
  password: redhat
server3:
  host: 172.25.0.3
  user: root
  password: redhat

測試:
systemctl stop salt-minion在minion端關閉客戶端
salt-ssh '*' test.ping -i 詢問密碼加 -i

在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


7.salt-syndic管理

7.1 salt-syndic的介紹

syndic其實就是個代理,隔離master與minion。(類似zabbix proxy)
Syndic必須要運行在master上,再連接到另一個topmaster上。
Topmaster 下發的狀態需要通過syndic來傳遞給下級master,minion傳遞給master的數據也是由syndic傳遞給topmaster。topmaster並不知道有多少個minion。
syndic與topmaster的file_roots和pillar_roots的目錄要保持一致。


7.2 配置salt-syndic

在這裏插入圖片描述
添加server4:172.25.0.4 作爲topmaster
yum install -y salt-master
vim /etc/salt/master

order_masters: True

systemctl enable salt-master --now
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


在server1配置syndic
yum install -y salt-syndic
vim /etc/salt/master

 syndic_master: 172.25.0.4 ##在下級master中指向topmaster

systemctl restart salt-master.service
systemctl start salt-syndic.service

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述


topmaster對下級master連接授權
salt-key -L
salt-key -A對下級maser連接授權
測試:
salt '*' test.ping

在這裏插入圖片描述
在這裏插入圖片描述


8.salt-api配置

8.1 salt-api的介紹

SaltStack 官方提供有REST、API格式的 salt-api 項目,將使Salt與第三方系統集成變得尤爲簡單。

官方提供了三種api模塊:
rest_cherrypy
rest_tornado
rest_wsgi

可參考官方:https://docs.saltstack.com/en/latest/ref/netapi/all/index.html#all-netapi-modules


8.2 配置salt-api

可參考官網:docs.saltstack.cn/topics/eauth/index.html#acl-eauth
1.安裝api
yum install -y salt-api
在這裏插入圖片描述
2.生成證書
cd /etc/pki/tls/private
openssl genrsa 2048 > localhost.key
cd /etc/pki/tls/certs
make testcert

在這裏插入圖片描述
3.創建用戶認證文件
vim /etc/salt/master.d/eauth.conf

external_auth:
  pam:
    saltdev:
      - .*
      - '@wheel'
      - '@runner'
      - '@jobs'

useradd -s /sbin/nologin saltdev
passwd saltdev

在這裏插入圖片描述
4.激活rest_cherrypy模塊
vim /etc/salt/master.d/api.conf

rest_cherrypy:
  host: 172.25.0.1
  port: 8000
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/private/localhost.key

systemctl restart salt-master
systemctl start salt-api

在這裏插入圖片描述
在這裏插入圖片描述
5.獲取認證token

curl -sSk https://172.25.0.1:8000/login \
>     -H 'Accept: application/x-yaml' \
>     -d username=saltdev \
>     -d password=redhat \
>     -d eauth=pam

在這裏插入圖片描述
6.推送任務

curl -sSk https://172.25.0.1:8000 \
>     -H 'Accept: application/x-yaml' \
> -H 'X-Auth-Token: f6c5bbe27c2fd234c5e31595c494c5a52fe8bd74' \
>     -d client=local \
>     -d tgt='*' \
>     -d fun=test.ping

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章