📘
現代 IT 人一定要知道的 Ansible 自動化組態技巧
  • README
  • 前言
  • Ansible 是什麼?
  • 怎麼部署 Ansible 環境?
  • 怎麼用 Vagrant 練習 Ansible?
  • 怎麼用 Docker 練習 Ansible?
  • 怎麼操作 Ansible?
  • 怎麼用 Jupyter 操控 Ansible?(localhost)
  • 怎麼用 Jupyter 操控 Ansible?(Managed node)
  • 怎麼用 Docker Compose 練習 Ansible?
  • Ansible 的開發工具有哪些?
  • 怎麼看 Ansible Modules 文件?
  • 常用的 Ansible Module 有哪些?
  • 怎麼使用 setup 取得 Managed node 的 facts?
  • 怎麼使用 Ansible 的 Template 系統?
  • 怎麼在 Playbooks 裡使用 Handlers?
  • Ansible 如何發送 notification 到 Slack?
  • Ansible 如何發送 notification 到 HipChat?
  • 如何在 Playbooks 使用 loops?
  • 如何維護大型的 Playbooks?
  • Roles 是什麼?
  • 怎麼使用 Roles?
  • 怎麼用 Roles 部署 LNMP 網頁應用程式?(上)
  • 怎麼用 Roles 部署 LNMP 網頁應用程式?(下)
  • 怎麼用 Roles 部署 TestLink?
  • 怎麼在 Ansible Galaxy 分享 Roles?(上)
  • 怎麼在 Ansible Galaxy 分享 Roles?(下)
  • 怎麼用 Travis CI 測試 Roles?
  • 怎麼混用 Ansible 建置 Docker image?
  • 怎麼在 Docker Hub 混用 Ansible 自動建置 Docker image?
  • 怎麼用 Vault 管理敏感資料?
  • 總結
Powered by GitBook
On this page
  • 03. 怎麼部署 Ansible 環境?
  • Ansible 是怎麼運作的?
  • 怎麼安裝 Ansible?
  • 怎麼設定 Ansible?
  • 相關連結

Was this helpful?

Edit on GitHub

怎麼部署 Ansible 環境?

PreviousAnsible 是什麼?Next怎麼用 Vagrant 練習 Ansible?

Last updated 4 years ago

Was this helpful?

03. 怎麼部署 Ansible 環境?

在本次的章節裡,凍仁將簡單地介紹 Ansible 基本觀念和怎麼安裝、設定 Ansible。

Ansible 是怎麼運作的?

在 Ansible 的世界裡,我們會透過 inventory 檔案來定義有哪些 Managed node (被控端),並藉由 SSH 和 Python 進行溝通。

換句話說,當 Control Machine (主控端) 可以用 SSH 連上 Managed node,且被連上的機器裡有預載 Python 時,Ansible 就可以運作了!

  • Control Machine 指的是我們主要會在上面操作 Ansible 的機器,凍仁喜歡用主控端來形容它。它可以是我們平時用的電腦、手機 或機房裡的某一台機器,也可以把它想成是一般 Lab 練習裡的 Workstation。

  • Managed node 則是被 Ansible 操縱的機器,凍仁喜歡用被控端來形容它。在很多的 Lab 練習裡會用 Server 來稱呼它。

怎麼安裝 Ansible?

在一般的情況下,我們只需在 Control Machine 裡安裝 Ansible 即可,因為 GNU/Linux 和 macOS 的 Managed node 都早已預載了 Python 2.5 以上的版本,且開通了 SSH 連線的條件。

在 Control Machine 上安裝 Ansible

目前最新釋出的 Ansible 版本為 v2.2.0.0。

Ubuntu (Apt)

  1. 安裝 add-apt-repository 必要套件。

$ sudo apt-get install -y python-software-properties software-properties-common
  1. 使用 Ansible 官方的 PPA 套件來源。

$ sudo add-apt-repository -y ppa:ansible/ansible; sudo apt-get update
  1. 安裝 Ansible。

$ sudo apt-get install -y ansible

CentOS (Yum)

  1. 新增 epel-release 第三方套件來源。

$ sudo yum install -y epel-release
  1. 安裝 Ansible。

