SaltStack--快速入門

来源:https://www.cnblogs.com/yanjieli/archive/2019/05/14/10864648.html
-Advertisement-
Play Games

saltstack快速入門 saltstack介紹 Salt,一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬台伺服器,速度夠快,伺服器之間秒級通訊 主要功能遠程執行配置管理Stalstack官方文檔 Saltstack原理 Salt使用server-agent通 ...


saltstack快速入門

saltstack介紹

Salt,一種全新的基礎設施管理方式,部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬台伺服器,速度夠快,伺服器之間秒級通訊

主要功能
遠程執行
配置管理
Stalstack官方文檔

Saltstack原理

Salt使用server-agent通信模型,服務端組件被稱為Salt masteragent被稱為Salt minion
Salt master主要負責向Salt minions發送命令,然後聚合併顯示這些命令的結果。一個Salt master可以管理多個minion系統
Salt serverSalt minion通信的連接由Salt minion發起,這也意味著Salt minion上不需要打開任何傳入埠(從而減少攻擊)。Salt server使用埠45054506,必須打開埠才能接收到訪問連接

  • Publisher (埠4505)所有Salt minions都需要建立一個持續連接到他們收聽消息的發佈者埠。命令是通過此埠非同步發送給所有連接,這使命令可以在大量系統上同時執行。
  • Request Server (埠4506)Salt minios根據需要連接到請求伺服器,將結果發送給Salt master,並安全地獲取請求的文件或特定minion相關的數據值(稱為Salt pillar)。連接到這個埠的連接在Salt masterSalt minion之間是1:1(不是非同步)。
[root@salt-master ~]# lsof -i:4505
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
salt-mast 81121 root   16u  IPv4 304019      0t0  TCP *:4505 (LISTEN)
salt-mast 81121 root   18u  IPv4 304082      0t0  TCP salt-master:4505->salt-minion03:37240 (ESTABLISHED)
salt-mast 81121 root   19u  IPv4 307610      0t0  TCP salt-master:4505->salt-minion01:47804 (ESTABLISHED)
salt-mast 81121 root   20u  IPv4 307611      0t0  TCP salt-master:4505->salt-minion02:58594 (ESTABLISHED)

快速安裝

1.1 配置 yum 倉庫

# 使用官方自帶yum
[root@salt-master ~]# yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm
# 或者使用阿裡雲的yum(建議使用阿裡雲的,速度快一點)
[root@salt-master ~]# yum -y install https://mirrors.aliyun.com/saltstack/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@salt-master ~]# sed -i "s/repo.saltstack.com/mirrors.aliyun.com\/saltstack/g" /etc/yum.repos.d/salt-latest.repo
[root@salt-master ~]# yum clean all
[root@salt-master ~]# yum makecache

1.2 安裝Master,並啟動服務

[root@salt-master ~]# yum -y install salt-master
[root@salt-master ~]# systemctl enable salt-master
[root@salt-master ~]# systemctl start salt-master

1.3 安裝 Salt-Minion 指向 Salt-Master 網路地址

[root@salt-minion01 ~]# yum -y install salt-minion
# 可以使用主機名,也可以使用IP地址
[root@salt-minion01 ~]# cp /etc/salt/minion{,.back}
[root@salt-minion01 ~]# sed -i '/#master: /c\master: salt-master' /etc/salt/minion
[root@salt-minion01 ~]# systemctl enable salt-minion
[root@salt-minion01 ~]# systemctl start salt-minion

SaltStack認證方式

Salt 的數據傳輸是通過 AES 加密,Master 和 Minion 之前在通信之前,需要進行認證。
Salt 通過認證的方式保證安全性,完成一次認證後,Master 就可以控制 Minion 來完成各項工作了。

1. minion 在第一次啟動時候,會在 /etc/salt/pki/minion/ 下自動生成 minion.pem(private key) 和 minion.pub(public key), 然後將 minion.pub 發送給 master
2. master 在第一次啟動時,會在 /etc/salt/pki/master/ 下自動生成 master.pem 和 master.pub ;並且會接收到 minion 的 public key , 通過 salt-key 命令接收 minion public key, 會在 master 的 /etc/salt/pki/master/minions目錄下存放以 minion id 命令的 public key ;驗證成功後同時 minion 會保存一份 master public key 在 minion 的 /etc/salt/pki/minion/minion_master.pub里。

Salt認證原理總結

minion將自己的公鑰發送給master
master認證後再將自己的公鑰也發送給minion端

Master端認證示例

1)根據上面提到的認證原理,先看下未認證前的masterminionpki目錄

