SaltStack - Salt cloud模塊使用完全指南

您也可以參考在Github上維護的這一份技術資料:Using Salt Cloud

salt-cloud Command Line Reference - salt-cloud命令使用說明

使用Salt在雲平臺中配置虛擬機。

Synopsis - 概要

salt-cloud -m /etc/salt/cloud.map

salt-cloud -m /etc/salt/cloud.map NAME

salt-cloud -m /etc/salt/cloud.map NAME1 NAME2

salt-cloud -p PROFILE NAME

salt-cloud -p PROFILE NAME1 NAME2 NAME3 NAME4 NAME5 NAME6

Description - 描述

Salt Cloud是用於通過簡潔受控的配置文件和配置映射系統在各種公共雲上置備虛擬機的管理系統。

Options - 配置選項

通用選項

  • –version

打印正在運行的Salt軟件版本。

  • –versions-report

顯示程序的依賴關係和版本號,然後退出。

  • -h, --help

幫助信息。

  • -c CONFIG_DIR, --config-dir=CONFIG_dir

Salt配置文件存放目錄的位置。 該目錄包含Salt master和Minions的配置文件。 大多數系統上的默認位置是/etc/salt。

Execution Options - 執行模塊選項

  • -L LOCATION, --location=LOCATION

指定要連接到的區域。

  • -a ACTION, --action=ACTION

執行特定於此雲服務商的平臺管理操作。 此參數需要指定一個或多個實例的名稱。

  • -f , --function=

執行那些針對特定的雲服務商軟件的管理功能,這些功能函數一般不適用於管理虛機實例。 此參數要求指定一個provider提供者(例如 nova)。

  • -p PROFILE, --profile=PROFILE

選擇一個配置文件以從中構建指定的雲主機VMs。 必須在參數指定的配置文件中定義VMs的配置文件。

  • -m MAP, --map=MAP

指定要使用的map映射文件。 如果不帶任何其他選項,則此選項將創建所有映射的VMs。 如果命名的VM已經存在,則將被跳過。

  • -H, --hard

指定映射文件時,默認行爲是確保創建映射文件中指定的所有VMs。 如果設置了–hard選項,則將銷燬在映射文件中未指定的已配置雲平臺上存在的所有VMs。 請注意,這可能是破壞性的操作,應謹慎使用。

  • -d, --destroy

傳遞虛擬機的名稱以進行銷燬,salt-cloud將在配置的雲平臺中搜索指定的名稱並銷燬虛擬機。 請注意,這是破壞性操作,應謹慎使用。 可以與-m選項一起使用,以指定要刪除的VM的映射。

  • -P, --parallel

通常在構建許多雲主機實例時,它們是按順序依次執行的。 -P 選項則會爲每個雲虛擬機的構建創建一個獨立的工作進程,從而允許一次構建出大量的雲主機。

請注意,某些雲平臺服務商的系統似乎不太適合這種大量的虛擬機創建。 創建一大組VMs時,請先仔細瞭解雲平臺服務商的功能支持情況。

  • -u, --update-bootstrap

更新salt-bootstrap爲最新的穩定發行版。

  • -y, --assume-yes

在所有的需要確認的問題中,都提供一個yes的默認回覆。

  • -k, --keep-tmp

在執行deploy.sh腳本完成後,不要清除/tmp下的臨時數據。

  • –show-deploy-args

在返回的數據中包含部署minions使用的選項。

  • –script-args=SCRIPT_ARGS

在部署VM實例時,傳遞給bootstrap腳本使用的參數選項。

Query Options - 查詢選項

  • -Q, --query

執行查詢並返回有關在已配置的雲平臺上運行的節點的一些信息。

  • -F, --full-query

執行查詢並打印出有關所有云主機的所有可用信息。 可以與 -m 一起使用,僅顯示有關指定映射的信息。

  • -S, --select-query

執行查詢並打印出有關所有云主機的選定信息。 可以與 -m 一起使用,以僅顯示有關指定映射的信息。

  • –list-providers

顯示已加入配置的雲平臺的列表。

  • –list-profiles

New in version 2014.7.0.

顯示已配置的profiles配置文件列表。 傳入雲平臺provider參數則可以查看與其相關的profiles配置文件,例如digitalocean,或傳入 all 以列出所有已配置的profiles配置文件。

Cloud Providers Listings - 雲平臺列表選項

  • –list-locations=LIST_LOCATIONS

顯示已配置的雲平臺providers中可用的位置區域的列表。 傳遞給雲平臺期望使用的位置選項值,如"linode",或傳遞參數值"all"以列出所有已配置雲平臺中的位置區域信息。

  • –list-images=LIST_IMAGES

