選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
5 分鐘閱讀時間 (949 個字)

Ansible #8 - Ad-Hoc 指令[1]

shutterstock_198004562

 

  • 在前一篇,我們透過了 Vagrant + VirtualBox + Ansible 處理了

    • 建立了本地端的服務(就是那些 VM)
    • 執行了一個 playbook (校時)
    • 在深入 playbook 之前我們先來探究一下 Ad-hoc 指令的強大,這對往後在 playbook 的介紹上也有觸類旁通的作用
  • 首先,什麼是 Ad-hoc 指令?

    • 它的英文定義可以參考=>連結

      • 就我的理解它是有目的性
      • 而且它針對某種特定的問題有立即的效果
      • 它也可以是即興的意思
    • 綜上所述,它就是一種針對特定問題的一種即時指令

      • 比方說更新 OS 上軟體套件
      • 檢查各機器的資源使用量
      • 管理使用者與群組
      • 複製某些檔案到所有的 Server
      • 部署應用程式
      • 管理排程…等等
    • 以上提到的任務或多或少都可以半自動化,但某種程度上還是需要人為介入,尤其是即時發現問題

      • 在目前微服務架構盛行的情況下,一台台登入似乎不是一個好辦法

      • Ansible 的誕生讓網管或是開發人員可以一次性針對上百台的機器同時下達指令

      • 比方說在安裝篇的時候,我們曾經下過一條指令:

          ansible all -m ping
        • 雖然那時候沒幾台機器,但機器的量再大, Ansible 都有辦法執行完
      • 除了上述指令外,我們也可以下以下指令:

          ansible all -a "free -m"

        • 就可以一次性看到所有管控機器目前的記憶體使用狀況了
          • 本篇以及後面幾篇的用意是在於介紹 Ad-hoc 指令
          • 或許有些你覺得已經可以 playbook 處理
          • 或許你覺得一行行 key 指令跟 shell script 沒什麼兩樣
          • 但…我們就一步步慢慢來看看,為何需要介紹囉
          • 在開始操作之前,我們來建立一下環境吧
          • 先前我們只透過 Vagrant 建立了一一台 VM
          • 這次我們就來看看怎麼建多台 VM
          • 首先先建立一個目錄並在其中定義以下的 Vagrantfile
            #-*- mode: ruby -*- 
            #vi: set ft=ruby :
            

        VAGRANTFILE_API_VERSION = "2"

        Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.ssh.insert_key = false config.vm.provider :virtualbox do |vb|

           vb.customize ["modifyvm", :id, "--memory", "256"]

        end

        #Application server 1. config.vm.define "app1" do |app|

           app.vm.hostname = "orc-app1.dev"
           app.vm.box = "geerlingguy/centos7"
           app.vm.network :private_network, ip: "192.168.60.4"

        end

        #Application server 2. config.vm.define "app2" do |app|

           app.vm.hostname = "orc-app2.dev"
           app.vm.box = "geerlingguy/centos7"
           app.vm.network :private_network, ip: "192.168.60.5"

        end

        #Database server. config.vm.define "db" do |db|

           db.vm.hostname = "orc-db.dev"
           db.vm.box = "geerlingguy/centos7"
           db.vm.network :private_network, ip: "192.168.60.6"

        end end

        - 是不是覺得看起來很複雜?
        - 其實有更好的作法,不過先這樣吧!
        - 針對這個 Vagrantfile 有幾點要說明的:
           - 我們定義了三台 VM Server
           - 每一台 Server 都有它的獨特名稱及網路
           - 3 台 Server 都跑 CentOS 7
           - 其餘的部份各位有興趣再去查吧
        - 接著我們要針對這三台 VM 定義 **inventory** 了
        ```shell=
        #Application servers
        [app]
        192.168.60.4
        192.168.60.5
        
        #Database server
        [db]
        192.168.60.6
        
        #Group 'multi' with all servers
        [multi:children]
        app
        db
        
        #Variables that will be applied to all servers
        [multi:vars]
        ansible_ssh_user=vagrant
        ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key
        • 再來就是 vagrant up!
        • 然後先分別登入每一台 VM,預設的帳密都是 vagrant/vagrant,主要是為了讓 known_hosts 裡面有值,才不會每次連線都要問是否要加入
        • 接著試試以下指令看看是不是所有的機器都通了
           ansible multi -m ping -i hosts -u vagrant
          • 如上,這樣才算是通了喔
  • 這篇主要是為了之後幾乎所有的內容建好環境

    • 如果有任何不明白的部份再詢問喔
    • Vagrant 真是太方便了 ...
    • 如果之前在別的資料夾有建 VM 的,別忘記要下 vagrant destroy 刪掉舊的且用不到的 VM 喔!
    • 下一篇將正式開始用上面的環境介紹 Ad-hoc 指令
為什麼程式需要單元測試? - 概念篇
Ansible #7 - 第一次與 playbook 的邂逅

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/18, 週六

Captcha 圖像