在自動化運維領域,除了saltstack,還有ansible這個批量安裝部署工具,在寫具體內容先,先談談我用過兩個工具後的感想。
saltstack是C/S框架,要在客戶端裝軟件,並且啓動服務才能進行管理,ansible是通過ssh連接到客戶端的,也就是說必須把密鑰傳給客戶端才能進行管理,雖然可以關閉這個驗證方式,但是生產環境中肯定是不能關閉的,從這一點看,還是ansible更容易配置,完全可以用腳本循環遍歷所有主機來添加密鑰。
使用方面,命令複雜程度相似,理解起來更容易的應該是saltstack,命令基本都是英語的組合,ansible則是依靠各種模式,參數來執行管理。
腳本編程方面,編程複雜度方面不盡相同,ansible提供羣組的方式來對多主機提供管理,在推送操作到客戶端時需給出明確的執行文件(yml),對於文件的存放位置沒有明確的規定,saltstack需要在命令行提供主機信息,在推送時執行的是配置文件中提供的目錄中的文件(sls),推送的文件也必須在這個目錄中。
以上是我個人的一些見解,下面開始實戰操作
環境介紹:
Centos 6.5
Ansible 2.3.0
Docker 1.7.1
Http 2.4.6-67
一.Docker操作
1.docker安裝
這部分略過,如果你對docker安裝和一些常用命令不瞭解,請參考《Docker常用命令和操作》
2.拉取ansible鏡像
docker pull ansible/centos7-ansible #推薦使用這個鏡像
拉取成功後可以在p_w_picpaths裏查看到這個鏡像
3.運行鏡像,打開一個容器
docker run -it --name ansible 6883
4.修改配置文件
vi /etc/ansible/hosts
[local]\nlocalhost\n >>>>>
[local]
localhost
這兩個回車符在運行時是不能轉義的,會報錯
5.提交修改後的容器
docker commit 1277 ansiblev2
6.編寫鏡像構建方法
vim Dockerfile
FROM ansiblev2 MAINTAINER bin [email protected] WORKDIR /opt/ansible #定義工作區 RUN mkdir /opt/ansible/files #創建必須目錄 RUN mkdir /opt/ansible/template ADD httpd.conf /opt/ansible/files #把需要的文件複製到指定位置 ADD index.html.j2 /opt/ansible/template ADD web.yml /opt/ansible/ RUN ansible-playbook /opt/ansible/web.yml -c local #運行ansible進行自動部署 VOLUME /var/www/html #定義數據卷 CMD ["/usr/sbin/httpd","-X"] #讓httpd服務在前臺運行 EXPOSE 80 #開放80端口,httpd.conf配置文件中必須也是80端口
二.Ansible操作
1.編寫服務部署方法
vim web.yml #ansible和saltstack在文字格式方面要求同樣嚴格,如果報錯,請查看格式是否正確!
- name: Configure webserver with http #在運行時的提示信息 hosts: local #對本地主機組進行操作 sudo: True #運行時切換用戶 tasks: #建立任務 - name: install http yum: name=httpd update_cache=yes #安裝httpd,更新緩存 - name: copy http config file copy: src=files/httpd.conf dest=/etc/httpd/conf #文件複製 - name: enable configuration file: > #豎版寫法,建立軟連接 dest=/etc/httpd/configure src=/etc/httpd/conf/ state=link - name: copy index.html #拷貝主頁文件 template: src=template/index.html.j2 dest=/var/www/html/index.html mode=0644
2.index.html.j2的內容
<html> <head> <title>Welcome to ansible!</title> </head> <body> <h1>http,configured by Ansible</h1> <p>If you can see this,Ansible successfully installed http.</p> <p>{{ ansible_env }}</p> #會顯示容器的環境變量 #要想顯示更多信息,可以通過ansible hostname -m setup來查看可以引用的變量 <p>{{ ansible_env.PATH }}</p> #顯示環境變量中的PATH的值 </body> </html>
三.構建鏡像,啓動容器
1.構建鏡像
當前目錄結構
docker build -t ansible/httpd .
2.啓動容器
docker run -d -p 8000:80 --name httpd ansible/httpd #把容器的80端口映射到本地的8000端口
3.查看容器運行情況
docker ps -a
4.因爲在構建鏡像的時候指定了數據卷,可以在啓動容器的時候掛載數據卷,方便代碼修改
docker run -d -p 8001:80 -v /var/www/html:/var/www/html --name http2 ansible/httpd
四.測試主頁
http://192.168.6.10:8000
出現如上顯示爲部署正常