顯示已配置的雲平臺中可用的鏡像列表。 傳遞給雲平臺期望使用的鏡像,如"linode",或傳遞"all"以列出所有已配置雲平臺服務商的鏡像資源。

  • –list-sizes=LIST_SIZES

顯示已配置的雲平臺中可用配置規格的列表。 傳遞期望使用的規格給雲平臺,如"AWS",或傳遞"all"以列出所有已配置的雲平臺上可用的雲主機配置規格。

Cloud Credentials - 雲平臺身份憑據配置參數

  • –set-password=

    配置雲平臺服務商的密碼憑據並將其保存到keyring密鑰環。 可以在有或沒有驅動程序的情況下指定PROVIDER,例如:"–set-password bob rackspace"或更具體的"–set-password bob rackspace:openstack"(已棄用!)

Output Options - 輸出信息的配置選項

  • –out

傳入一個替代的outputter,用於輸出展示返回的數據。 該outputter可以是以下任何可用的outputters之一:

highstate, json, key, overstatestage, pprint, raw, txt, yaml,以及很多其它可選用的。

某些outputters僅針對從特定功能返回的數據進行格式化。 如果使用的outputters不支持處理傳遞給它的數據,則Salt將退回到使用pprint outputter,並使用Python pprint標準庫模塊顯示返回數據。

注意:如果使用--out=json,則可能還需要同時使用--static。 如果沒有static選項,則每個minion都會輸出一個單獨的JSON字符串,這會使JSON輸出整體上無效。 這是由於在整體上的輸出器使用產生失迭代所致。 因此,如果要將其發送到JSON解析器時,也請使用--static

  • –out-indent OUTPUT_INDENT, –output-indent OUTPUT_INDENT

在輸出中打印以空格提供的縮進。 負值表示禁用縮進。 僅適用於支持縮進的outputters輸出程序。

  • –out-file=OUTPUT_FILE, –output-file=OUTPUT_FILE

輸出到外部文件。

  • –out-file-append, –output-file-append

將輸出信息追加到外部文件。

  • –no-color

禁止使用彩色顯示輸出信息。

  • –force-color

強制使用彩色渲染輸出的信息。

注意:使用彩色輸出時,顏色代碼如下:

green表示成功,red表示失敗,blue表示更改和成功,yellow表示預期的將來配置更改。

  • –state-output=STATE_OUTPUT, –state_output=STATE_OUTPUT

覆蓋配置的minion輸出設置中的state_output值。 取值爲’full’, ‘terse’, ‘mixed’, ‘changes’ 或 'filter’之一。 默認值:‘none’。

  • –state-verbose=STATE_VERBOSE, –state_verbose=STATE_VERBOSE

覆蓋爲minion輸出配置的state_verbose值。 設置爲True或False。 默認值:none。

使用示例

使用指定的profiles配置文件創建出名爲 web1, web2, db1, 和 db2的四個虛機 :

salt-cloud -p fedora_rackspace web1 web2 db1 db2

讀取映射文件並創建其中指定的所有VMs:

salt-cloud -m /path/to/cloud.map

讀取映射文件且並行創建其中指定的所有VMs,執行以下操作:

salt-cloud -m /path/to/cloud.map -P

刪除映射文件中指定的所有VMs:

salt-cloud -m /path/to/cloud.map -d

刪除那些在映射文件中沒有指定的VMs:

salt-cloud -m /path/to/cloud.map -H

顯示在映射文件中指定的所有VMs的狀態:

salt-cloud -m /path/to/cloud.map -Q

See also: salt-cloud(7) salt(7) salt-master(1) salt-minion(1)

Salt Cloud basic usage - Salt Cloud的基本用法

Salt Cloud 需要至少配置好一個雲平臺providerProfile纔可以運行。

Creating a VM - 創建一個虛機

使用salt cloud創建一個虛機, 使用命令:

salt-cloud -p <profile> name_of_vm

假定有一個配置好的profile文件,像下面這樣:

fedora_rackspace:
    provider: my-rackspace-config
    image: Fedora 17
    size: 256 server
    script: bootstrap-salt

然後, 使用命令創建一個名爲 fedora_http_01 的虛機:

salt-cloud -p fedora_rackspace fedora_http_01

Destroying a VM - 銷燬一個虛機

銷燬一個使用salt-cloud創建的虛時時:

salt-cloud -d name_of_vm

例如,刪除在上面剛報建的虛時:

salt-cloud -d fedora_http_01

VM Profiles - 定義虛機的配置文件

Salt cloud在profile配置文件中配置虛擬機。 profile配置文件默認爲/etc/salt/cloud.profiles,並且是yaml配置形式。 聲明配置文件的語法很簡單:

fedora_rackspace:
    provider: my-rackspace-config
    image: Fedora 17
    size: 256 server
    script: bootstrap-salt

