saltstack筆記

一榜配、saltstack是什么否纬?

saltstack是一個(gè)開(kāi)源異構(gòu)平臺(tái)基礎(chǔ)設(shè)置管理工具。

二蛋褥、saltstack能干什么临燃?

如果你是一個(gè)管理成百上千臺(tái)服務(wù)器的管理員,你是否會(huì)遇到如下幾個(gè)場(chǎng)景烙心?
1.需要在每臺(tái)服務(wù)器上部署agent膜廊,幾百臺(tái)服務(wù)器難道一個(gè)一個(gè)部署?
2.agent配置需要變更淫茵,也需要一個(gè)一個(gè)配置爪瓜?
3.0day漏洞爆出,需要檢查服務(wù)器版本匙瘪,安裝對(duì)應(yīng)補(bǔ)丁铆铆,怎么辦蝶缀?

  • 配置管理系統(tǒng),能夠維護(hù)預(yù)定義狀態(tài)的遠(yuǎn)程節(jié)點(diǎn)(比如薄货,確保指定的包被安裝翁都,指定的服務(wù)在運(yùn)行)。
  • 分布式遠(yuǎn)程執(zhí)行系統(tǒng)谅猾,用來(lái)在遠(yuǎn)程節(jié)點(diǎn)(可以是單個(gè)節(jié)點(diǎn)柄慰,也可以是任意規(guī)則挑選出來(lái)的節(jié)點(diǎn))上執(zhí)行命令和查詢數(shù)據(jù)。

為什么要使用salt?

  • 簡(jiǎn)單税娜,非常容易設(shè)置和維護(hù)坐搔,不用考慮項(xiàng)目的大小。幾乎不改動(dòng)配置就可以工作敬矩。
  • 并行執(zhí)行概行,命令發(fā)送到遠(yuǎn)程系統(tǒng)是并行的而不是串行的,使用安全的加密協(xié)議谤绳,使用最小最快的網(wǎng)絡(luò)載荷占锯,提供簡(jiǎn)單的編程接口。
  • 靈活易擴(kuò)展缩筛,使用python開(kāi)發(fā),可以從簡(jiǎn)單的Python API調(diào)用堡称,或者從命令行被調(diào)用瞎抛,可以用來(lái)執(zhí)行一次性命令,也可以作為一個(gè)更大的應(yīng)用程序的一個(gè)組成部分却紧。

三桐臊、saltstack運(yùn)行方式?

saltstack三種運(yùn)行方式

  • Local
  • Master/Minion
  • Salt SSH

最傳統(tǒng)的運(yùn)行方式還是C/S模式晓殊,管理端安裝Master断凶,被管理節(jié)點(diǎn)上安裝Minion客戶端。
下面主要介紹Master/Minion運(yùn)行方式巫俺。

四认烁、saltstack基本安裝和配置

這里采用repo源,在線安裝介汹。請(qǐng)參考官方文檔
分別在管理端和被管理節(jié)點(diǎn)使用yum命令進(jìn)行安裝却嗡。

  yum install salt-master
  yum install salt-minion

安裝完成之后,首先啟動(dòng)master

  service salt-master start
  #或者
  /etc/init.d/salt-master start

打開(kāi)minion節(jié)點(diǎn)嘹承,編輯配置文件

  vim /etc/salt/minion
  #添加下面配置窗价,注意分號(hào)后面有空格!
  master: 192.168.252.136 #master端ip叹卷,有dns解析也可以填寫(xiě)域名撼港。
  id: web137 #本節(jié)點(diǎn)名稱坪它,填好之后盡量不要更改。

啟動(dòng)minion

  service salt-minion start

切換到master

  #查看minion
  salt-key -L
  #會(huì)列如下信息
  [root@localhost ~]# salt-key #省略-L也行帝牡。
  Accepted Keys:
  Denied Keys:
  Unaccepted Keys:
  web137
  Rejected Keys:
  #接受minion
  salt-key -a web137 -y # -a 后面指定要接受的id名稱
  或者
  salt-key -A # -A表示接受所有哟楷,同理,可以使用 -d 否灾,-D拒絕掉卖擅。
  #再次查看
  [root@localhost ~]# salt-key -L
  Accepted Keys:
  web137
  Denied Keys:
  Unaccepted Keys:
  Rejected Keys:

至此,一個(gè)簡(jiǎn)單的saltstack環(huán)境就已經(jīng)搭建好了墨技。

一些注意事項(xiàng)和說(shuō)明:
a) master使用兩個(gè)端口和minion通信惩阶,要確保這兩個(gè)端口通信正常。

  • 4505 publish_port 消息發(fā)布系統(tǒng)端口
  • 4506 ret_port 客戶端與服務(wù)端通信端口