# master上查看
[root@salt-master ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   │   └── salt-minion01
│   └── minions_rejected
└── minion

# minion上查看
[root@salt-minion01 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
    ├── minion.pem
    └── minion.pub

2)salt-key命令解釋:

[root@salt-master ~]# salt-key -L 
Accepted Keys:        #已經接受的key
Denied Keys:          #拒絕的key
Unaccepted Keys:      #未加入的key
Rejected Keys:        #吊銷的key

#常用參數
-L  #查看KEY狀態
-A  #允許所有
-D  #刪除所有
-a  #認證指定的key
-d  #刪除指定的key
-r  #註銷掉指定key(該狀態為未被認證)

#配置master自動接受請求認證(master上配置 /etc/salt/master)
auto_accept: True

3)salt-key認證

#列出當前所有的key
[root@salt-master ~]# salt-key -L 
Accepted Keys:
Denied Keys:
Unaccepted Keys:
salt-minion01
Rejected Keys:

#添加指定minion的key
[root@salt-master ~]# salt-key -a salt-minion01 -y
The following keys are going to be accepted:
Unaccepted Keys:
salt-minion01
Key for minion salt-minion01 accepted.
#添加所有minion的key
[root@salt-master ~]# salt-key -A -y

[root@salt-master ~]# salt-key -L 
Accepted Keys:
salt-minion01
Denied Keys:
Unaccepted Keys:
Rejected Keys:

4)上面認證完成後再次查看masterminionpki目錄