應該注意的是,script選項默認爲bootstrap-salt,通常不需要指定。 本文檔中的其他示例將不會顯示script選項。

需要聲明一些關鍵key信息,並且這些信息可以根據雲服務商程序進行更改。 也可以插入許多其他參數:

centos_rackspace:
  provider: my-rackspace-config
  image: CentOS 6.2
  size: 1024 server
  minion:
    master: salt.example.com
    append_domain: webs.example.com
    grains:
      role: webserver

image參數值需要從可用的鏡像列表中選擇。同樣地, 虛機配置規格也必須從給定的規格列表中選取。 使用下面命令獲取一份可用的虛機鏡像列表和配置規格列表:

salt-cloud --list-images openstack
salt-cloud --list-sizes openstack

可以在Salt Cloud的主配置文件中指定一些參數,然後將其應用於所有的雲主機profiles配置文件。 例如,如果僅使用單個的雲服務提供商,則可以在Salt cloud配置文件中聲明provider選項。

Multiple Configuration Files

除了/etc/salt/cloud.profiles之外,還可以在與cloud.profiles.d/*.conf匹配的任何文件中指定配置文件,它是相對於profiles配置文件的子目錄(以上述配置文件爲例) 。 這樣可以執行更可擴展的配置,並且可以與各種配置管理工具以及版本控制系統很好地配合使用。

Larger Example

rhel_ec2:
  provider: my-ec2-config
  image: ami-e565ba8c
  size: t1.micro
  minion:
    cheese: edam

ubuntu_ec2:
  provider: my-ec2-config
  image: ami-7e2da54e
  size: t1.micro
  minion:
    cheese: edam

ubuntu_rackspace:
  provider: my-rackspace-config
  image: Ubuntu 12.04 LTS
  size: 256 server
  minion:
    cheese: edam

fedora_rackspace:
  provider: my-rackspace-config
  image: Fedora 17
  size: 256 server
  minion:
    cheese: edam

cent_linode:
  provider: my-linode-config
  image: CentOS 6.2 64bit
  size: Linode 512

cent_gogrid:
  provider: my-gogrid-config
  image: 12834
  size: 512MB

cent_joyent:
  provider: my-joyent-config
  image: centos-7
  size: g4-highram-16G

Cloud Map File - 雲管理的映射文件

創建虛擬機時,存在許多可用的選項。 可以直接從配置文件和命令行執行中使用它們,或者可以創建更復雜的map file映射文件。映射文件允許創建多個虛擬機,並與特定的配置文件相關聯。映射文件被設計爲僅運行一次,以使用salt-cloud創建出更爲複雜的雲主機使用場景。

映射文件具有一個簡單的內容格式,需要先指定一個profile配置文件,然後從該配置文件中創建一個虛擬機列表:

fedora_small:
  - web1
  - web2
  - web3
fedora_high:
  - redis1
  - redis2
  - redis3
cent_high:
  - riak1
  - riak2
  - riak3

可以調用該映射文件以部署所有這些虛擬機。 使用-m選項從salt-cloud命令調用map文件:

$ salt-cloud -m /path/to/mapfile

同樣地,像直接使用profile配置文件創建虛機一樣,可以爲映射文件傳遞-P選項來並行創建虛擬機:

$ salt-cloud -m /path/to/mapfile -P

注意:由於GoGrid API中的限制,無法使用GoGrid驅動程序並行配置虛機實例。 Map文件可與GoGrid一起使用,但不支持使用-P參數來並行創建GoGrid實。

也可以使用--hard選項強制執行映射文件以管控雲平臺資源的整體狀態。 當使用hard選項時,任何實際存在但卻未在映射文件中定義的vms都將被銷燬:

$ salt-cloud -m /path/to/mapfile -P -H

請謹慎處理此參數,這非常危險! 實際上,它是如此危險,以至於要使用它,必須在master的配置文件中顯式啓用它。

enable_hard_maps: True

在映射文件中可以使用grains參數以及minion的配置選項:

fedora_small:
  - web1:
      minion:
        log_level: debug
      grains:
        cheese: tasty
        omelet: du fromage
  - web2:
      minion:
        log_level: warn
      grains:
        cheese: more tasty
        omelet: with peppers

在映射文件中指定的數據項,將會覆蓋掉原profile配置文件中同名的數據項:

fedora_small:
  - web1:
      size: t2.micro
  - web2:
      size: t2.nano

從Salt 2017.7.0開始,嵌套元素將被合併,並且可以單獨指定嵌套中的元素,而不必爲每個top level數據元素重複完整的定義。 在此示例中,在繼承磁盤和網絡配置的設備參數時,爲每個VMware實例分配了單獨的MAC:

nyc-vm:
  - db1:
      devices:
        network:
          Network Adapter 1:
            mac: '44:44:44:44:44:41'
  - db2:
      devices:
        network:
          Network Adapter 1:
            mac: '44:44:44:44:44:42'

映射文件還可以使用在各類查詢操作中:

$ salt-cloud -m /path/to/mapfile -Q
{'ec2': {'web1': {'id': 'i-e6aqfegb',
                     'image': None,
                     'private_ips': [],
                     'public_ips': [],
                     'size': None,
                     'state': 0}},
         'web2': {'Absent'}}

或者,和刪除選項一起使用:

$ salt-cloud -m /path/to/mapfile -d

The following virtual machines are set to be destroyed:
  web1
  web2

Proceed? [N/y]

Warning:在命令行上使用map file指定節點時,不支持具體指定到一個或多個節點的名稱。 當聯合使用map file和--destroy參數時,記住這一點尤其重要; salt-cloud將忽略任何與映射文件不直接相關的參數。 當在同時使用map file和–destroy時,映射文件中的每個節點都將被刪除! Maps文件沒有提供任何有用的信息來實現只銷毀單個節點,因此不應將此技術用於銷燬一個映射文件中節點的子集。

Setting up New Salt Masters - 配置新的Salt Masters

很容易使用映射文件定義並創建出一個新的Salt master :

fedora_small:
  - web1:
      make_master: True
  - web2
  - web3

注意,在上面這樣的映射文件中引導啓動的所有的minions都會直接受管理於一同新創建的Salt-master。

使任何一個被引導創建的minion都接受引導啓動的新salt-master管控,而該新創建的salt-master卻是接受local master的管理時,則需要像下面這樣:

fedora_small:
  - web1:
      make_master: True
      minion:
        master: <the local master ip address>
        local_master: True
  - web2
  - web3

上面的映射文件的意思是,受新創建的salt-master管理的minions,也同樣地,是在local master的管理之下。

再看一個例子:

fedora_small:
  - web1:
      make_master: True
  - web2
  - web3:
      minion:
        master: <the local master ip address>
        local_master: True

在上面的這個例子中,web3這個minion節點被設置爲受local master的管理,而不響應新引導啓動的master。

Using Direct Map Data - 直接使用映射文件的內容數據

當使用Salt模塊直接調用CloudClient(特別是雲執行和runner運行模塊)時,可以傳入映射文件的內容,而不是映射文件位置的路徑。

通常,在使用這些模塊時,使用以下方式傳遞映射文件的路徑:

salt-run cloud.map_run /path/to/cloud.map

使用 map_data 參數可以直接傳遞映射文件的內容:

salt-run cloud.map_run map_data='{"centos7": [{"saltmaster": {"minion": \
    {"transport": "tcp"}, "make_master": true, "master": {"transport": \
    "tcp"}}}, {"minion001": {"minion": {"transport": "tcp"}}}]}'

Cloud Actions - 雲管理的操作命令

當創建出虛擬機後,可以對它執行許多管理操作。 在所有云平臺服務商中都可以使用"reboot"操作,但是所有其他的操作都是特定於某些雲平臺的。 爲了執行這些操作,您可以在命令行中指定它,提供需要執行操作命令的VMs的名稱:

$ salt-cloud -a reboot vm_name
$ salt-cloud -a reboot vm1 vm2 vm2

或者是,你可以使用一個映射文件把所有需要執行管理操作命令的虛機都包含在裏面:

$ salt-cloud -a reboot -m /path/to/mapfile

下面是 salt-cloud 支持使用的一個操作命令列表:

all providers:
    - reboot
ec2:
    - start
    - stop
joyent:
    - stop
linode:
    - start
    - stop

查看更多salt-cloud行爲的另一個有用參考是 Salt Cloud Feature Matrix

Cloud Functions - 雲管理的功能函數

除了不對特定實例執行操作之外,雲功能函數與雲操作命令的工作方式幾乎相同,因此不需要指定計算機名稱。 但是,由於它們在特定的雲平臺服務商上執行操作,因此必須指定該雲平臺服務商provider。

$ salt-cloud -f show_image ec2 image=ami-fd20ad94

共有三種通用的salt-cloud 函數,這些功能函數對於收集基於雲平臺服務商有關實例的基礎信息非常有用:

  • list_nodes:返回有關給定provider的實例的一些常規信息。
  • list_nodes_full:返回有關給定provider的實例的所有信息。
  • list_nodes_select:返回有關給定provider的實例的選定信息。
$ salt-cloud -f list_nodes linode
$ salt-cloud -f list_nodes_full linode
$ salt-cloud -f list_nodes_select linode

另一個對於理解salt-cloud比較有幫助的參考資料是 Salt Cloud Feature Matrix

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