linux之master和minion
saltstack部落格地址:
https://www.cnblogs.com/pyyu/p/9465608.html
線上yaml檔案編寫:
http://www.bejson.com/validators/yaml_editor/
saltstack部落格地址:
https://www.cnblogs.com/pyyu/p/9465608.html
python的開發領域
django/flask/tornado/sanic/ 後臺開發
django rest framewokr 寫api介面資料
編寫機器人呼叫指令碼 flask+人工智慧 ,有一個是機器人手臂
運維開發領域 cmdb平臺開發 (slatstack/ansible + django提供頁面+mysql)資產管理平臺,運維開發人員,編寫cmdb,提供資料展示
監控平臺二次開發 zabbix二開 nagios二次開發 ,都去了小米,二次開發 open-falcon(golang) 一個監控產品
k8s 二次開發業務開發 python/golang
程式碼釋出平臺 git+django+jenkins
紅蜘蛛軟體
c/s
client : 學生端是客戶端 ,裝了紅蜘蛛客戶端-學生端
server端: 教師機 ,裝了紅蜘蛛軟體-教師端
教師機,只能管理, 教師機和學生機,相互通訊,相互知道的情況下
#運維管理工具
ansible #支援ssh,不需要客戶端
saltstack #也是隻是ssh,不需要客戶端的
安裝架構是,master /minion
安裝salt的依賴模組
python
zeromq 是一個訊息佇列 ,master和minion通訊,需要將master傳送的命令,放入一個佇列中
rabbitmq
rpc 遠端訊息呼叫
pyzmp
pycrypto
msgpack-python
yaml
-是一個新興的語法格式
salt
ansible
python
k8s
都是遵循yaml語法的配置檔案格式
jinja2
模板語言
#伺服器環境準備
1.master 講師機
ip 192.168.12.96 node1 安裝salt-master
2.準備多個客戶端,被管控端,學生機 安裝salt-minion
192.168.12.89 minion1
192.168.12.121 minion2
192.168.12.8 minion3
sudo hostname set-hostname 新的主機名
3.關閉所有節點的防火牆,以免影響實驗
iptables -F
systemctl stop firewalld
關閉selinux
4.配置本地檔案解析,用於加速身份驗證 編輯 /etc/hosts
通過主機名通訊
192.168.12.96 node1
192.168.12.89 minion1
192.168.12.121 minion2
192.168.12.8 minion3
5.確保環境準備ok,確保每個節點的yum源配置正確
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空快取
yum makecache #生成yum快取
6.安裝salt軟體
1.node1端安裝salt-master
yum install salt-master -y
2.在3個minion地址中安裝salt-minion
yum install salt-minion -y
7.修改master和minion的配置檔案 (vim /etc/salt/minion)配置檔案不能有多餘的空格
1.master的配置檔案
interface: 0.0.0.0 #繫結到本地的0.0.0.0地址
publish_port: 4505 #管理埠,命令傳送
user: root #執行salt程序的使用者
worker_threads: 5 #salt執行執行緒數,執行緒越多處理速度越快,不要超過cpu個數
ret_port: 4506 #執行結果返回埠
pidfile: /var/run/salt-master.pid #pid檔案位置
log_file: /var/log/salt/master #日誌檔案地址
#自動接收minion的key
auto_accept: False
2.三個minion的配置檔案
master: node1
master_port: 4506
user: root
id: s14minion1 #表示minion身份資訊的,這裡要修改,三個節點,為不同的id
acceptance_wait_time: 10
log_file: /var/log/salt/minion
8.啟動salt-master和salt-minion
systemctl start salt-master
systemctl start salt-minion
9.在salt軟體啟動的時候,會進行通訊連線,master可以檢測到minion的身份地址,此時還未接收key,還未通訊,需要認證祕鑰才可以通訊
salt-key -L #檢視所有主機祕鑰資訊
#salt-key引數解析
-L #檢視KEY狀態
-A #允許所有
-D #刪除所有
-a #認證指定的key
-d #刪除指定的key
-r #登出掉指定key(該狀態為未被認證)
#在祕鑰通訊之前,最好進行祕鑰檢驗
master端:
salt-key -f 指明節點id #檢視節點的祕鑰資訊
minion端:
salt-call --local key.finger #檢視自己的祕鑰資訊,與master端的進行對比
salt-key -a minion-id #指明接收一個minion
salt-key -A # 接收所有minion的祕鑰
salt "*" test.ping #通過salt主命令 匹配所有的已接收的主機 傳送ping命令,會得到True 或false
salt "*" cmd.run #通過執行命令介面,對所有主機,執行命令
salt "*" cmd.run "yum install nginx -y #對所有主機發送安裝nginx的命令
10.salt常用命令
1.salt的命令直接輸入,叫做執行模組
2.saltstack提供了自己的指令碼語言 s14salt.sls ,狀態模組
3.salt的命令語法格式
salt --summary '*' cmd.run 'yum remove nginx -y'
--summary是返回salt命令的執行成功狀態
"*" 目標匹配字串
cmd.run 模組函式,對所有匹配到的機器,執行後面的引數
'yum remove nginx -y' #引數如下
salt --out=json '*' cmd.run_all 'hostname'
--out=json #返回salt執行結果為json格式 #json資料反饋給API
salt "*" cmd.run "ls /tmp"
salt "*" cmd.run_all "ls /tmp"
#cmd.run和cdm.run_all是返回結果的詳細的差別
#目標定位字串
salt 's14minion[1,2,3]' pkg.version redis
's14minion[1,2,3]' #匹配s14minion1、s14minion2、s14minion3
salt 's14minion[1,2,3]' pkg.download redis#只下載redis的rpm包,不安裝這是pkg.download函式的功能
pkg模組對應著yum工具
pkg.install
pkg.version
pkg.remove
pkg.version
#列出pkg所有的方法
salt '*' sys.list_functions pkg
#service模組,練習遠端安裝啟動nginx
salt 's14minion[1,2,3]' pkg.install nginx
salt "*" service.status/start/stop/restart nginx
#通過service模組管理服務
#命令執行結果,返回為yaml
salt --out=yaml "*" service.status nginx
#s14期,有男同學,有女同學
#python的資料結構
#大字典 s14值是字典,字典中有兩個key,一個是男同學key,值是列表,一個是女同學key,值是列表
{
s14:
{
"男同學":['kangchen','xiaoma'],
"女同學":['wengang','xiaoxue','xiaodilei'],
}
}
#yaml語言解析
線上yaml配置檔案編寫
http://www.bejson.com/validators/yaml_editor/
#yaml語法
#yaml的物件,就是python的字典通過冒號指明字典
#yaml的陣列,就是python的列表,通過 橫槓 表示 -
#作用域通過縮排層級關係區分
#空格數量保持一致即可,不要求是幾個,預設是2個空格
s14:
男同學:
- kangchen
- xiaoma
- xiaoyu
女同學:
- wengang
- wengang2
- xiaowengang3
#對應的python資料結構
{ s14:
{ '男同學': [ 'kangchen', 'xiaoma', 'xiaoyu' ],
'女同學': [ 'wengang', 'wengang2', 'xiaowengang3' ] } }
#salt直接在命令列輸入的命令,叫做
在命令列輸入的命令都是 執行模組
等到命令寫入到檔案中, 就叫做狀態模組
#state模組可以執行salt的sls檔案
#sls之salt指令碼的編寫與使用
1.更改配置檔案,新增如下引數,注意yaml的語法(修改了檔案要重啟salt服務)
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
test:
- /srv/salt/test/
2.重啟所有的salt服務
systemctl restart salt-master
systemctl restart salt-mion
#注意重啟了服務,祕鑰需要再次接受
3.編寫nginx.sls檔案,放在/srv/salt/base底下,(注意,nginx.sls檔案,需要在所有機器上都有)
salt-cp "*" /srv/salt/base/nginx.sls /srv/salt/base/ #將master機器上的nginx.sls,批量分發到所有節點上
4.呼叫state模組,執行nginx.sls檔案
salt "*" state.sls nginx #執行命令
#saltstack兩大資料管理中心 grains(靜態採集資料) 與pillar(動態採集資料)
#
salt "*" grains.items #採集所有minion機器的硬體資訊,返回字典資料,key和value
salt "*" grains.item osfullname #通過item方法,通過key,返回單獨的value
salt "*" grains.item ipv4
salt "*" grains.item ipv4 os hostname #支援多key的方式檢視資訊
#通過-G引數,指明是grains模組,匹配到所有的 作業系統是7系列的機器,然後執行命令
salt -G 'osrelease:7*' cmd.run "echo 'i am from master....' > /tmp/salt.txt"
#自定義設定granis資料
salt "*" grains.setval my_class s14
#刪除自定義grains的值
salt "*" grains.delval my_class
#如果想永久刪除這個key,需要刪除minion底下的/etc/salt/grains檔案
設定key value的操作 是呼叫 __setitems__
del __del__
__str__
__len__
流暢的python
len(變數)