zoukankan      html  css  js  c++  java
  • Ansible-B站.md

    一、Ansible概述

    1. IT自动化的好处

    1. 团队影响:
      节省时间,提高效率
      消除重复工作
      更少错误风险
      改善协作和工作满意度

    2. 企业影响:
      客服复杂性
      更多创新资源
      加强问责制和合规性

    2. Ansible是什么

    1. 简单-减少学习成本
      易读的描述语言
      无需特殊编码技能
      任务按顺序执行

    2. 强大-协调应用程序声明周期
      应用部署
      配置管理
      工作流程编排

    3. 无代理-可预测,可靠和安全
      无代理架构
      使用OpenSSH通信
      没有代理维护成本

    4. Ansible架构

    chrome_1lZUqXoeZB.png
    chrome_1lZUqXoeZB.png

    二、Ansible 安装配置

    1. yum -y install ansible 
    2. ansible --help 
    3. vim /etc/ansible/hosts 
    4.  
    5. [webservers]#要操作的主机清单 
    6. 192.168.0.12 ansible_host_user=root ansible_host_pass=123.com 
    7. 192.168.0.13 ansible_host_user=root ansible_host_pass=123.com 
    1. ansible webservers -a "df -h" 

    错误如下:没权限permission denied
    chrome_9Zu8MnJxaU.png

    1. vim /etc/ansible/ansible.cfg 
    2. :/check# 搜索取消以下注释 
    3. host_key_checking=False 

    报错如下:
    chrome_PcAe8V8Cm7.png

    • 解决
    1.  
    2. vim /etc/ansible/hosts 
    3.  
    4. [webservers]#要操作的主机清单:因为是ssh通信,所以修改如下 
    5. 192.168.0.12 ansible_ssh_user=root ansible_ssh_pass=123.com 
    6. 192.168.0.13 ansible_ssh_user=root ansible_ssh_pass=123.com 
    7.  
    8. # 分别执行ansible查看硬盘空间和内存 
    9. ansible webservers -a "df -h" 
    10. ansible webservers -a "free -m" 

    1. ansible 使用环境要求

    chrome_wn9WeyuJ0k.png
    chrome_wn9WeyuJ0k.png

    2. 三种安装方式

    chrome_fwb25rnafP.png
    chrome_fwb25rnafP.png

    3. 配置文件

    chrome_wuUHTjUEwG.png
    chrome_wuUHTjUEwG.png

    4. 典型的网络架构

    chrome_eVJPYKsMqB.png
    chrome_eVJPYKsMqB.png

    5. inventory 主机清单(主机]主机组和变量)

    5-1. 主机和主机组

    chrome_NodbPFrmYG.png
    chrome_NodbPFrmYG.png

    1. #未分组的主机需要用 -all 参数 
    2. ansible all -a "df -h" 

    5-2. 变量

    • 主机变量

    chrome_NH2cwk8bM2.png
    chrome_NH2cwk8bM2.png

    • 主机组变量写法
    1. [webservices:vars] 
    2. #即把以下变量应用到webservices主机组优先级小于主机变量上着覆盖此处。 
    3. http_port=8080 
    4. server_name=www.ctnrs.com 
    1. #主机组变量yml写法:需要删除上面文件的配置 
    2. vim /etc/ansible/group_vars/webservers.yml 
    3. http_port: 8080 
    4. server_name: www.ctnrs.com 

    三、Ad-hoc命令模式

    1. 命令行常用选项

    chrome_0iMqlLEwwF.png
    chrome_0iMqlLEwwF.png

    1. ansible webservers -m shell -vvv -a "echo 123 >> /tmp/123" 

    2. SSH 密码认证

    即:
    [webservers]#要操作的主机清单:因为是ssh通信,所以修改如下
    192.168.0.12 ansible_ssh_user=root ansible_ssh_pass=123.com

    3. SSH 秘钥对认证

    1. [webservers]#要操作的主机清单:因为是ssh通信,所以修改如下 
    2. 192.168.0.12 ansible_ssh_user=root ansible_ssh_key=/root/.ssh/id_rsa 

    四、Ansible常用模块

    1. 常用模块

    • 执行shell命令(command和shell)
    • 文件传输copy和file
    • 管理软件包yum
    • 用户和组user
    • 从源代码管理系统部署git
    • 管理服务service
    • 收集目标主机信息(setup)

    2. shell模块和sudo使用

    1. ansible webservers -a "pwd" -u user -k #没有配置面交互需要-k指定密码。 
    2. #配置好sudo权限后 
    3. ansible webservers -m shell -a "ls /root" -u user -k --become --become-user root --ask-become-pass # -k是user密码 --ask是root(提权用户密码) 

    3. copy|file|yum|user 模块

    1. #copy模块 
    2. ansible webservers -m copy -a "src=nginx-1.15.3.tar.gz dest=/tmp" -u root 
    3. #file模块是在目标主机创建文件:创建目录 
    4. ansible webservers -m file -a "dest=/tmp/abc state=directory mode=600" -u root 
    5. ##递归删除目录|文件 
    6. ansible webservers -m file -a "dest=/tmp/abc state=absent mode=600" -u root 
    7. #yum模块 
    8. ansible webservers -m yum -a "name=memcached state=present" -u root 
    9. ## 卸载 
    10. ansible webservers -m yum -a "name=memcached state=absent" -u root 
    11. #user模块:创建用户指定密码 
    12. ansible all -m user -a "name=foo password=123.com" -u root 
    13. ## 删除用户  
    14. ansible all -m user -a "name=foo state=absent" -u root 

    4. git|service|setup 模块

    1. # 先所有节点安装git 
    2. # 使用git命令源码安装 
    3. ansible webservers -m git -a "repo=https://github.com/ansible/ansible.git dest=/tmp/ansible" -u root 
    4. #service模块:启动服务 
    5. ansible webservers -m service -a "name=memcached state=started" -u root 
    6. #3 加入自启动 
    7. ansible webservers -m service -a "name=memcached enable=true" -u root 
    8. #setup 
    9. ansible webservices -m setup -a "filter=ansible_nodename" 
    10. ansible webservices -m setup -a "filter=ansible_*_mb" 

    五、Playbook:剧本基本使用

    • playbook的好处
    • 认识一下playbook(自动部署nginx)
    • yaml语法
    • playbook文件结构
    • 在变更时执行操作(handlers)
    • 任务控制(tags)
    • playbook文件调试
    • 案例:自动部署Tomcat

    1. 好处

    • 易读的编排语言
    • 适合配置管理和应用部署
    • 非常适合部署复杂的工作

    2. nginx部署

    步骤都是一个个task

    chrome_j9kDen5UUB.png
    chrome_j9kDen5UUB.png

    1. #检查yml文件语法是否正确 
    2. ansible-playbook nginx.yml --syntax-check 
    3. #安装nginx 
    4. ansible-playbook nginx.yml 

    3. yaml语法和playbook结构

    3-1. yaml语法

    • 缩进标识层级关系
    • 不支持tab键缩进,使用空格缩进
    • 通常开头缩进2个空格
    • 字符后做进一个空格,如冒号,逗号
    • "---" 标识yaml个是,一个文件的开始
    • "#" 注释

    一个文件通常一个play如nginx的安装所有task就是一个play,只不过nginx.yml文件没写name: playname字段。
    如下:一个文件可以两个play;task也可以定义name属性
    chrome_VTcVVDV9hI.png

    4. handlers:处理器

    chrome_3HsLYhY9qn.png
    chrome_3HsLYhY9qn.png

    chrome_HiItdgRduX.png

    5. 任务控制tags:可以控制哪个任务执行哪个不执行

    chrome_y4gsLmcVXH.png
    chrome_y4gsLmcVXH.png

    6. playbook文件调试

    1. #语法检查 
    2. ansible-playbook nginx.yml --syntax-check 
    3. #debug调试:如下图 

    chrome_xDDbeCR4j8.png
    chrome_xDDbeCR4j8.png

    7. 自动部署tomcat案例

    1. --- 
    2. #四个步骤1.下载jdk2.下载tocat3.解压tomcat4.启动 
    3. - hosts: webservers 
    4. gather_facts: no 
    5. vars: 
    6. tomcat_version: 8.5.34 
    7. tomcat_install_dir: /usr/local 
    8. tasks: 
    9. - name: Install jdk1.8 
    10. yum: name=java-1.8.0-openjdk state=present 
    11. - name: Download tomcat 
    12. get_url: url=http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v{{ tomcat_version }}/bin/apache-tomcat-{{ tomcat_version }}.tar.gz dest=/tmp 
    13. - name: Unarchive tomcat-{{ tomcat_version }}.tar.gz 
    14. unarchive: 
    15. src: /tmp/tomcat-{{ tomcat_version }}.tar.gz 
    16. dest: "{{ tomcat_install_dir }}" 
    17. copy: no 
    18. - name: Start tomcat 
    19. shell: cd {{ tomcat_install_dir }} && mv apache-tomcat-{{ tomcat_version }} tomcat8 && cd tomcat8/bin && nohup ./startup.sh & 

    六、Playbooke定义变量与使用

    • 命令行:
    • 在Inventory中定义:/etc/ansible/hosts
    • 在playbook中定义
    • 在role中定义
    • 注册变量(register)
    • 系统信息变量(facts)

    1. 命令行:

    1. --- 
    2. - hosts: webservers 
    3. gather_facts: no 
    4. remote_users: root 
    5.  
    6. tasks: 
    7. - name: test var 
    8. debug: msg="{{work_dir}}" 
    1. ansible-playbook var.yml -e work_dir=/usr/local 

    2. playbook:

    1. --- 
    2. - hosts: webservers 
    3. gather_facts: no 
    4. remote_users: root 
    5. vars: 
    6. - work_dir: /usr/local 
    7. - nginx_version: 1.16 
    8. tasks: 
    9. - name: install nginx 
    10. debug: msg="{{work_dir}}/nginx{{nginx_version}}" 

    3. register:把某一个任务结果注册成一个变量

    1. --- 
    2. - hosts: webservers 
    3. gather_facts: no 
    4. remote_users: root 
    5. vars: 
    6. - work_dir: /usr/local 
    7. - nginx_version: 1.16 
    8. tasks: 
    9. - name: register var 
    10. command: date +"%F_%T" 
    11. register: datetime 
    12. - name: touch file 
    13. debug: {{datetime}} 
    14. file: dest=/tmp/r_{{datetime.stdout}} state=touch #使用ansible的file模块 

    4. facts:

    1. --- 
    2. - hosts: webservers 
    3. gather_facts: yes 
    4. remote_users: root 
    5. vars: 
    6. - work_dir: /usr/local 
    7. - nginx_version: 1.16 
    8. tasks: 
    9. - name: touch file 
    10. file: dest=/tmp/r_{{ansible_hostname}} state=touch #使用ansible的file模块 

    七、Playbook 文件复用

    • include & import 区别
    • import_playbook
    • include_tasks
    • import_tasks

    1. include*(动态):运行时导入

    • --list-tags 不会显示到输出
    • 不能使用notify触发来自include*内处理程序名称(handlers)

    2. import*(静态):在playbook解析时预先导入

    • 不能与循环一起使用
    • 将变量用于目标文件或角色名称时,不能使用inventory中的变量

    3. import_playbook:

    chrome_KcOpixcD8N.png
    chrome_KcOpixcD8N.png

    4. include_tasks|import_tasks:

    chrome_Z6dA5GnktP.png
    chrome_Z6dA5GnktP.png

    八、Playbook 流程控制

    1. 条件:不同操作系统安装不同软件包

    chrome_o8CF92ACcu.png
    chrome_o8CF92ACcu.png

    chrome_at4mjiy6u9.png

    2. 循环

    chrome_pjBRuEjXFr.png
    chrome_pjBRuEjXFr.png

    demo2:批量创建用户并加入nginx组中
    chrome_fuA1Lx928C.png

    九、Playbook 魔板(jinja2:语法类似php)

    1. 条件和循环

    可以把yml的变量值传到jinja2的文件变量中。
    chrome_B9iLGPMalV.png

    2. 案例:管理nginx配置文件

    chrome_Bh2h5t0E1R.png
    chrome_Bh2h5t0E1R.png

    十、角色

    • roles目录结构
    • roles基本使用
    • 案例:部署LNMP网站平台

    1. roles目录结构

    chrome_Xjjofy5ts6.png
    chrome_Xjjofy5ts6.png

    参考案例:https://github.com/ansible/ansible-examples

    2. roles基本使用

    chrome_2l6HBOBYZa.png
    chrome_2l6HBOBYZa.png

    实操截图:
    chrome_mstHpRJYSN.png
    chrome_JsBoJf76eg.png

    每个角色的tasks目录下必须有main.yml入口。

    3. 案例:部署LNMP网站平台

    网站架构:php-fpm相当于tomcat
    chrome_YL2UrnLgPN.png

    amsible文件结构:nginx采用编译安装方式
    chrome_nrXr7yGedC.png

    1. #vim group_vars/all 
    2. --- 
    3. # Nginx 
    4. nginx_version: 1.15.3 
    5. http_port: 80 
    6. server_name: wp.ctnrs.com #虚拟主机 
    7.  
    8. # PHP 
    9. php_version: 5.6.38 
    10.  
    11. # Wordpress 
    12. wp_version: 4.9.4 
    13. db_host: 192.168.0.12 
    14. db_port: 3306 
    15. wp_db_name: wp 
    16. wp_db_user: wp 
    17. wp_db_password: MyNewPass4! 
    1. #vim hosts 
    2. 192.168.0.14 
    1. #vim site.yml 
    2. --- 
    3. - name: Install Nginx,PHP-FPM and Wordpress 
    4. hosts: webservers 
    5. remote_user: root 
    6. roles:  
    7. - role: common 
    8. - role: nginx 
    9. tags: ["nginx"] 
    10. - role: php 
    11. tags: ["php"] 
    12. - role: wordpress 
    13. tags: ["wp"] 

    4. common

    1. #vim roles/common/tasks/main.yml 
    2. --- 
    3. - name: Install deps 
    4. yum: name={{ item }} state=present 
    5. with_items: 
    6. - gcc 
    7. - make 
    8. - zlib-devel 
    9. - openssl-devel 
    10. - pcre-devel 

    5. role- nginx

    1. ls roles/nginx/files/ 
    2. nginx-1.15.3.tar.gz nginx.conf nginx.service 
    1. #vim roles/nginx/files/service 
    2. [Unit] 
    3. Description=The NGINX HTTP AND REVERSE PROXY SERVER 
    4. After=syslog.target network.target remote-fs.target nss-lookup.target 
    5.  
    6. [Service] 
    7. Type=forking 
    8. PIDFile=/var/run/nginx.pid 
    9. ExecStartPre=/usr/local/nginx/sbin/nginx -t 
    10. ExecStart=/usr/local/nginx/sbin/nginx 
    11. ExecReload=/urs/local/nginx/sbin/nginx -s reload 
    12. ExecStop=/bin/kill -s QUIT $MAINPID 
    13.  
    14. [Install] 
    15. WantedBy=multi-useer.target 
    1. #vim roles/nginx/handlers/main.yml 
    2. --- 
    3. - name: reload nginx 
    4. service: name=nginx state=reloaded 
    1. #vim roles/nginx/tasks/main.yml 
    2. - name: Copy nginx source pkg 
    3. #get_url: url=http://nginx.org/download/nginx-{{ nginx_version }}.tar.gz dest=/tmp/nginx-{{ nginx_version }}.tar.gz 
    4. copy: serc=nginx-{{ nginx_version }}.tar.gz dest=/tmp/ 
    5. - name: Install nginx  
    6. sehll: cd /tmp && tar zxf nginx-{{ nginx_version }}.tar.gz && cd nginx-{{ nginx_version }} && ./configure --prefix=/usr/local/nginx --user=nobody --group=nobody --with-http_ssl_module --with-http_stub_status_module --with-stream=dynamic && make && make install 
    7. - name: mkdir /usr/local/nginx/conf/vhost 
    8. file: dest=/usr/local/nginx/conf/vhost state=directory 
    9. - name: Copy nginx master configuration file 
    10. copy: src=nginx.conf dest=/usr/local/nginx/conf/ 
    11. notify: reload nginx 
    12. - name: Copy nginx configuration for wordpress 
    13. template: src=wordpress.conf dest=/usr/local/nginx/conf/vhost/ 
    14. notify: reload nginx 
    15. - name: Copy nginx systemctl service 
    16. copy: src=nginx.service dest=/usr/lib/systemd/system/ 
    17. - name: systemctl start service 
    18. service: name=nginx state=started enabled=yes 
    1. #vim roles/nginx/templates/wordpress.conf 如下: 

    chrome_aqAnYYHf3p.png
    chrome_aqAnYYHf3p.png

    6. role- php

    1. ls roles/php/files/ 
    2. php-5.6.38.tar.gz php-fpm.conf php-fpm.service php.ini 
    1. #vim roles/php/handlers/main.yml 
    2. --- 
    3. - name: restart php-fpm 
    4. service: name=php-fpm state=restarted 
    1. # vim roles/php/tasks/main.yml #编译安装php 
    2. --- 
    3. - name: Install php deps 
    4. yum: name={{ item }} state=present 
    5. with_item: 
    6. - gd-deve 
    7. - libxml2-devel 
    8. - libcurl-devel 
    9. - libjped-devel 
    10. - libpng-devel 
    11. - name: Copy php source pkg 
    12. #get_url: url=http://docs.php.net/distributions/php-{{ php_version }}.tar.gz dest=/tmp/{{ php_version }}.tar.gz 
    13. copy: src=php-{{ php_version }}.tar.gz dest=/tmp 
    14. - name: Install php 
    15. shell: cd /tmp && tar zxf php-{{ php_version }}.tar.gz && cd php-{{ php_version }} && ./configuration --prefix=/usrlocal/php --with-config-file-paht=/usr/local/php/etc --with-mysql --with-mysqli --with-openssl --with-zlib --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-iconv --enable-fpm --enable-zip --enable0mbstring && make -j 4 && make install 
    16. - name: Copy php configuration file 
    17. copy: src=php.ini dest=/usr/local/php/etc/ 
    18. notify: restart php-fpm 
    19. - name: Copy php service  
    20. copy: src=php-fpm.service dest=/usr/lib/systemd/system/ 
    21. - name: start php-fpm 
    22. service: name=php-fpm state=started enable=yes 

    7. role-wordpress

    1. ls roles/wordpress/ 
    2. tasks templates 
    1. #vim roles/wordpress/tasks/main.yml 
    2. --- 
    3. - name: Download wordpress 
    4. get_url: url=https://cn.wordpress.org/wordpress-{{ wp_version }}-zh_CN.tar.gz dest=/tmp/wordpress-{{ wp_version }}-zh_CN.tar.gz 
    5. - name: Extract archive 
    6. unarchive: src/wordpress-{{ wp_version }}-zh_CN.tar.gz dest=/usr/local/nginx/html copy=no 
    7. - name: Copy wordpress config file 
    8. template: src=wp-config.php dest=/usr/local/nginx/html/wordpress 
    9. - name: Change ownership of Wordpress Installation 
    10. file: path=/usr/local/nginx/html/wordpress owner=nobody group=nobody state=directory recurse=yes 
    1. #vim roles/wordpress/templates/wp-config.php 

    8. 检查语法部署

    1. #检查 
    2. ansible-playbook -i hosts site.yml --syntax-check 
    3. #安装 
    4. ansible-playbook -i hosts site.yml 

    nginx,php如果报下面错误说明启动报错
    chrome_WBQHCCc319.png
    chrome_PAKunCEdwk.png

    重新停掉服务systemctl daemon-reload即可;然后根据失败的task的tags重新执行安装即可

    money怎么来?
  • 相关阅读:
    初學C#窗口事件
    Visual Studio 2005.net 代码段(Snippet)丢失的解决方案
    使用C#代码段,提高工作效率(C# code snippet)
    同时拥有静态IP和动态IP
    让XP启动时不加载Autoexec.bat
    C#中构造函数和析构函数的用法
    C# 輸入關鍵字後按Tab鍵無法帶出相關內容
    C# 打開文件
    system.net.mail 與system.web.mail的區別
    C#中的建立事件
  • 原文地址:https://www.cnblogs.com/bchjazh/p/14518842.html
Copyright © 2011-2022 走看看