可以關(guān)閉掉防火墻扣汪,或者將端口添加至INPUT鏈表断楷。

  #iptables鏈表規(guī)則是自上而下,這里插入在REJECT ALL之前崭别。  
  iptables -I INPUT 5 -p tcp --dport 4505 -j ACCEPT -m comment --comment "salt_publish_port"
  iptables -I INPUT 5 -p tcp --dport 4506 -j ACCEPT -m comment --comment "salt_ret_port"

當(dāng)然也可以在配置文件自定義端口冬筒。

  #master配置文件
  vim /etc/salt/master
  #修改如下配置,注意空格茅主!
  publish_port: 1505
  ret_port: 1506
  #修改成自定義的端口即可舞痰,注意,minion節(jié)點(diǎn)也需要指定master端口诀姚。
  #minion配置文件
  vim /etc/salt/minion
  #配置如下
  master_port: 1506 #指定master通信端口即可

b) minion和master認(rèn)證過(guò)程
1.minion在首次啟動(dòng)時(shí)响牛,會(huì)在/etc/salt/pki/minion/下自動(dòng)生成公鑰和私鑰
minion.pub(public key)和minion.pem(private key),并將公鑰(minion.pub)發(fā)送給master
2.master在接收到minion的公鑰后赫段,通過(guò)salt-key命令接受minion呀打,并將minion公鑰
放在/etc/salt/pki/master/minions下,以minion id命名糯笙。這個(gè)時(shí)候贬丛,master就可以對(duì)minion發(fā)送指令了。
也可以配置為自動(dòng)接受

  #master配置
  vim /etc/salt/master
  #配置如下
  auto_accept: True #修改為自動(dòng)接受

五给涕、saltstack簡(jiǎn)單應(yīng)用

salt命令格式

  salt '<操作目標(biāo)>' <模塊.方法> [參數(shù)]

引號(hào)中的操作目標(biāo)豺憔,可以使用正則和通配符過(guò)濾、篩選稠炬。

  • salt 'shell正則' 命令
    //使用通配符

  • salt -E 'prel正則' 命令
    //使用正則表達(dá)式

  • salt -N $group 命令
    //使用分組名稱
    可以在配置文件進(jìn)行分組

    #編輯master文件
    vim /etc/salt/master
    #配置如下
    nodegroups:
      group1: 'L@foo.domain.com,bar.domain.com,baz.domain.com and bl*.domain.com'
      group2: 'G@os:Debian and foo.domain.com'
    
  • salt -L 'server_id1,server_id2,server_id3' 命令
    //指定多個(gè)目標(biāo)id

  • salt -G 'osrelease:6.9' 命令
    //指定os版本為6.9

示例:test.ping焕阿、cmd.run

  #檢測(cè)通訊是否正常
  salt '*' test.ping
  #test.ping
  [root@localhost ~]# salt '*' test.ping  
  web137:
      True
  mysql138:
      True

  #執(zhí)行命令
  salt '*' cmd.run 'df -Th'
  #cmd.run
  [root@localhost ~]# salt '*' cmd.run 'df -Th'
  mysql138:
    Filesystem           Type   Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root
                         ext4    18G  968M   16G   6% /
    tmpfs                tmpfs  491M   12K  491M   1% /dev/shm
    /dev/sda1            ext4   477M   52M  400M  12% /boot
  web137:
    Filesystem           Type   Size  Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root
                         ext4    18G  968M   16G   6% /
    tmpfs                tmpfs  491M   12K  491M   1% /dev/shm
    /dev/sda1            ext4   477M   52M  400M  12% /boot

怎么知道有哪些模塊可用?怎么知道模塊有哪些方法可以用首启、怎么用暮屡?

  #獲取所有支持的模塊
  salt 'web137' sys.list_modules
  #
  [root@localhost ~]# salt 'web137' sys.list_modules
  web137:
    - acl
    - aliases
    - alternatives
    - archive
    - artifactory
    后面部分省略

  #獲取模塊說(shuō)明文檔
  salt 'web137' sys.doc test
  #
  [root@localhost ~]# salt 'web137' sys.doc test
  'test.arg:'

    Print out the data passed into the function ``*args`` and ```kwargs``, this
    is used to both test the publication data and cli argument passing, but
    also to display the information available within the publication data.
    Returns {"args": args, "kwargs": kwargs}.

    CLI Example:

        salt '*' test.arg 1 "two" 3.1 txt="hello" wow='{a: 1, b: "hello"}'
    

  'test.arg_repr:'

    Print out the data passed into the function ``*args`` and ```kwargs``, this
    is used to both test the publication data and cli argument passing, but
    also to display the information available within the publication data.
    Returns {"args": repr(args), "kwargs": repr(kwargs)}.

    CLI Example:

        salt '*' test.arg_repr 1 "two" 3.1 txt="hello" wow='{a: 1, b: "hello"}'
  后面部分省略