# master上
[root@salt-master ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
│   ├── master.pem
│   ├── master.pub
│   ├── minions
│   │   └── salt-minion01
│   ├── minions_autosign
│   ├── minions_denied
│   ├── minions_pre
│   └── minions_rejected
└── minion

# minion上
[root@salt-minion01 ~]# tree /etc/salt/pki/
/etc/salt/pki/
├── master
└── minion
    ├── minion_master.pub
    ├── minion.pem
    └── minion.pub

Saltstack遠程執行

遠程執行是 Saltstack 的核心功能之一。主要使用 salt 模塊批量給選定的 minion 端執行相應的命令,並獲得返回結果。

1、判斷 salt 的 minion 主機是否存活

[root@salt-master ~]# salt '*' test.ping
salt-minion02:
    True
salt-minion03:
    True
salt-minion01:
    True

# salt saltstack自帶的一個命令
# * 表示目標主機,這裡表示所有目標主機
# test.ping test是saltstack中的一個模塊,ping則是這個模塊下麵的一個方法

2、saltstack使用 cmd.run模塊遠程執行shell命令

#在指定目標minion節點運行uptime命令
[root@salt-master ~]# salt 'salt-minion02' cmd.run 'uptime'
salt-minion02:
     18:13:08 up 28 min,  2 users,  load average: 0.00, 0.04, 0.13

Saltstack配置管理

Salt 通過State模塊來進行文件的管理;通過YAML語法來描述,尾碼是.sls的文件

1、瞭解 YAML 參考:http://docs.saltstack.cn/topics/yaml/index.html

remove vim:
  pkg.removed:
    - name: vim
  • 帶有ID和每個函數調用的行都以冒號(:)結束。
  • 每個函數調用在ID下麵縮進兩個空格。
  • 參數作為列表傳遞給每個函數。
  • 每行包含函數參數的行都以兩個空格縮進開頭,然後是連字元,然後是一個額外的空格。
  • 如果參數採用單個值,則名稱和值位於由冒號和空格分隔的同一行中。
  • 如果一個參數需要一個列表,則列表從下一行開始,並縮進兩個空格

 2、配置sals ,定義環境 參考文檔

# 定義環境目錄
[root@salt-master ~]# vim /etc/salt/master
file_roots:
  base:
    - /srv/salt/base
  dev:
    - /srv/salt/dev
  prod:
    - /srv/salt/prod
# 創建上面定義的目錄
[root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod}
# 重啟服務
[root@salt-master ~]# systemctl restart salt-master

3、編寫第一個sls文件

# 在base環境下編寫第一個安裝apache的sls文件
[root@salt-master ~]# cd /srv/salt/base/
[root@salt-master base]# cat apache.sls 
apache-install:
  pkg.installed:
    - name: httpd

apache-service:
  service.running:
    - name: httpd
    - enable: True

# 在dev環境下編寫一個安裝ftp的sls文件
[root@salt-master base]# cd /srv/salt/dev/
[root@salt-master dev]# cat vsftpd.sls 
vsftpd-install:
  pkg.installed:
    - name: vsftpd

vsftpd-service:
  service.running:
    - name: vsftpd
    - enable: True

4、使用salt命令的state狀態模塊讓minion應用配置

# 讓所有的minion都安裝apache(由於salt預設的環境就是base,所以可以直接在後面指定調用的apache.sls文件,不要尾碼sls)
[root@salt-master ~]# salt '*' state.sls apache

# 讓所有的minion都安裝vsftpd(saltenv指定環境)
[root@salt-master ~]# salt '*' state.sls vsftpd saltenv=dev

5、使用salt的高級狀態使不同主機應用不同的配置

# topfile入口文件只能放在base環境
[root@salt-master ~]# cat /srv/salt/base/top.sls 
base:
  'salt-minion01':
    - apache
  'salt-minion03':
    - apache
dev:
  'salt-minion02':
    - vsftpd
  'salt-minion03':
    - vsftpd

6、使用salt命令執行高級狀態,會將top.sls當做入口文件,進行調用

# 將高級狀態應用到所有主機
[root@salt-master ~]# salt '*' state.highstate

Saltstack常用配置

1、Salt Master配置
Salt Master端的配置文件/etc/salt/master,常用配置如下:

interface:     //指定bind 的地址(預設為0.0.0.0)
publish_port: //指定發佈埠(預設為4505)
ret_port: //指定結果返回埠,  與minion配置文件中的master_port對應(預設為4506)
user: //指定master進程的運行用戶,如果調整, 則需要調整部分目錄的許可權(預設為root)
timeout: //指定timeout時間,  如果minion規模龐大或網路狀況不好,建議增大該值(預設5s)
keep_jobs: //minion執行結果返回master, master會緩存到本地的cachedir目錄,該參數指定緩存多長時間,可查看之間執行結果會占用磁碟空間(預設為24h)
job_cache: //master是否緩存執行結果,如果規模龐大(超過5000台),建議使用其他方式來存儲jobs,關閉本選項(預設為True)
file_recv : //是否允許minion傳送文件到master 上(預設是Flase)
file_roots: //指定file server目錄,  預設為:
    file_roots:    
       base:    
        - /srv/salt     
pillar_roots : //指定pillar 目錄,  預設為:
    pillar_roots:     
      base:     
        - /srv/pillar     
log_level: //日誌級別
支持的日誌級別有'garbage', 'trace', 'debug', info', 'warning', 'error', ‘critical ’ ( 預設為’warning’)

2、Salt Minion端的配置文件/etc/salt/minion,常用配置如下:

master: //指定master 主機(預設為salt)
master_port: //指定認證和執行結果發送到master的哪個埠,  與master配置文件中的ret_port對應(預設為4506)
id: //指定本minion的標識, salt內部使用id作為標識(預設為主機名)
user: //指定運行minion的用戶.由於安裝包,啟動服務等操作需要特權用戶, 推薦使用root( 預設為root)
cache_jobs : //minion是否緩存執行結果(預設為False)
backup_mode: //在文件操作(file.managed 或file.recurse) 時,  如果文件發送變更,指定備份目錄.當前有效
providers : //指定模塊對應的providers, 如在RHEL系列中, pkg對應的providers 是yumpkg5
renderer: //指定配置管理系統中的渲染器(預設值為:yaml_jinja )
file_client : //指定file clinet 預設去哪裡(remote 或local) 尋找文件(預設值為remote)
loglevel: //指定日誌級別(預設為warning)
tcp_keepalive : //minion 是否與master 保持keepalive 檢查, zeromq3(預設為True)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 典型的一個Web應用的生命周期從用戶在瀏覽器輸入一串URL,或者單擊一個鏈接開始(就是訪問一個頁面)。而這個生命周期的結束就是我們關閉這個頁面。 響應流程: 例子(本例來自《javascript:忍者秘籍》) HTML: javascript: ...
  • 1、viewer.js 使用 Demo http://fengyuanchen.github.io/viewerjs/ 2、viewer.js 下載地址 https://github.com/fengyuanchen/viewerjs 3、viewer只能初始化一次,也就是說如果用ajax添加了新的 ...
  • ...
  • 1 2 3 4 5 6 前端壓縮上傳圖片 7 8 9 10 11 12 13 121 122 123 ...
  • 廢話不多說,直接上源碼 ...
  • 文章首發: "結構型模式:代理模式" 七大結構型模式之七:代理模式。 簡介 姓名 :代理模式 英文名 :Proxy Pattern 價值觀 :為生活加點料 個人介紹 : Provide a surrogate or placeholder for another object to control ...
  • Spring AOP : Pointcut表達式: designators-指示器 wildcards-通配符 operators-操作符 wildcards: * -- 匹配任意數量的字元 + -- 匹配製定類及其子類 ..-- 一般用於匹配任意數的子包或參數 operator: && || ! ...
  • 工廠模式定義一個用於創建對象的介面,讓子類決定實例化哪一個類,工廠方法使一個類的實例化延遲到其子類。工廠模式主要分為簡單工廠模式、工廠方法模式以及抽象工廠模式。 Obj.m Object1.m Object2.m 簡單工廠模式: SimpleFactory.m 測試代碼: 工廠方法模式: Metho ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...