<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          任務中心之Ansible基礎篇

          共 10804字,需瀏覽 22分鐘

           ·

          2021-12-01 19:12

          • Ansible基礎篇與Ansible進階篇主要是為了可以更好的理解基于AnsibleAPI二次開發(fā)?任務中心?而做的墊鋪,并非官方使用文檔,其中可能會有些許遺漏,如有不足之處,歡迎拍磚指正,謝謝。
          • 基于AnsibleAPI二次開發(fā)任務中心已經開發(fā)完成,并且已經投入生產使用,后續(xù)會把詳細的設計思路與具體使用技術架構分享給大家,敬請期待。
          • 本文可以幫助沒有使用過Ansible的同學從0到1的學習Ansible,引領大家循序漸進的系統(tǒng)學習Ansible,編寫高效的ansible-playbook,將Ansible的高級功能以及特性發(fā)揮到淋漓盡致。
          • 在后續(xù)的Ansible進階篇中,我會將完整生產實踐的ansible-playbook案例分享給廣大同學。

          ansible 簡介:

          Anasible 是基于Python2-Paramiko 模塊開發(fā)的自動化維護工具,實現(xiàn)了批量系統(tǒng)配置、部署、運行等功能。Ansible是基于模塊工作的,本身不具備批量部署的功能,如果想要實現(xiàn)批量自動化部署,是Ansible自身的各種模塊的集合。

          可以與 Ansible 同臺競技的運維工具( pupet、cfengine、chef、func、fabric、saltstack )

          • Ansible 發(fā)展史

            • ansible 作者:?Michael DeHaan?同時他也是?Cobbler 與 Func?作者。
            • 2012-03-09 發(fā)布 0.0.1 版本。
            • 2015-10-17 被?Red Hat?收購。
            • GitHub
          • ansible 特性

            • Python 開發(fā)
            • 模塊化: 調用特定的模塊(如: Paramiko、PyYAML、jinja2 等), 完成特定的任務。
            • 自定義模塊
            • 簡單部署
            • 支持編排任務(PlayBook)
            • 冥等性: 任務重復執(zhí)行等于只執(zhí)行一次, 不會重復執(zhí)行多次相同命令。
            • 支持多語言編寫模塊
            • YAML 格式編排任務,支持豐富的數(shù)據(jù)結構.

          Ansible 架構與執(zhí)行流程

          ansible-arch

          ansible-flow

          ansible?主要組成部分:

          • Users:?管理 Ansible Playbook 和 Ansible 引擎。
          • Ansible playbook:?Ansible 引擎和CMDB做交互。
          • Public or Private cloud:?便于所有模塊 和 API 以及云的交互。
          • Inventory:?Ansible 執(zhí)行主機的列表清單,默認讀取配置為/etc/ansible/hosts。
          • API:?提供端到端交互的API接口。
          • Modules:?Ansible 執(zhí)行命令的功能模塊, 一般為 Ansible 內置模塊, 也可以自定義第三方模塊。
          • Plugins:?用于補充模塊的功能,可以自行編寫插件。

          Ansible 安裝

          #?Centos
          yum?-y?install?ansible

          #?Ubuntu
          apt?install?-y?ansible

          #?源碼安裝
          git?clone?https://github.com/ansible/ansible?

          #?使用?pip?命令安裝
          pip?install?ansible

          Ansible 配置說明:

          /etc/ansible/ansible.cfg?主配置文件, 配置ansible的工作特性.

          /etc/ansible/hosts?主機列表清單.

          /etc/ansible/roles/?存放(roles)角色的目錄.

          /usr/local/bin/ansible?二進制執(zhí)行文件,?ansible?主程序.

          /usr/local/bin/ansilbe-doc?配置文檔, 模塊功能查看工具.

          /usr/local/bin/ansible-galaxy?用于上傳/下載?roles?模塊到官方平臺的工具.

          /usr/local/bin/ansible-playbook?自動化任務、編排劇本工具/usr/bin/ansible-pull?遠程執(zhí)行命令的工具.

          /usr/local/bin/ansible-vault?文件(如: playbook 文件) 加密工具.

          /usr/local/bin/ansible-console?基于 界面的用戶交互執(zhí)行工具.

          /etc/ansible/hosts

          ?

          創(chuàng)建SSH秘鑰

          ?

          ssh-keygen -t rsa -C "deniss.wang"

          ?

          拷貝公鑰到其他被服務器

          ?

          ssh-copy-id -i ubuntu@ubuntu20-bj01

          hosts

          [codo-cluster]
          demo.opendevops.cn?ansible_ssh_user=root
          www.opendevops.cn?ansible_ssh_user=root
          [k3s-cluster]
          ubuntu20-bj01?ansible_user=ubuntu
          ubuntu20-bj02?ansible_user=ubuntu
          ubuntu20-bj03?ansible_user=ubuntu
          ubuntu20-sh04?ansible_user=ubuntu

          -m?指定模塊執(zhí)行。如:ping、yum、copy、file等,此處使用模塊ping測試。

          -k?使用密碼方式,默認是使用SSH-KEY登錄。

          基本示例:

          #?ansible?通過?單主機進行操作?(?-k?為用戶密碼方式,?默認為?ssh-key?)
          ansible?10.0.8.2?-m?ping?-k

          #?ansible?通過?':'?組合進行操作
          ansible?"10.0.8.2:10.0.8.3"?-m?ping?-k

          #?ansible?通過?通配符加主機?進行操作
          ansible?10.0.8.*?-m?ping?-k

          #?ansible?通過?hosts?組名稱?進行操作
          ansible?codo?-m?ping?-k

          #?ansible?通過?':'?組合組進行操作
          ansible?'codo-cluster:k3s-cluster'?-m?ping?-k

          #?ansible?通過?通配符?進行操作
          ansible?'*-cluster'?-m?ping?-k

          #?ansible?通過?':&'?邏輯與?(兩個組中都包含的主機)
          ansible?'codo-cluster:&k3s-cluster'?-m?ping?-k

          #?ansible?通過?':!'?邏輯非?(codo-cluster?但不在?k3s-cluster的主機)
          ansible?'codo-cluster:!k3s-cluster'?-m?ping?-k

          #?ansible?也支持多邏輯的組合
          ansible?'webservers:dbserver:&appserver:!ftpservers'?-m?ping?-k

          #?ansible?也支持正則表達式
          ansible?'~(codo|k3s)-cluster'?-m?ping?-k

          #?ansible?通過?all?對?hosts?清單下所有主機進行操作
          ansible?all?-m?ping?-k

          #?ansible?通過?通配符?對?hosts?清單下所有主機進行操作
          ansible?'*'?-m?ping?-k

          執(zhí)行結果:

          #?ansible?k3s?-m?'ping'?????????????????????????????????????????????????????????????????????????????????????
          ubuntu20-bj03?|?SUCCESS?=>?{
          ????"ansible_facts":?{
          ????????"discovered_interpreter_python":?"/usr/bin/python"
          ????},
          ????"changed":?false,
          ????"ping":?"pong"
          }
          ubuntu20-bj02?|?SUCCESS?=>?{
          ????"ansible_facts":?{
          ????????"discovered_interpreter_python":?"/usr/bin/python"
          ????},
          ????"changed":?false,
          ????"ping":?"pong"
          }
          ubuntu20-bj01?|?SUCCESS?=>?{
          ????"ansible_facts":?{
          ????????"discovered_interpreter_python":?"/usr/bin/python"
          ????},
          ????"changed":?false,
          ????"ping":?"pong"
          }
          ubuntu20-sh04?|?SUCCESS?=>?{
          ????"ansible_facts":?{
          ????????"discovered_interpreter_python":?"/usr/bin/python"
          ????},
          ????"changed":?false,
          ????"ping":?"pong"
          }

          /etc/ansible/ansible.cfg

          #?defaults?為默認配置
          [defaults]

          #?主機清單的路徑,?默認為如下
          #?inventory?=?/etc/ansible/hosts

          #?模塊存放的路徑?
          #?library?=?/usr/share/my_modules/

          #?utils?模塊存放路徑
          #?module_utils?=?/usr/share/my_module_utils/

          #?遠程主機腳本臨時存放目錄
          #?remote_tmp?=?~/.ansible/tmp

          #?管理節(jié)點腳本臨時存放目錄?
          #?local_tmp?=?~/.ansible/tmp

          #?插件的配置文件路徑
          #?plugin_filters_cfg?=?/etc/ansible/plugin_filters.yml

          #?執(zhí)行并發(fā)數(shù)
          #?forks?=?5

          #?異步任務查詢間隔?單位秒
          #?poll_interval??=?15

          #?sudo?指定用戶
          #?sudo_user?=?root

          #?運行?ansible?是否提示輸入sudo密碼
          #?ask_sudo_pass?=?True

          #?運行?ansible?是否提示輸入密碼?同?-k
          #?ask_pass?=?True

          #?遠程傳輸模式
          #?transport?=?smart

          #?SSH?默認端口
          #?remote_port?=?22

          #?模塊運行默認語言環(huán)境
          #?module_lang?=?C

          #?roles?存放路徑
          #?roles_path?=?/etc/ansible/roles

          #?不檢查?/root/.ssh/known_hosts?文件?建議取消
          #?host_key_checking?=?False

          #?ansible?操作日志路徑?建議打開
          #?log_path?=?/var/log/ansible.log

          ansible執(zhí)行過程

          1. load配置文件 /etc/ansible/ansible.cfg

          2. Load 模塊配置文件

          3. 通過 Ansible 將調用的模塊或PlayBook生成對應的臨時 py文件, 并將該臨時文件傳輸至遠程服務器的對的執(zhí)行用戶目錄下?$HOME/.ansible/tmp/ansible-tmp-2123/xxxxxxx.py?>文件.

          4. 對生成的文件添加可執(zhí)行權限.

          5. 執(zhí)行生成文件,并返回對應的結果.

          6. 刪除生成文件,退出.

            執(zhí)行返回狀態(tài):

            • 綠色:執(zhí)行成功,無更改操作。如 ping模塊
            • 黃色:執(zhí)行成功,更新過主機的操作。如執(zhí)行shell模塊執(zhí)行ifconfig命令。
            • 紅色:執(zhí)行失敗返回結果。如FAILED、UNREACHABLE狀態(tài)。

          Ansible-Doc

          顯示幫助信息

          使用參數(shù):

          -l --list?顯示可用模塊

          -s --snippet?顯示指定模塊的?playbook?階段

          Demo

          #?Demo
          ansible-doc?-l
          #?...略過
          ansible-doc?ping
          #?模塊ping顯示文檔
          ansible-doc?-s?ping

          Ansible

          ansible [-m module_name] [-a args]

          • host-pattern: 主機ip、主機名、主機組。
          • module_name: 模塊的名稱。默認為?-m command?。
          • args: 模塊的參數(shù), 需要加上?-a?進行指定模塊的參數(shù)。如: `ansible all -a ‘hostname’
          • -v、-vv、-vvv: 顯示詳細的命令輸出日志, v 越多越詳細。如:?ansible all -m ping -vvv
          • --list: 顯示主機的列表。如:?ansible all --list
          • -k / --ask-pass: 提示輸入ssh連接密碼, 默認為 ssh-key 認證。如:?ansible all -m ping -k
          • -K / --ask-become-pass: 提示輸入 sudo 的密碼。
          • -C / --check: 檢查命令操作, 并不會執(zhí)行。如:?ansible all -m ping -C
          • -T / --timeout: 執(zhí)行命令的超時時間, 默認為 10s。如:?ansible all -m ping -T=2
          • -u / --user: 執(zhí)行遠程操作的用戶. 如:?ansible all -m ping -u=root
          • -b / --become: 代替舊版的?sudo?切換。

          ansible 常用模塊

          ?

          截止 2021-10-12 ansible 模塊為 6006 個. 不可謂不強大!人生苦短,我用Python!


          command 模塊

          在遠程主機上執(zhí)行命令, 支持條件判斷. ansible 默認模塊, 可忽略?-m?參數(shù)直接操作.

          注意:?command?模塊 不支持?$VARNAME?<?>?|?;?&?等符號.

          Demo

          #?停止docker服務

          ansible?k3s-cluster?-m?command?-a?'systemctl?stop?docker'

          #?查看所有docker鏡像

          ansible?k3s-cluster?-a?'docker?ps?-a'

          #?如果?/opt/ansible?不存在?就不執(zhí)行?df?-h?操作,?如果?/opt/ansible?存在,?就執(zhí)行?df?-h?操作.

          ansible?k3s-cluster?-a?'removes=/mnt/ansible?df?-h'


          #?如果?/opt/ansible?不存在?就執(zhí)行?df?-h?操作,?如果存在?/opt/ansible?就不執(zhí)行?df?-h?操作.

          ansible?k3s-cluster?-a?'creates=/mnt/ansible?df?-h'

          #?切換目錄,?等同于?cd?/mtn?&&?ls?-lt?操作

          ansible?k3s-cluster?-a?'chdir=/mnt?ls?-lt'


          shell 模塊

          shell?模塊: shell 模塊支持 command 所有的操作, 而且支持?$VARNAME?<?>?|?;?&?等符號操作.

          Demo:

          #?查看docker進程
          ansible?k3s-cluster?-m?shell?-a?'ps?-ef|grep?docker'

          scripts 模塊

          script?模塊: 執(zhí)行腳本. 只需要調用 ansible 的宿主機存放的腳本文件就可以在選擇主機上面執(zhí)行腳本.

          Demo

          #?shell
          cat?/tmp/deniss.sh???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
          #!/bin/bash
          echo?"測試?shell"
          ansible?k3s-cluster?-m?script?-a?'/tmp/deniss.sh'

          #?python
          cat?/tmp/deniss.py
          #!/usr/bin/python
          import?sys

          print?('Deniss_Wang'?)
          print?(sys.version)
          ansible?k3s-cluster?-m?script?-a?'/tmp/deniss.py'

          #?其他腳本也是可以的,只需要配置好環(huán)境語言解釋即可。?

          copy 模塊

          copy?模塊: 復制ansible宿主機文件到目標主機.

          Demo

          #?src=""?宿主機路徑?dest=""?目標主機路徑?backup=yes?如果目標主機文件存在,?會備份,?再覆蓋.
          ansible?k3s-cluster?-m?copy?-a?‘src=/tmp/deniss.py?dest=/tmp/deniss.py?backup=yes

          #?mode=""?修改權限,?owner=""?修改用戶,?group=""?修改用戶組
          ansible?k3s-cluster?-m?copy?-a?'src=/root/deniss.py?dest=/root/deniss.py?mode=0644?owner=deniss?group=deniss'

          #?content=""?將內容寫入到目標文件中
          ansible?k3s-cluster?-m?copy?-a?'content="hello\nworld\n"?dest=/tmp/deniss.txt'

          Fetch 模塊

          fetch?模塊: 將目標遠程主機的文件, 下載到本地, 下載成功會存放在以 IP/NAME的目錄中, 包含原文件的整體路徑.

          注意:只能下載單個文件, 不支持目錄, 想下載完整路徑,可以壓縮后在下載。

          Demo

          #?src=""?目標遠程主機的文件路徑?dest=""?本地目錄
          ansible?k3s-cluster?-m?fetch?-a?'src=/var/log/syslog?dest=/tmp/'

          file 模塊

          file?模塊: 操作遠程目標主機的文件. 如:?touch、?absent?等.

          Demo

          #?mode=""?修改權限?owner=""?修改用戶?group=""?修改用戶組?recurse=yes?遞歸授權
          ansible?k3s-cluster?-m?file?-a?'name=/tmp/deniss.txt?owner=ubuntu?group=ubuntu?mode=0755?recurse=yes'

          #?dest、name、path:?指定遠程主機的文件路徑,state:?文件操作類型,默認為?absent,touch:?創(chuàng)建空文件.?
          ansible?k3s-cluster?-m?file?-a?'name=/tmp/deniss.txt?state=touch'

          #?directory:?創(chuàng)建文件夾,?absent:?遞歸刪除文件夾/文件,link:?創(chuàng)建軟連接.
          ansible?k3s-cluster?-m?file?-a?'src=/tmp/deniss.txt?dest=/tmp/deniss.link?state=link'

          Cron 模塊

          cron?模塊: 為遠程主機添加定時任務

          • day: 表示 天. 支持 ( 1-31, *, */2 ) 寫法
          • hour: 表示 小時. 支持 ( 0-23, *, */2 ) 寫法
          • minute: 表示 分鐘. 支持 ( 0-59, *, */2 ) 寫法
          • month: 表示 月. 支持 ( 1-12, *, */2 ) 寫法
          • weekday: 表示 星期. 支持 ( 0-6, Sunday-Saturday, * )寫法
          • job: 表示 計劃任務的內容.
          • name: 表示 計劃任務名稱. 相同的計劃任務名稱會覆蓋.

          Demo

          #?day:?表示?天.?支持?(?1-31,?*,?*/2?)?寫法
          #?hour:?表示?小時.?支持?(?0-23,?*,?*/2?)?寫法
          #?minute:?表示?分鐘.?支持?(?0-59,?*,?*/2?)?寫法
          #?month:?表示?月.?支持?(?1-12,?*,?*/2?)?寫法
          #?weekday:?表示?星期.?支持?(?0-6,?Sunday-Saturday,?*?)寫法
          #?job:?表示?計劃任務的內容.
          #?name:?表示?計劃任務名稱.?相同的計劃任務名稱會覆蓋.
          ansible?k3s-cluster?-m?cron?-a?'weekday=1-5?job="echodate>>?/tmp/1.txt"?name=echocron'

          #?disabled=?(true/false、yes/no)注釋掉計劃任務?關閉、啟動計劃任務?必須指定job和name.
          ansible?k3s-cluster?-m?cron?-a?'disabled=true?job="echodate>>?/root/1.txt"?name=echocron'

          # state=absent 刪除計劃任務。
          ansible?k3s-cluster?-m?cron?-a?'name=echocron?state=absent'

          Yum 模塊

          yum?模塊: 利用 yum 操作軟件包, 如 安裝、查詢、卸載等.

          Demo

          # name:?軟件包的名稱, 或者rpm包, 遠程服務器必須存在 rpm 包. 安裝多個軟件使用 ,號隔開. 如 name=nginx,php,mysql

          #?state="present/installed/absent/removed"
          #?present、installed:?安裝軟件.
          #?absent、removed:?卸載/刪除軟件.
          #?update_cache=yes:?更新?yum?緩存后?在安裝軟件?disable_gpg_check=yes:?禁用?gpg?檢查.
          ansible?k3s-cluster?-m?yum?-a?'name=mysql?state=present'
          ansible?k3s-cluster?-m?yum?-a?'name=/tmp/nginx-xx.x.x-x.x.x86_64.rpm'
          ansible?k3s-cluster?-m?yum?-a?'name=nginx?update_cache=yes?disable_gpg_check=yes'

          #?list="updates/installed/available/repos"?指定獲取狀態(tài)
          #?狀態(tài)釋義:?installed:?已安裝的軟件?updates:?可以升級的軟件?available:?可以安裝的軟件?repos:?yum?源
          ansible?k3s-cluster?-m?yum?-a?'list=installed'

          Service 模塊

          service: 軟件服務管理模塊. 啟動、關閉、重啟 等操作.

          #?name="",安裝名字?
          #?state="started/stopped/restarted/reloaded"?啟動、停止、重啟、重載
          #?enable="yes/no、true/false"?設置是否開機自啟
          ansible?k3s-cluster?-m?service?-a?'name=nginx?state=started?enabled=yes'

          User 模塊

          user: 管理系統(tǒng)用戶的模塊

          Demo

          #?name""?用戶名
          #?shell=""?指定用戶的shell類型
          #?system="yes/no"?指定是否為?系統(tǒng)用戶
          #?home=""?指定用戶額外的home目錄,?默認/home/user?.
          #?groups=""?用戶額外的?groups?組.
          #?uid=""?指定用戶的UID.
          #?comment=""?用戶描述
          ansible?k3s-cluster?-m?user?-a?'name=deniss?shell=/sbin/nologin?system=yes?home=/tmp/deniss?groups=root?uid=777?comment="deniss?user"'
          #?state="present/absent"?
          #?present:?創(chuàng)建用戶?(默認為present)?absent:?刪除用戶
          ansible?k3s-cluster?-m?user?-a?'name=deniss?state=absent?remove=yes'
          ansible?k3s-cluster?-m?user?-a?'name=nginx?state=absent?remove=yes'

          Group 模塊

          group: 管理系統(tǒng)用戶組的模塊.

          Demo

          #?name""?用戶名
          #?system="yes/no"?指定是否為?系統(tǒng)用戶
          #?home=""?指定用戶額外的home目錄,?默認/home/user?.
          #?gid=""?指定GID.
          #?state="present/absent"?
          #?present:?創(chuàng)建用戶組?(默認為present)?absent:?刪除用戶組
          #?創(chuàng)建
          ansible?all?-m?group?-a?'name=deniss?system=yes?gid=777'
          #?刪除
          ansible?all?-m?group?-a?'name=deniss?state=absent'

          ansible-galaxy

          官網 https://galaxy.ansible.com/

          ansible-galaxy 工具用于下載對應的roles

          # list 查看本地的 roles 角色。
          ansible-galaxy?list?geerlingguy.nginx

          # install 下載 roles 角色存放到$HOME/.ansible/roles/目錄下。
          ansible-galaxy?install?geerlingguy.nginx

          # remove 刪除已下載的 roles 角色,也可以在存放目錄中刪除。
          ansible-galaxy?remove?geerlingguy.nginx

          附上幾張已經開發(fā)完成的任務中心截圖,歡迎拍磚!





          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品视频一线二线三线 | 一级黄片在线看 | 可以免费看的黄色视频网站 | 欧美成人视频18 | 日韩无码AV片 |