ansible做爲目前批量linux機器遠控工具的老大、其易用性、管理成本低等遠遠超過了同類的Fabric等工具。html
準備測試機器,這裏就拿已有的kubernetes的機器作測試,機器和ip分配參考:java微服務 k8s生產環境搭建, 注意下面案例中的k8s機器的ip段已經改爲 192.168.10,機器列表以下java
機器 | ip |
---|---|
K8s-ha-deploy | 192.168.10.140 |
K8s-ha-master1 | 192.168.10.130 |
K8s-ha-master2 | 192.168.10.131 |
K8s-ha-master3 | 192.168.10.132 |
K8s-ha-node1 | 192.168.10.135 |
K8s-ha-node2 | 192.168.10.136 |
K8s-ha-node3 | 192.168.10.137 |
執行下面的命令在部署機上安裝ansiblenode
pip install pip --upgrade -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install --no-cache-dir ansible -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
複製代碼
也能夠使用docker一鍵啓動python
alias ansible="docker run --rm --name ansible -v ${HOME}/.ssh/config:/home/ansible/.ssh/config:ro -v ${HOME}/.ssh/known_hosts:/home/ansible/.ssh/known_hosts:ro -it williamyeh/ansible:alpine3 ansible"
ansible --version
複製代碼
查看效果: linux
ansible會從當前目錄的hosts配置文件中讀取被操控的機器的ip 把6臺想要操控的機器ip寫入hosts文件,以下docker
[kube-master]
192.168.10.130
192.168.10.131
192.168.10.132
[kube-node]
192.168.10.135
192.168.10.136
192.168.10.137
複製代碼
ansible所在的主機要求可以使用密鑰登陸全部被操控的機器,這樣效率就很高了,無需輸入密碼的交互了 在ansible所在主機先使用下面的命令生成密鑰shell
ssh-keygen -t rsa -b 2048
複製代碼
而後執行ssh-copy-id命令把密鑰複製到全部須要被ansible操控的機器markdown
ssh-copy-id 192.168.10.130
ssh-copy-id 192.168.10.131
ssh-copy-id 192.168.10.132
ssh-copy-id 192.168.10.135
ssh-copy-id 192.168.10.136
ssh-copy-id 192.168.10.137
ssh-copy-id 192.168.10.140
複製代碼
而後就能夠使用ansible, ansible-playbook等命令操控機器了ssh
查看配置的主機是否在線ide
ansible all -m ping
複製代碼
查看效果
能夠看到配置的6臺機器都是在線的
在遠程機器上執行任意命令使用指令ansible all -m command -a '這裏寫須要執行的命令'
好比在遠程機器上執行hostname獲取機器名
ansible all -m command -a 'hostname'
複製代碼
查看執行效果:
這個ansible指令雖然方便可是每次只能執行一個指令,而且不能像文件那樣對指令進行管理
下面使用ansible提供的playbook功能利用文件來組織管理這些須要在遠程機器執行指令
playbook使用yml格式保存文件內容,yml格式參考:yaml.org/
把這個ansible指令ansible all -m command -a 'hostname'
轉成playbook以下 給這個playbook起個文件名好比:myplaybook.yml
- hosts: all become: root tasks: - name: "查看主機名稱" command: hostname 複製代碼
而後使用命令ansible-playbook myplaybook.yml
,可是ansible-playbook默認不會把這個hostname命令的直接輸出的,這裏要查看輸出結果能夠添加-v參數或者使用debug模塊,命令以下
ansible-playbook myplaybook.yml -v
複製代碼
查看執行效果以下:
這樣就能夠在文件里長期對命令進行維護了
ansible內置了不少模塊替代編寫原始shell命令來提升效率,全部可用的模塊參考:Module Index
當被管理的playbook項目愈來愈大時,單靠playbook也會難以維護,這個時候就能夠使用ansible提供的include和roles功能了
python的pip包能夠使用阿里雲的鏡像,這樣能夠提升包的安裝速度
這個ansible命令只能臨時使用,對命令長期維護建議使用playbook