軟件包的安裝

  #pkg.install
  salt 'web137' pkg.install tree
  #
  [root@localhost ~]# salt 'web137' pkg.install tree
  web137:
    ----------
    tree:
        ----------
        new:
            1.5.3-3.el6
        old:

pkg 函數(shù)會(huì)自動(dòng)將本地系統(tǒng)包管理器映射到相同的salt函數(shù)。這意味著 pkg.install 在基于Red Hat系統(tǒng)上將使用 yum 而在Debian系統(tǒng)上則使用 apt 來(lái)安裝包毅桃。

grains模塊說(shuō)明
grains 是在 minion(客戶端)啟動(dòng)時(shí)收集到的一些信息褒纲,比如操作系統(tǒng)類型准夷、網(wǎng)卡ip等。

  #列出所有的 grains 項(xiàng)目名字
  [root@localhost ~]# salt 'web137' grains.ls
  web137:
    - SSDs
    - cpu_flags
    - cpu_model
    - cpuarch
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gpus
  #列出所有的 grains 項(xiàng)目名以及值
  [root@localhost ~]# salt 'web137' grains.items
  web137:
    ----------
  SSDs:
  cpu_flags:
      - fpu
      - vme
      - de
      - pse
      - tsc


  #也可以在minion配置自定義信息
  #編輯minion配置莺掠,注意空格衫嵌!
  vim /etc/salt/minion
  grains:
    roles:
      - webserver
      - memcache
    deployment: datacenter4
    cabinet: 13
    cab_u: 14-15

有了這些信息之后,在遠(yuǎn)程執(zhí)行命令時(shí)就很方便彻秆。我們可以按照 grains 的一些指標(biāo)來(lái)操作楔绞。如上面提到,salt -G 'osrelease:6.9' 命令唇兑。

pillar模塊說(shuō)明
pillar 和 grains 不一樣酒朵,是在 master 上定義的,并且是針對(duì) minion 定義的一些信息扎附。像一些比較重要的數(shù)據(jù)(密碼)可以存在 pillar 里蔫耽,還可以定義變量等。

  #編輯配置文件
  vim /etc/salt/master
  #添加
  pillar_roots:
    base:
      - /srv/pillar
  #如果pillar文件夾不存在留夜,新建文件夾
  mkdir -p /srv/pillar
  #修改配置文件后匙铡,重啟一下master
  service salt-master restart
  #新建入口文件top.sls
  vim /srv/pillar/top.sls
  #添加內(nèi)容
  base:
    'web137': #指定minion節(jié)點(diǎn)
      - web137_info
  #新建web137_info.sls文件
  vim /srv/pillar/web137_info.sls
  #添加內(nèi)容,注意分號(hào)后面有空格碍粥!
  conf: /etc/web137.conf
  myname: webserver
  #刷新一下pillar狀態(tài)
  salt '*' saltutil.refresh_pillar
  #查看一下
  salt 'web137' pillar.items
  #
  [root@localhost pillar]# salt 'web137' pillar.items
  web137:
      ----------
      conf:
          /etc/web137.conf
      myname:
          webserver
  #可以指定單個(gè)
  salt 'web137' pillar.item conf
  #
  [root@localhost pillar]# salt 'web137' pillar.item conf
  web137:
      ----------
      conf:
          /etc/web137.conf
  #通過(guò) -I 也可以作為匹配信息
  salt -I 'myname:webserver' test.ping
  #
  [root@localhost pillar]# salt -I 'myname:webserver' test.ping
  web137:
      True

其他雜項(xiàng)
#遠(yuǎn)程傳輸文件鳖眼,將本地文件copy到節(jié)點(diǎn)
root@localhost:~# salt-cp '' ./abc.txt /opt/
{'ftp138': {'/opt/abc.txt': True}, 'web137': {'/opt/abc.txt': True}}
#磁盤(pán)使用
[root@salt-master /]# salt '
' disk.usage
#網(wǎng)絡(luò)接口
[root@salt-master /]# salt '' network.interfaces
#文件壓縮
root@localhost:~# salt '
' archive.gzip /opt/abc.txt
#文件解壓縮
root@localhost:~# salt '' archive.gunzip /opt/abc.txt.gz
#拷貝文件到客戶端
salt '
' cp.get_file salt://apache.txt /tmp/cp.txt
#拷貝目錄到客戶端
salt '' cp.get_dir salt://test /tmp
#顯示存活的客戶端
salt-run manage.up
#執(zhí)行服務(wù)端腳本
salt '
' cmd.script salt://test/shell.sh

六、saltstack高級(jí)應(yīng)用