$ sudo yum install -y ansible

macOS (Homebrew)

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. 安裝 Ansible。

$ brew install ansible

Python (Pip)

Ansible 近來的釋出速度很快,若想追求較新的版本可改用 Pip 的方式進行安裝,較不建議初學者使用。

# Debian, Ubuntu
$ sudo apt-get install -y python-pip

# CentOS
$ sudo yum install -y python-pip

# macOS
$ sudo easy_install pip
  1. 升級 pip。

$ sudo pip install -U pip
  1. 安裝 Ansible。

$ sudo pip install ansible

在 Managed Node 安裝 OpenSSH server 和 Python

正常在 Managed Node 我們都會安裝 OpenSSH server 和開通連線權限以便於遠端管理,OpenSSH 這邊凍仁就不多加贅述了。

  • Ubuntu.

    $ sudo apt-get install -y openssh-server python2.7
  • CentOS.

    $ sudo yum install -y openssh-server python

怎麼設定 Ansible?

我們可以藉由 ansible.cfg 來設定預設的 inventory 檔案的路徑、遠端使用者名稱和 SSH 金鑰路徑等相關設定。

  1. 安裝好 Ansible 後,我們可以在 /etc/ansible/ 的目錄底下找到 Ansible 的設定檔。

inventory 是什麼?

inventory 就單字本身有詳細目錄、清單和列表的意思。在這裡我們可以把它當成是一份主機列表,我們可透過它對定義每個 Managed Node 的代號、IP 位址、連線相關資訊和群組。

  1. 若有對 Control Machine 本機操作的需求,建議於 /etc/ansible/hosts 補上 local 的設定。

# For root user.
$ /bin/echo -e "[local]\nlocalhost ansible_connection=local" >> /etc/ansible/hosts

# For sudo user.
$ sudo su -c '/bin/echo -e "[local]\nlocalhost ansible_connection=local" >> /etc/ansible/hosts'

Hello World

當已上的設置都完成了,您可以試著在終端機裡用 Ansible 呼叫本機印出 Hello World。

$ ansible localhost -m command -a 'echo Hello World.'
localhost | SUCCESS | rc=0 >>
Hello World.

歡迎來到 Ansible 的世界!:D

相關連結

若想拿 Ansible 來管 Windows 了話,則需進行較多的設置。大家可參考凍仁先前分享的 簡報和。

礙於文章篇幅,這裡只會提到凍仁較常用的環境,其餘的部份還請參考和 Ansible 台灣使用者社群所維護的 。

請先安裝 ,已安裝者請略過。

需請先安裝 ,已安裝者請略過。

Python 的部份呢?雖說現代的 GNU/Linux 大多都早已內建了,可 Ansible 預設使用的 Python 是 2.x 的版本,這在 Ubuntu 16.04 預載 Python 3.4 的環境上需做些調整,詳情請參閱 一文。

macOS: 在 macOS 10.11 裡,我們只需使用內建的 OpenSSH server 和 Python 即可,詳情請參考 Apple 官方的 一文進行設置。

▲ hostfile 參數即將在 Ansible 2.8.0 被移除,若您是使 Ansible 2.4.0 以上的版本,請改用 inventory,詳情請參考。

通常我們較偏愛把 ansible.cfg 和 hosts 這兩個檔案與其它的 Playbooks 放在同個專案目錄底下,然後透過版本控制系統 (例如 Git) 把它們一起儲存起來,以實現 Ansible 的 !

Ansible 已在 2.2 時加入了 Python 3 Support 的功能,感謝友人 的 feedback,這下凍仁可以少寫一篇文章了!

Ansible - Roles & Windows
官方文件
官方文件
Ansible 安裝教學
homebrew
pip
Python 3 Support | Ansible Documentation
OS X El Capitan: 允許遠端電腦取用您的 Mac
Infrastructure as Code
現代 IT 人一定要知道的 Ansible 自動化組態技巧 | 凍仁的筆記
@maxsolar
官方文件
automate_with_ansible_basic-11.jpg
automate_with_ansible_basic-12.jpg
automate_with_ansible_basic-13.jpg
automate_with_ansible_basic-15.jpg
automate_with_ansible_basic-14.jpg