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

Ansible #6 - 工具篇

shutterstock_198004562

 

  • Ansible 不論是本地端或是遠端的機器都可以連線的
    • 近年來 TDD 愈來愈盛行,也因此有人提出:
      • Infrastructure 也應該被測試
      • 不論是手動或是自動,Ansible 都能與其結合,提供針對 Infrastructure 的部份測試情境
      • 盡量避免 cowboy coding,也就是直接在正式機測試,開發,而且也不做任何文件記錄
    • 為此我們在這邊會提到兩個工具,可以在本地端模擬
      • 首先是 Vagrant,是一個可以提供 Server 的工具
      • 再來是 VirtualBox,用在本地端虛擬化環境建立
      • 兩者都是開源免費的,而且 Linux/Mac/Windows 都可以安裝,所以可以互相搭配製造模擬實際的情境
  • 那麼就來建立一個模擬的環境吧
    • 第一步是先下載、安裝工具
      • 首先先下載 VirtualBox
      • 接著下載 Vagrant
      • 安裝過程我們就直接省略了,因為沒有什麼特別要留意的,隨便你高興安裝哪一個版本
        • 如果是 Linux 可以透過 yum/apt 安裝
        • 如果是 Mac 可以透過 homebrew 安裝
        • 如果是 Windows 可以透過 Chocolatey 安裝
    • 第二步是嘗試單用 Vagrant + VirtualBox 建立環境
      • 首先先建立一個目錄,指令如下:
          mkdir "目錄名稱"
        • 以我的電腦為例,就會是如下圖:
      • 接著要從 HashiCorp Bento 拉一個人家已經包裝好的虛擬環境,還有其他的可以從這裡找到,而指令:
          vagrant box add geerlingguy/centos7
        • 這個會下載滿久的,可以先去泡個茶
      • Bento 拉好之後就可以直接用了,怎麼用?
          vagrant init geerlingguy/centos7
        • 此時你會發現目錄下多了個 Vagrantfile
        • 這個 Vagrantfile 其實就是一個 Ruby script,裡面描述著如何建立各台 VM 的相關資訊像是 CPU/RAM/DISK/IP ... 等等
      • 最後一步就是啟動 VM,指令如下:
          vagrant up
        • 然後你就有一台 CentOS 7 的 VM 了
        • 除了啟動 VM 之外,它還會去更新 Kernel 還有 GuestAdditions 的版本…等等,所以可能會耗挺久的
      • 啟動 VM 之後還能做些什麼?
        • 就平常做的事囉(被揍)
        • vagrant halt 可以停止VM(關機)
        • vagrant destroy 會移除 VM
        • vagrant ssh 可以 ssh 連線進 VM(從本機)
        • vagrant ssh-config 可以看到相關的資訊
    • 好,那 Vagrant + VirtualBox 建立了環境後,它會怎麼跟 Ansible 結合呢?
      • 首先,要先提一下 Vagrant 不只能搭配 VritualBox,也能搭配 VMWare(不過似乎要錢)
      • Vagrant 能做到的事,你透過 VirtualBox 的 GUI 或是它提供的工具也都可以做到,例如:
        • 可以管理它的網路介面,比方說 Forward 某個 port 到 VM、共用 Host 的網路、VM 間透過私有網路溝通…等等
        • 可以跟 Host(安裝 Vagrant 的機器)共享資料夾,透過 NFS 或是 VirtualBox 提供的機制
        • 只要定義一個 Vagrantfile,就可以控制多個 VM,這點的重要性在於你可以很簡單的模擬複雜的架構(不過前提當然是你的 Host 資源要充足)
        • Provisioning(不知道中譯),意思就是 Vagrant 本身可以搭配其他的工具做起 VM 之後的一些自動化流程,e.g. 校時
      • 好了,重點來了,怎麼設定 vagrant 的 provision 為 ansible 呢?
        • 首先要調整一下 Vagrantfile,在最後一個 end 之前加上以下的語法:
             config.vm.provision "ansible" do |ansible|
                 ansible.playbook = "playbook.yml"
             end
          • 這段是在設定 VM 起來之後 的 provision 為 ansible,而且要執行的 playbook(日後會再說明)為 playbook.yml
        • 接著要定義一個校時用的範例 playbook,內容如下:
            ---
            - hosts: all
              become: yes
              tasks:
                - name: Ensure NTP (for time synchronization) is installed.
                  yum: name=ntp state=present
                - name: Ensure NTP is running.
                  service: name=ntpd state=started enabled=yes
          • 內容其實看似淺顯易懂,就兩個步驟,安裝跟執行 NTP
          • 實際上有多複雜,之後提到 playbook 的時候保證讓你們看好看滿
        • 在調整好 Vagrantfile 並加上 playbook.yml 之後還有兩件事
          • 切到 Vagrantfile 所在的目錄
          • 執行 vagrant provision(記得要先 vagrant up 喔),然後觀看神奇的事情發生如下圖:
        • 什麼事情很神奇?
          • 試想如過有 10或100台甚至上千台虛擬機,全部都要一模一樣的環境,如果手動的話要花多久工時/人天?
          • 裡面有出現任何的 shell script 判斷什麼情況要做什麼,怎樣算失敗,怎樣算通過,如果執行一次以上還所有的 VM 都還是保持原狀態嗎?
          • Ansible 照著劇本,針對開起來的 VM 了一場好戲(X),並告訴我們結果是 OK 的,所以劇本的內容是可以抽換的,也可能是 1000 台都要裝最新的 docker 的劇本,或是更複雜的環境建置
          • 最神奇的是以後任何人拿著這個 Vagrantfile 跟 playbook.yml,它只要機器上有裝好 Ansible + Vagrant + VirtualBox,他也可以跟你建一模一樣的環境(不能再說他的電腦可以,我的電腦不行了Q_Q)
  • 經過以上的操作,相信有人應該…
    • 一頭霧水?
    • 躍躍欲試?
    • 不論你是哪一種,下一篇將稍微講解一下本篇用到的 playbook 的架構
×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

Ansible #7 - 第一次與 playbook 的邂逅
Ansible #5 - 偽安裝篇[Windows]

相關文章

 

評論 2

David Chou (周彥江) 於 2021年5月20日 09:25, 星期四

英文不是很好,但我覺得 Provisioning 對於實體,可翻成「供裝」;對於服務,可翻成「開通」。

英文不是很好,但我覺得 Provisioning 對於實體,可翻成「供裝」;對於服務,可翻成「開通」。
George Chou (周孚陽) 於 2021年5月20日 09:46, 星期四

我中文不好 orz

我中文不好 orz
已經注冊了? 這裡登入
2026年4月04日, 星期六

Captcha 圖像