1即纲、配置管理安裝apache

  #編輯配置文件
  vim /etc/salt/master
  #添加下面配置
  file_roots:
    base:
      - /srv/salt
  #環(huán)境: base具帮、dev(開(kāi)發(fā)環(huán)境)、test(測(cè)試環(huán)境)低斋、prod(生產(chǎn)環(huán)境)。
  #新建目錄salt
  mkdir -p /srv/salt
  #新建top.sls文件
  vim /srv/salt/top.sls
  #添加內(nèi)容
  base:
    'web137':
      - apache
  #新建apache.sls文件
  vim /srv/salt/apache.sls
  #添加匪凡,特別要注意空格!
  apache-service: #自定義id名稱
    pkg.installed: #包安裝函數(shù)
    - names: #如果只有一個(gè)服務(wù) - name:httpd
      - httpd #包名
      - httpd-devel

  file.managed:
    - name: /etc/httpd/conf/httpd.conf #目標(biāo)文件位置
    - source: salt://httpd.conf #源文件膊畴,將配置文件放在/srv/salt/目錄下
    - user: root #文件所屬用戶
    - group: root #文件所屬組
    - mode: 644 #文件權(quán)限

  service.running: #指定服務(wù)運(yùn)行
    - name: httpd  #服務(wù)名稱
    - enable: True  #設(shè)置開(kāi)機(jī)自啟
  #
  salt 'web137' state.highstate
  #或者直接指定文件
   salt 'web137' state.sls apache #不需要.sls

2、目錄操作

  #編輯top.sls文件
  vim /srv/salt/top.sls
  base:
    'mysql138' :
      - diroper
  #新建diroper文件
  vim /srv/salt/diroper.sls
  diroper:
    file.recurse:
      - name: /tmp/diroper
      - source: salt://diroper
      - user: root
      - file_mode: 644
      - dir_mode: 755
      - mkdir: True
      - clean: True #刪除源文件則目標(biāo)也會(huì)跟著刪除
  #應(yīng)用
  salt 'mysql138' state.highstate

3病游、遠(yuǎn)程執(zhí)行腳本

  #添加
  cmdexe:
    - onlyif: test -f /tmp/123.txt
    - names:
      - touch /tmp/cmdtest.txt
      - mkdir /tmp/cmdtest
    - user: root
  #添加
  shell-test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root

4唇跨、管理crontab
#添加
cron-test:
cron.present: #把 cron.present: 改成 cron.absent為刪除
- name: /bin/touch /tmp/111.txt
- user: root
- minute: '' #注意星號(hào)要使用單引號(hào)
- hour: 20
- daymonth: 1-10
- month: '3,5'
- dayweek: '
'

七、saltstack開(kāi)發(fā)

  import salt.client 
  client = salt.client.LocalClient()
  ret = client.cmd('*','test.ping')
  print ret

八衬衬、總結(jié)和參考

  • 配置文件都是鍵值對(duì)的形式买猖,需要特別注意空格。

  • 以上演示的是都在linux環(huán)境下部署滋尉,saltstack是可以支持多環(huán)境玉控,但需要注意的是master不支持安裝在windows環(huán)境。

  • 筆記未涉及到部分

    • windows配置狮惜、云配置
    • web界面
    • 架構(gòu)中還有一個(gè)類似代理層的syndic

參考網(wǎng)址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末高诺,一起剝皮案震驚了整個(gè)濱河市碌识,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虱而,老刑警劉巖筏餐,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異牡拇,居然都是意外死亡魁瞪,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門惠呼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)导俘,“玉大人,你說(shuō)我怎么就攤上這事罢杉√宋罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵滩租,是天一觀的道長(zhǎng)赋秀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)律想,這世上最難降的妖魔是什么猎莲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮技即,結(jié)果婚禮上著洼,老公的妹妹穿的比我還像新娘。我一直安慰自己而叼,他們只是感情好身笤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著葵陵,像睡著了一般液荸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脱篙,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天娇钱,我揣著相機(jī)與錄音,去河邊找鬼绊困。 笑死文搂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秤朗。 我是一名探鬼主播煤蹭,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了疯兼?” 一聲冷哼從身側(cè)響起然遏,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吧彪,沒(méi)想到半個(gè)月后待侵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姨裸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年秧倾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傀缩。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡那先,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赡艰,到底是詐尸還是另有隱情售淡,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布慷垮,位于F島的核電站揖闸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏料身。R本人自食惡果不足惜汤纸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芹血。 院中可真熱鬧贮泞,春花似錦、人聲如沸幔烛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)饿悬。三九已至议惰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間乡恕,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工俯萎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留傲宜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓夫啊,卻偏偏與公主長(zhǎng)得像函卒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撇眯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容