## Ansible的安裝及簡單使用 ## #### 一.Ubuntu安裝Ansible ```shell sudo apt update sudo apt install ansible #使用以下命令檢查安裝是否成功: ansible --version ``` ![image-20230817 ...
一.Ubuntu安裝Ansible
sudo apt update
sudo apt install ansible
#使用以下命令檢查安裝是否成功:
ansible --version
二.配置Ansible
#進入配置文件目錄
cd /etc/ansible/
ls
文件含義
ansible.cfg #ansible配置文件,預設基本不用動,全註釋
hosts #主機清單文件,存放被控端主機信息, 預設指定的hosts文件
修改ansible配置
vim ansible.cfg
把第七十一行的配置,取消註釋。這一行的作用是當 Ansible 連接到新創建的虛擬機時,不會要求手動驗證主機密鑰,而是自動跳過驗證,從而簡化自動化部署過程。
添加主機列表清單
vim hosts
含義
第一段 #被控端主機ip
ansible_ssh_user=root #ssh中setup模塊的系統變數,指定為遠程主機的用戶為root
ansible_ssh_pass=123 #同上,為遠程主機的root的密碼[web]:主機組的名稱
1. 使用ping模塊檢測所有主機是否存活
#執行
ansible -i hosts web -m ping
語句含義
-i hosts web #指定我們ansible工具針對的是 hosts主機文件中的 web為我們剛纔配置文件中的主機組
-m ping #-m 指定使用的模塊為ping,用於檢測主機,返回pong還要註意的是,此命令執行命令的路徑是/etc/ansible,所以hosts可以不指定文件目錄。如果在其他文件目錄下執行命令則需要加上
該配置文件的根路徑。ansible -i /etc/ansiblehosts web -m ping
2.ansible命令執行的過程說明
- ansible會先載入配置/etc/ansible/ansible.cfg文件
- 然後載入模塊文件(如上面的ping模塊)
- ansible會將我們執行的命令或模塊,生成一個臨時的python的腳本文件,將這個腳本文件發送到被控端的家目錄/.ansible/tmp/目錄下,並授權執行
- 執行完成後返回執行結果,並清除臨時文件
3. 常用模塊
1. command 模塊
這個模塊就是平時使用命令的習慣,比如ls、cd、pwd、cp、mv操作等等都可以實現,但是要註意的是\command模塊是不支持正則及特殊符號的
並且該模塊是預設附加的,也就是說。即使你不加-m command 也可以使用
#查看web組所有主機下,/root目錄內容
ansible -i hosts web -m command -a "ls /root"
#-a 是代表要執行的命令,相當於在所有主機上執行的
如圖,效果是一樣的。
2. shell 模塊
shell模塊和command模塊類似,但是支持正則及特殊符號。
ansible -i /etc/ansible/hosts web -m shell -a "echo test > /home/1.txt"
ansible -i /etc/ansible/hosts web -m shell -a "cat /home/1.txt"
3. copy模塊
拷貝文件,從ansible主機上把文件發送到被控端主機上
ansible -i /etc/ansible/hosts web -m copy -a "src=/home/test_copy.txt dest=/home"
ansible -i /etc/ansible/hosts web -m shell -a "ls /home"
三.使用案例以及問題發現
給web組的主機安裝docker
#配置安裝環境
ansible -i /etc/ansible/hosts web -m shell -a "apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common"
#添加密鑰
ansible -i /etc/ansible/hosts web -m shell -a "curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -"
#添加阿裡雲國內鏡像倉庫地址
ansible -i /etc/ansible/hosts web -m shell -a "add-apt-repository \"deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu \$(lsb_release -cs) stable\""
#更新軟體源,列出可安裝版本
ansible -i /etc/ansible/hosts web -m shell -a "apt-get update"
ansible -i /etc/ansible/hosts web -m shell -a "apt-cache madison docker-ce"
#安裝指定版本docker
ansible -i /etc/ansible/hosts web -m command -a "apt-get install -y docker-ce=5:20.10.13~3-0~ubuntu-focal docker-ce-cli=5:20.10.13~3-0~ubuntu-focal"
#重啟並檢查安裝是否成功
ansible -i /etc/ansible/hosts web -m shell -a "systemctl restart docker && docker --version"
問題:ansible在執行shell命令的時候,如果該命令在執行的時候出現提示鍵入y回車繼續之類的情況時,會使該命令陷入死鎖。
例:假如我這一步ansible -i /etc/ansible/hosts web -m command -a "apt-get install -y docker-ce=5:20.10.133-0ubuntu-focal docker-ce-cli=5:20.10.133-0ubuntu-focal"這裡採用apt-get install -y,其目的是跳過軟體安裝時的所以確認步驟,預設為y。如果安裝時採用,apt-get install去安裝docker,則會因為無法鍵入y而是web主機組的apt-get install命令陷入死鎖,從而導致無法更新和下載其他包