關(guān)閉

介紹一款主流的配置管理工具ansible

發(fā)表于:2024-6-14 09:33

字體: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    來(lái)源:51CTO博客

  Ansible自動(dòng)化配置管理
  1.什么是Ansible
  Ansible是一個(gè)IT自動(dòng)化的配置管理工具,自動(dòng)化主要體現在A(yíng)nsible集成了豐富的模塊,豐富的功能的組件,可以通過(guò)一個(gè)命令完成一系列的操作。進(jìn)而能減少我們的重復性工作和維護成本,以提高工作效率
  2.Ansible可以完成哪些功能
  1)批量執行遠程命令,可以對N多臺主機同時(shí)進(jìn)行命令的執行。
  2)批量配置軟件服務(wù),可以用進(jìn)行自動(dòng)化的方式配置和管理服務(wù)。
  3)實(shí)現軟件開(kāi)發(fā)功能,jumpserver底層使用ansible來(lái)實(shí)現的自動(dòng)化管理。
  4)編排高級的IT任務(wù),ansible的Playbook是一門(mén)編程語(yǔ)言,可以用來(lái)描繪一套IT架構。
  3.Ansible的特點(diǎn)
  1)容易學(xué)習,無(wú)代理模式,不像salt stack既要學(xué)習客戶(hù)端又要學(xué)習服務(wù)端,還要學(xué)習客戶(hù)端與服務(wù)端之間通訊協(xié)議。
  2)操作靈活,體現在A(yíng)nsible有較多的模塊,提供了豐富的功能、playbook則提供類(lèi)似于編程語(yǔ)言的復雜功能。
  3)簡(jiǎn)單易用,體現在A(yíng)nsible一個(gè)命令可以完成很多事情。
  4)安全性高,因為Ansible使用了SSH協(xié)議進(jìn)行通訊,即安全也穩定。
  5)移植性高,可以將寫(xiě)好的playbook拷貝至任意機器進(jìn)行執行。
  4.Ansible基礎架構
  ]
  5.Ansible配置
  1)安裝Ansible
  [root@manager ~]# yum install ansible -y
  2)查看Ansible版本
  [root@manager ~]# ansible --version
  ansible 2.8.5#版本
    config file = /etc/ansible/ansible.cfg#配置文件所在路徑
    configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']#模塊的搜索路徑
    ansible python module location = /usr/lib/python2.7/site-packages/ansible#python模塊所在的路徑
    executable location = /usr/bin/ansible#執行命令的位置
    python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]#python版本
  測試ansible配置文件的優(yōu)先級
  ANSIBLE_CONFIG#一個(gè)配置文件(最高優(yōu)先級1)
  ansible.cfg#當前項目目錄中(2)
  .ansible.cfg#當前執行用戶(hù)的家目錄(3)
  /etc/ansible/ansible.cfg#配置文件中(4)
  1.定義配置文件
  [root@manager ~]# export ANSIBLE_CONFIG="/tmp/ansible.cfg"#定義一個(gè)ansible
  [root@manager ~]# touch /tmp/ansible.cfg
  [root@manager ~]# ansible --version
  ansible 2.8.5
    config file = /tmp/ansible.cfg
    configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python2.7/site-packages/ansible
    executable location = /usr/bin/ansible
    python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  2。在projcet1上查看優(yōu)先級
  [root@manager ~]# mkdir /project1
  [root@manager ~]# touch /project1/ansible.cfg
  [root@manager project1]# ansible --version
  ansible 2.8.5
    config file = /root/project1/ansible.cfg
    configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python2.7/site-packages/ansible
    executable location = /usr/bin/ansible
    python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  3。在projcet2上查看優(yōu)先級
  [root@manager ~]# mkdir /project2
  [root@manager ~]# touch /project2/ansible.cfg
  [root@manager project1]# ansible --version
  ansible 2.8.5
    config file = /root/project2/ansible.cfg
    configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
    ansible python module location = /usr/lib/python2.7/site-packages/ansible
    executable location = /usr/bin/ansible
    python version = 2.7.5 (default, Oct 30 2018, 23:45:53) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
  配置選項詳解
  6.ansibleinventory主機清單
  1)基于ip地址+密碼的方式
  [root@manager project1]# vim hosts
  [webservers]#定義組名
  172.16.1.7 ansible_ssh_user='root' ansible_ssh_pass='1'
  172.16.1.8 ansible_ssh_user='root' ansible_ssh_pass='1'
  2)基于密鑰的方式
  1.創(chuàng )建密鑰
  [root@manager ~]# mkdir .ssh     #創(chuàng )建密鑰所需要存放的目錄
  [root@manager ~]# ssh-keygen -t rsa -b 4096#生成密鑰,一路回車(chē)
  2.將公鑰推送至對端主機
  [root@manager ~]#  ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.7
  [root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.8
  3.配置組
  [root@manager project1]# vim hosts
  [webservers]
  172.16.1.7
  172.16.1.8
  3)場(chǎng)景三,主機組使用方式
  3.場(chǎng)景三、主機組使用方式 
  [lbservers] #定義lbservers組 
  172.16.1.5 172.16.1.6
  [webservers] #定義webserver組 
  172.16.1.7 172.16.1.8
  [servers:children]  #定義servers組包括兩個(gè)子組[lbservers,webserver] 
  lbservers webserver
  4)查看組所有信息
  [root@manager project1]# ansible all --list-host -i hosts
    hosts (2):
      172.16.1.7
      172.16.1.8
  Ansible常用模塊
  1.什么是ad-hoc
  ad-hoc簡(jiǎn)而言之就是臨時(shí)命令,執行完就結束,不會(huì )保存。
  2.ad-hoc模式的使用場(chǎng)景
  多臺主機查看某個(gè)進(jìn)程是否啟動(dòng),或拷貝指定文件到本地。
  3.ad-hoc模式命令的使用
  ansible oldboy -m command -a 'df -h'
  4.使用ad-hoc執行一次遠程命令,注意觀(guān)察返回結果的顏色
  綠色:代表被管理端主機沒(méi)有被修改。
  黃色:代表被管理端主機修改成功。
  橘紅色:代表出現了故障。
  5.ansible模塊
  command#執行命令默認不支持管道
  shell#執行命令支持管道
  yum_reposity#yum倉庫配置
  yum#yum安裝軟件
  get_url#和liunx的 wget 一致
  copy#拷貝配置文件
  server|systemd#啟動(dòng)服務(wù)
  user#創(chuàng )建用戶(hù)
  group#創(chuàng )建組
  file#創(chuàng )建目錄、創(chuàng )建文件、遞歸授權
  mount#掛載
  cron#定時(shí)任務(wù)
  firewalld#防火墻
  selinux#selinux
  command
  ansible webservers -a "ps axu|grep nginx" -i hosts  #不支持管道(簡(jiǎn)單命令、單條命令)
  shell
  ansible webservers -m shell -a "ps axu|grep nginx" i hosts  #支持管道
  yum
  state:
  present安裝
  absent卸載
  latest最新
  enablerepo#指定使用某個(gè)倉庫
  disablerepo#指定排除某個(gè)倉庫
  #1.安裝最新的httpd服務(wù),排除webtatic-php該倉庫
  [root@manager project1]# ansible webserver -m yum -a "name=httpd state=latest disablerepo=webtatic-php" -i hosts
  #2.移除httpd服務(wù)
  [root@manager project1]# ansible webserver -m yum -a "name=httpd state=absent" -i hosts
  #3.安裝httpd指定從某個(gè)倉庫安裝
  [root@manager project1]# ansible webserver -m yum -a "name=httpd state=latest enablerepo=testing" -i hosts
  #4.通過(guò)url方式進(jìn)行安裝
  [root@manager project1]# ansible webservers -m yum -a "name=https://mirrors.aliyun.com/zabbix/zabbix/3.0/ rhel/7/x86_64/zabbix-agent-3.0.0-1.el7.x86_64.rpm state=present disablerepo=webtatic-php" -i hosts
  #5.通過(guò)軟件包安裝
  - name: install nginx rpm from a local file  (軟件包 必須在被控端主機) [root@manager project1]# ansible webservers -m yum -a "name=/root/zabbix-agent-4.0.0-2.el7.x86_64.rpm  state=present disablerepo=webtatic-php" -i hosts
  copy
  src#本地路徑,可以是相對,可以是絕對
  dest#目標位置
  owner#屬主
  group#屬組
  mode#權限
  backup#備份
  #拷貝本地文檔到對端主機
  [root@manager project1]# ansible webservers -m copy -a "src=./file/ansible.oldxu.com.conf dest=/etc/nginx/conf.d/ansible.oldxu.com.conf owner=root group=root mode=644" -i hosts
  #拷貝本地文檔到對端主機,并備份源文件
  [root@manager project1]# ansible webservers -m copy -a "src=./file/ansible.oldxu.com.conf dest=/etc/nginx/conf.d/ansible.oldxu.com.conf owner=root group=root mode=644 backup=yes" -i hosts
  service/systemd
  state
  started#啟動(dòng)
  stopped#停止
  restarted#重啟
  reloaded#重載
  
  enabled#是否開(kāi)機自啟
  yes#是
  no#否
  
  [root@manager project1]# ansible webservers -m systemd -a "name=nginx state=restarted enabled=yes" -i hosts
  file
  #創(chuàng )建 /code/ansible
  path#路徑
  state
  touch#創(chuàng )建文件
  directory#創(chuàng )建目錄
  owner#屬主
  group#屬組
  mode#權限
  #準備站點(diǎn)
  [root@manager project1]# ansible webservers -m file -a "path=/code/ansible state=directory mode=755 owner=www group=www" -i hosts
  #準備站點(diǎn)代碼
  [root@manager project1]# ansible webservers -m copy -a "src=./file/index.html dest=/code/ansible/index.html owner=www group=www mode=644" -i hosts
  user group
  [root@manager project1]# ansible webservers -m group -a  "name=www gid=666 state=present" -i hosts
  #user
  name#名稱(chēng)
  uid#uid
  group#組名或gid
  create_home#是否創(chuàng )建家目錄
  system#是否作為系統組
  shell#登錄shell
  state#狀態(tài)
  present創(chuàng )建默認
  absent刪除
  remove#加上remove清除家目錄
  groups#附加組
  append#
  password#創(chuàng )建密碼
  # 程序使用    www    666 666 /sbin/nologin    /home  -->無(wú) 
  [root@manager project1]# ansible webservers -m user -a "name=www uid=666 group=666 create_home=no shell=/sbin/nologin state=present" -i hosts
  # 正常用戶(hù)    oldxu  1000 1000 /bin/bash   /home/oldxu 
  [root@manager project1]# ansible webservers -m user -a "name=oldxu" -i hosts
  # 移除oldxu用戶(hù),并刪除家目錄所有內容. 
  [root@manager project1]# ansible webservers -m user -a "name=oldxu state=absent remove=yes" -i hosts
  # 創(chuàng )建 other用戶(hù).有兩個(gè)附加組root bin,創(chuàng )建家目錄,指定登錄 shell,設定密碼123
  #生成一個(gè)密碼 
  ansible all -i localhost, -m debug -a "msg={{ '123' | password_hash('sha512', 'mysecretsalt') }}"
  [root@manager project1]# ansible webservers -m user -a 'name=other groups='root,bin' create_home=yes shell=/bin/bash password="$6$mysecretsalt$gIIYs0Xgc7sSQkH.zKaz8/Afa MomYzR1QZYtccwmJcUt8VpLq4D055UCCX4MlwgePOP80ZRwhppv BF72RIAVi/"' -i hosts
  mount
  #提前準備好nfs服務(wù)端 
  [root@web01 ~]# showmount -e 172.16.1.31 
  Export list for 172.16.1.31: 
  /data/zrlog 172.16.1.0/24 
  /data/zh    172.16.1.0/24 
  /data/edu   172.16.1.0/24
  /data/blog  172.16.1.0/24
  #用管理端操作被控端,讓被控端掛載nfs存儲數據 
  present     #寫(xiě)入/etc/fstab 
  absent      #卸載/etc/fstab
  mounted     #臨時(shí)掛載 
  unmounted   #卸載當前掛載
  #掛載過(guò)程中,如果目錄不存在,則會(huì )創(chuàng )建該目錄 
  [root@manager project1]# ansible webservers -m mount -a "src=172.16.1.31:/data/zrlog path=/test_zrlog fstype=nfs opts=defaults state=mounted" -i hosts
  #卸載過(guò)程中,會(huì )把該目錄刪除
  [root@manager project1]# ansible webservers -m mount -a "src=172.16.1.31:/data/zrlog path=/test_zrlog fstype=nfs opts=defaults state=unmounted" -i hosts
  錯誤實(shí)例:
  [root@manager project1]# ansible webservers -m mount -a "src=172.16.1.31:/data/blog fstype=nfs opts=defaults state=mounted" -i hosts
  172.16.1.7 | FAILED! => {
      "ansible_facts": {
          "discovered_interpreter_python": "/usr/bin/python"
      }, 
      "changed": false, 
      "msg": "missing required arguments: path"
  }
  172.16.1.8 | FAILED! => {
      "ansible_facts": {
          "discovered_interpreter_python": "/usr/bin/python"
      }, 
      "changed": false, 
      "msg": "missing required arguments: path"
  }
  cron
  minute      #分 
  hour        #時(shí) 
  day         #日 
  month       #月 
  week        #周 
  job         #執行任務(wù)的命令
  #增加定時(shí)任務(wù)
  [root@manager project1]# ansible webservers -m cron -a 'name=test_job minute=00 hour=02 job="/bin/bash /server/scripts/client_to_data_server.sh &>/dev/null"' -i hosts
  #移除定時(shí)任務(wù)
  [root@manager project1]#  ansible webservers -m cron -a 'name=test  job="/bin/bash /server/scripts/test.sh &>/dev/null" state=absent' -i hosts
  firewalld
  1.開(kāi)啟防火墻
  [root@manager project1]# ansible webservers -m systemd -a "name=firewalld state=started" -i hosts
  2.針對服務(wù)
  [root@manager project1]# ansible webservers -m firewalld -a "service=http state=enabled" -i hosts
  3.針對端口
  [root@manager project1]# ansible webservers -m firewalld -a "port=9999/tcp state=enabled" -i hosts
  4.針對source來(lái)源
  [root@manager project1]# ansible webservers -m firewalld -a "source=172.16.1.0/24 state=enabled permanent=yes" -i hosts
  172.16.1.8 | CHANGED => {
      "ansible_facts": {
          "discovered_interpreter_python": "/usr/bin/python"
      }, 
      "changed": true, 
      "msg": "Permanent operation, Added 172.16.1.0/24 to zone public"
  }
  172.16.1.7 | CHANGED => {
      "ansible_facts": {
          "discovered_interpreter_python": "/usr/bin/python"
      }, 
      "changed": true, 
      "msg": "Permanent operation, Added 172.16.1.0/24 to zone public"
  }
  5.針對rule
  [root@manager project1]# ansible webservers -m firewalld -a 'rich_rule="rule family=ipv4 source address=10.0.0.1/32 service name=http accept" state=enabled' -i hosts
  selinux
  [root@manager project1]# ansible webservers -m selinux -a "state=disabled" -i hosts
  本文內容不用于商業(yè)目的,如涉及知識產(chǎn)權問(wèn)題,請權利人聯(lián)系51Testing小編(021-64471599-8017),我們將立即處理
《2024軟件測試行業(yè)從業(yè)人員調查問(wèn)卷》,您的見(jiàn)解,行業(yè)的聲音!

關(guān)注51Testing

聯(lián)系我們

快捷面板 站點(diǎn)地圖 聯(lián)系我們 廣告服務(wù) 關(guān)于我們 站長(cháng)統計 發(fā)展歷程

法律顧問(wèn):上海蘭迪律師事務(wù)所 項棋律師
版權所有 上海博為峰軟件技術(shù)股份有限公司 Copyright©51testing.com 2003-2024
投訴及意見(jiàn)反饋:webmaster@51testing.com; 業(yè)務(wù)聯(lián)系:service@51testing.com 021-64471599-8017

滬ICP備05003035號

滬公網(wǎng)安備 31010102002173號

久久无码人妻精品一区二_久久亚洲春色中文字幕_亚洲艳妇自拍视频_亚洲中文字幕乱码少妇饥渴