運維自動化發展歷程及技術應用 IaaS基礎設施即服務(相當於賣硬體) ,PaaS平臺即服務(賣操作系統),SaaS軟體即服務(賣軟體) 企業實際應用場景分析 灰度環境(生產環境的一部分) 功能:在全量發佈代碼前將代碼的功能面向少量精準用戶發佈的環境,可基於主機或用戶執行灰度發佈 案例:共100台生產 ...
運維自動化發展歷程及技術應用 IaaS基礎設施即服務(相當於賣硬體) ,PaaS平臺即服務(賣操作系統),SaaS軟體即服務(賣軟體) 企業實際應用場景分析 灰度環境(生產環境的一部分) 功能:在全量發佈代碼前將代碼的功能面向少量精準用戶發佈的環境,可基於主機或用戶執行灰度發佈 案例:共100台生產伺服器,先發佈其中的10台伺服器,這10台伺服器就是灰度伺服器 灰度環境:往往該版本功能變更較大,為保險起見特意先讓一部分用戶優化體驗該功能,待這部分用戶使用沒有重大問題的時候,再全量發佈至所有伺服器 程式發佈 程式發佈要求: 不能導致系統故障或造成系統完全不可用 不能影響用戶體驗 預發佈驗證: 新版本的代碼先發佈到伺服器(跟線上環境配置完全相同,只是未接入到調度器) 灰度發佈: 基於主機,用戶,業務 發佈路徑: /webapp/tuangou /webapp/tuangou-1.1 /webapp/tuangou-1.2 發佈過程:在調度器上下線一批主機(標記為maintanance狀態) --> 關閉服務 --> 部署新版本的應用程式 --> 啟動服務 --> 在調度器上啟用這一批伺服器 自動化灰度發佈:腳本、發佈 常用自動化運維工具 Ansible:python,Agentless,中小型應用環境 (管理上百台機器) 利用ssh協議遠程來進行管理,基於key驗證,把管理者的公鑰傳到被管理的主機上去, Saltstack:python,一般需部署agent(代理),執行效率更高 (管理上千台機器) Puppet:ruby, 功能強大,配置複雜,重型,適合大型環境 (管理上百台機器) Fabric:python,agentless Chef: ruby,國內應用少 Cfengine func Ansible簡介 Ansible是一個簡單的自動化運維管理工具,基於Python語言實現,由ParamikoPyYAML兩個關鍵模塊構建,可用於自動化部署應用、配置、編排task(持續交付、無宕機更等)。 Ansible官網:https://www.ansible.com/ github地址:https://github.com/Ansible 特性 模塊化:調用特定的模塊,完成特定任務,一千多個模塊 有Paramiko,PyYAML,Jinja2(模板語言)三個關鍵模塊 支持自定義模塊 基於Python語言實現 部署簡單,基於python和SSH(預設已安裝)免代理,agentless 安全,基於OpenSSH 支持playbook編排任務 冪等性:一個任務執行1遍和執行n遍效果一樣,不因重覆執行帶來意外情況 無需代理不依賴PKI(無需ssl) 可使用任何編程語言寫模塊 AML格式,編排任務,支持豐富的數據結構 較強大的多層解決方案 Ansible主要組成部分 1:ANSIBLE PLAYBOOKS:任務劇本(任務集),編排定義Ansible任務集的配置文件,由Ansible順序 依次執行,通常是JSON格式的YML文件 2:INVENTORY:Ansible管理主機的清單/etc/ansible/hosts 3:MODULES:Ansible執行命令的功能模塊,多數為內置核心模塊,也可自定義 4:PLUGINS:模塊功能的補充,如連接類型插件、迴圈插件、變數插件、過濾插件等,該功能不常用 5:API:供第三方程式調用的應用程式編程介面 6:ANSIBLE:組合INVENTORY、API、MODULES、PLUGINS的綠框,可以理解為是ansible命令工 具,其為核心執行工具 7:Ansible命令執行來源: U7SER,普通用戶,即SYSTEM ADMINISTRATOR CMDB(配置管理資料庫) API 調用 PUBLIC/PRIVATE CLOUD API調用 USER-> Ansible Playbook -> Ansibile 8:利用ansible實現管理的方式: Ad-Hoc 即ansible命令,主要用於臨時命令使用場景 Ansible-playbook 主要用於長期規劃好的,大型項目的場景,需要有前提的規劃 9:Ansible-playbook(劇本)執行過程: 將已有編排好的任務集寫入Ansible-Playbook 通過ansible-playbook命令分拆任務集至逐條ansible命令,按預定規則逐條執行 10:Ansible主要操作對象: HOSTS主機 NETWORKING網路設備 11:註意事項 執行ansible的主機一般稱為主控端,中控,master或堡壘機 主控端Python版本需要2.6或以上 被控端Python版本小於2.4需要安裝python-simplejson 被控端如開啟SELinux需要安裝libselinux-python windows不能做為主控端 安裝 rpm包安裝: EPEL源 yum install ansible 編譯安裝: yum -y install python-jinja2 PyYAML python-paramiko python-babel python-crypto tar xf ansible-1.5.4.tar.gz cd ansible-1.5.4 python setup.py build python setup.py install mkdir /etc/ansible cp -r examples/* /etc/ansible Git方式: git clone git://github.com/ansible/ansible.git --recursive cd ./ansible source ./hacking/env-setup pip安裝: pip是安裝Python包的管理器,類似yum yum install python-pip python-devel yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel pip install --upgrade pip pip install ansible --upgrade 確認安裝: ansible --version 配置文件 /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性,(軟連接指向新版本,方便) /etc/ansible/hosts 主機清單 , /etc/ansible/roles/ 存放角色的目錄 程式 /usr/bin/ansible 主程式,臨時命令執行工具 /usr/bin/ansible-doc 查看配置文檔,模塊功能查看工具,相當於man命令 /usr/bin/ansible-galaxy(銀河) 下載/上傳優秀代碼或Roles模塊的官網平臺 /usr/bin/ansible-playbook 定製自動化任務,編排劇本工具/usr/bin/ansible-pull (拉取)遠程執行命令的工具 /usr/bin/ansible-vault 文件加密工具 /usr/bin/ansible-console 基於Console界面與用戶交互的執行工具 主機清單inventory Inventory 主機清單 ansible的主要功用在於批量主機操作,為了便捷地使用其中的部分主機,可以在inventory file中 將其分組命名 /etc/ansible/hosts文件格式 inventory文件遵循INI文件風格,中括弧中的字元為組名。可以將同一個主機同時歸併到多個不同的組中;此外,當如若目標主機使用了非預設的SSH埠,還可以在主機名稱之後使用冒號加埠號來標明 ntp.magedu.com [webservers] www1.magedu.com:2222 www2.magedu.com [dbservers] db1.magedu.com db2.magedu.com db3.magedu.com 如果主機名稱遵循相似的命名模式,還可以使用列表的方式標識各主機 · 示例: [websrvs] www[01:100].example.com [dbsrvs] db-[a:f].example.com ansible 配置文件 Ansible 配置文件/etc/ansible/ansible.cfg (一般保持預設) [defaults] #inventory = /etc/ansible/hosts # 主機列表配置文件 #library = /usr/share/my_modules/ # 庫文件存放目錄 #remote_tmp = $HOME/.ansible/tmp #臨時py命令文件存放在遠程主機目錄 #local_tmp = $HOME/.ansible/tmp # 本機的臨時命令執行目錄 #forks = 5 # 預設併發數 #sudo_user = root # 預設sudo 用戶 #ask_sudo_pass = True #每次執行ansible命令是否詢問ssh密碼 #ask_pass = True #remote_port = 22 #host_key_checking = False # 檢查對應伺服器的host_key,建議取消註釋 #log_path=/var/log/ansible.log #日誌文件 Ansible系列命令 ansible ansible-doc ansible-playbook ansible-vault ansible-console ansible-galaxy ansible-pull ansible-doc: 顯示模塊幫助 ansible-doc [options] [module...] -a 顯示所有模塊的文檔 -l, --list 列出可用模塊 -s, --snippet顯示指定模塊的playbook片段 示例: ansible-doc –l 列出所有模塊 ansible-doc ping 查看指定模塊幫助用法 ansible-doc –s ping 查看指定模塊幫助用法 ansible ansible通過ssh實現配置管理、應用部署、任務執行等功能,建議配置ansible端能基於密鑰認證的方式聯繫各被管理節點 ansible <host-pattern> [-m module_name] [-a args] (-a加參數) --version 顯示版本 -m module 指定模塊,預設為command -v 詳細過程 –vv -vvv更詳細 --list-hosts 顯示主機列表,可簡寫—list -k, --ask-pass 提示輸入ssh連接密碼,預設Key驗證 -K, --ask-become-pass 提示輸入sudo時的口令 -C, --check 檢查,並不執行 (測試) -T, --timeout=TIMEOUT 執行命令的超時時間,預設10s -u, --user=REMOTE_USER 執行遠程執行的用戶 -b, --become 代替舊版的sudo 切換





































