• Ansible初识以及安装


    1. Ansible应用简述:

            Ansible基于python语言实现,由Paramiko和PyYAML两个关键模块构建。具有独特的设计理念:

            1)安装部署简单

            2)管理主机便捷,支持多主机并行管理

            3)避免在被管理主机上安装客户端代理,打开额外端口,采用无代理方式,只是利用了现有的ssh后台进

            4)支持非root用户管理操作,支持sudo

    2. Ansible架构模式:

            Ansible维护模式通常由控制机和被管机组成。控制机是用来安装ansible工具软件,执行维护指令的机器,是ansible维护的核心。被管机是运行业务服务的机器,由控制机通过ssh来进行管理。

            2.1 Ansible的管理架构

            Ansible是一个模型驱动的配置管理器,支持多节点发布、远程任务执行。默认使用ssh进行连接。

            Ansible管理系统由控制主机和一组被管节点组成。控制主机直接通过ssh控制被管节点,被管节点通过Ansible的资源清单(inventory)来进行分组管理。

            2.2 Ansible的系统架构

            Ansible是基于模块工作的,本身没有批量以的能力。真正有能力的是Ansible运行的模块,Ansible只是提供了框架。

    核心引擎:Ansible

    核心模块(core modules):这些都是Ansible自带的模块,Ansible模块资源分发到远程节点使其执行特性任务或者匹配一个特定的状态。Ansible遵循“batteries included”哲学,所以你可以有各种各样任务的核心模块。

    自定义模块(custom modules):如果核心模块不足以完成某种功能,可以添加自定义模块。

    插件(plugins):完成模块功能的补充,借助插件完成记录日志、邮件等功能。

    剧本(playbook):定义Ansible任务的配置文件,可以将多个任务定义在一个剧本中,由Ansible自动执行,剧本执行支持多个任务,可以由控制主机运行多个任务,同时对多台远程主机进行管理。

    连接插件(connectior plugins):Ansible基于连接插件连接到各个主机,负责和被控节点实现通信。虽然Ansible是使用的ssh连接到各个被管节点,但是也支持其他方法,所以需要有链接插件。

    主机清单(host inventory):定义Ansible管理的主机策略,默认是在Ansible的hosts配置文件中定义被管节点,同时也支持自定义动态主机清单和指定配置文件的位置。

            2.3 任务执行模式

            Ansible系统由控制主机对被管节点的操作可以分为两类,即ad-hoc和playbook:

            ad-hoc模式使用单个模块,支持批量执行单条命令。

            playbook模式是ansible的主要管理方式,通过多个task集合完成一类功能,可以把playbook理解为通过组合多条ad-hoc操作的配置文件。

            ansible执行过程流程如下:

    3.Ansible的安装:

            3.1 yum安装

    1. [root@k8s-master ~]# yum install -y ansible
    2. Loaded plugins: fastestmirror, langpacks
    3. Loading mirror speeds from cached hostfile
    4. * base: mirrors.ustc.edu.cn
    5. * extras: mirrors.ustc.edu.cn
    6. * updates: mirrors.ustc.edu.cn
    7. base | 3.6 kB 00:00:00
    8. docker-ce-stable | 3.5 kB 00:00:00
    9. epel | 4.7 kB 00:00:00
    10. extras | 2.9 kB 00:00:00
    11. kubernetes | 1.4 kB 00:00:00
    12. updates | 2.9 kB 00:00:00
    13. (1/2): epel/x86_64/updateinfo | 1.0 MB 00:00:01
    14. (2/2): epel/x86_64/primary_db | 7.0 MB 00:00:11
    15. Resolving Dependencies
    16. .......
    17. Running transaction
    18. Installing : python2-httplib2-0.18.1-3.el7.noarch 1/7
    19. Installing : python-babel-0.9.6-8.el7.noarch 2/7
    20. Installing : python2-jmespath-0.9.4-2.el7.noarch 3/7
    21. Installing : python-paramiko-2.1.1-9.el7.noarch 4/7
    22. Installing : python-markupsafe-0.11-10.el7.x86_64 5/7
    23. Installing : python-jinja2-2.7.2-4.el7.noarch 6/7
    24. Installing : ansible-2.9.27-1.el7.noarch 7/7
    25. Verifying : python-markupsafe-0.11-10.el7.x86_64 1/7
    26. Verifying : ansible-2.9.27-1.el7.noarch 2/7
    27. Verifying : python-paramiko-2.1.1-9.el7.noarch 3/7
    28. Verifying : python2-jmespath-0.9.4-2.el7.noarch 4/7
    29. Verifying : python-babel-0.9.6-8.el7.noarch 5/7
    30. Verifying : python2-httplib2-0.18.1-3.el7.noarch 6/7
    31. Verifying : python-jinja2-2.7.2-4.el7.noarch 7/7
    32. Installed:
    33. ansible.noarch 0:2.9.27-1.el7
    34. Dependency Installed:
    35. python-babel.noarch 0:0.9.6-8.el7 python-jinja2.noarch 0:2.7.2-4.el7 python-markupsafe.x86_64 0:0.11-10.el7 python-paramiko.noarch 0:2.1.1-9.el7 python2-httplib2.noarch 0:0.18.1-3.el7 python2-jmespath.noarch 0:0.9.4-2.el7
    36. Complete!

            3.2 目录结构

            我们先tree下看看有哪些文件

    1. [root@k8s-master ~]# tree /etc/ansible/
    2. /etc/ansible/
    3. ├── ansible.cfg
    4. ├── hosts
    5. └── roles

            ansible.cfg:文件,ansible配置文件

            hosts:文件,存放主机信息

            roles:目录,存放roles信息

            其中还有两个我们后面会用到的

            host_vars:目录,存放主机变量

            group_vars:目录,存放主机组变量

            3.3 ansible.cfg配置详解

            ansible.cfg主要配置分类:

    1. [defaults]:通用配置项
    2. [inventory]:与主机清单相关的配置项
    3. [privilege_escalation]:特权升级相关的配置项
    4. [paramiko_connection]:使用paramiko连接的相关配置项,Paramiko在RHEL6以及更早的版本中默认使用的ssh连接方式
    5. [ssh_connection]:使用OpenSSH连接的相关配置项,OpenSSH是Ansible在RHEL6之后默认使用的ssh连接方式
    6. [persistent_connection]:持久连接的配置项
    7. [accelerate]:加速模式配置项
    8. [selinux]:selinux相关的配置项
    9. [colors]:ansible命令输出的颜色相关的配置项
    10. [diff]:定义是否在运行时打印diff(变更前与变更后的差异)

            具体配置示例:

    1. [defaults]
    2. inventory = /etc/ansible/hosts # ansible inventory文件路径
    3. library = /usr/share/my_modules/ # ansible模块文件路径
    4. module_utils = /usr/share/my_module_utils/ #模块文件存放目录
    5. remote_tmp = ~/.ansible/tmp # ansible远程主机脚本临时存放目录
    6. local_tmp = ~/.ansible/tmp # ansible管理节点脚本临时存放目录
    7. forks = 5 # ansible执行并发数
    8. poll_interval = 15 # ansible异步任务查询间隔
    9. sudo_user = root # ansible sudo用户
    10. ask_sudo_pass = True # 运行ansible是否提示输入sudo密码
    11. ask_pass = True # 运行ansible是否提示输入密码
    12. transport = smart # ansible远程传输模式,需要优化执行速度的时候可以修改这个参数
    13. remote_port = 22 # 远程主机SSH端口
    14. module_lang = C # ansible模块运行默认语言环境
    15. gathering = smart # facts信息收集开关定义
    16. timeout = 10 # ansible SSH连接超时时间
    17. remote_user = root # ansible远程认证用户
    18. roles_path = /etc/ansible/roles # ansible role存放路径
    19. log_path = /var/log/ansible.log # ansible日志记录文件
    20. executable = /bin/sh # ansible命令执行shell
    21. module_name = command # ansible默认执行模块
    22. module_set_locale = False # 设置本地环境变量,默认false
    23. host_key_checking = False # ansible第一次连接客户端是是否要检查ssh密钥
    24. hash_behaviour = replace # ansible主机变量重复处理方式
    25. fact_caching = memory # 定义ansible facts缓存方式
    26. private_role_vars = yes # 默认情况下,角色中的变量将在全局变量范围中可见, 为了防止这种情况,可以启用以下选项,只有tasks的任务和handlers得任务可以看到角色变量 yes
    27. vault_password_file # 指定vault密码文件路径,默认无
    28. ansible_managed = Ansible managed # 定义的一个Jinja2变量,可以插入到Ansible配置模版系统生成的文件中
    29. display_skipped_hosts = True # 开启显示跳过的主机
    30. error_on_undefined_vars = False # 开启错误,或者没有定义的变量
    31. #action_plugins # ansible action插件路径,默认无
    32. #cache_plugins # ansible cache插件路径,默认无
    33. #callback_plugins # ansible callback插件路径,默认无
    34. #connection_plugins # ansible connection插件路径,默认无
    35. #lookup_plugins # ansible lookup插件路径,默认无
    36. #inventory_plugins # ansible inventory插件路径,默认无
    37. #vars_plugins # ansible vars插件路径,默认无
    38. #filter_plugins # ansible filter插件路径,默认无
    39. #terminal_plugins # ansible terminal插件路径,默认无
    40. #strategy_plugins # ansible strategy插件路径,默认无
    41. #fact_caching_connection # 定义ansible facts缓存路径,默认无
    42. ## 特权升级相关的配置项
    43. [privilege_escalation]
    44. become = True # 是否开启become模式
    45. become_method = sudo # 定义become方式
    46. become_user = root # 定义become方式
    47. become_ask_pass = False # 是否定义become提示密码
    48. ## accelerate缓存加速
    49. [accelerate]
    50. accelerate_port = 5099 # 加速连接端口5099
    51. accelerate_timeout = 30 # 命令执行超过时间,单位为s
    52. accelerate_connect_timeout = 5.0 # 上一个活动连接的时间,单位为min
    53. accelerate_daemon_timeout = 30 # 允许多个私钥被加载到daemon
    54. accelerate_multi_key = yes # 任何客户端想要连接daemon都要开启这个选项

    4.Ansible的简单测试:

            4.1 控制主机和被管节点做互信

            

    1. #1.生成密钥
    2. [root@ansible01 ~]# ssh-keygen -t rsa
    3. Generating public/private rsa key pair.
    4. Enter file in which to save the key (/root/.ssh/id_rsa):
    5. /root/.ssh/id_rsa already exists.
    6. Overwrite (y/n)? y
    7. Enter passphrase (empty for no passphrase):
    8. Enter same passphrase again:
    9. Your identification has been saved in /root/.ssh/id_rsa.
    10. Your public key has been saved in /root/.ssh/id_rsa.pub.
    11. The key fingerprint is:
    12. SHA256:GtEwqzua31adtJZoLAy3ycMVdDhu8ddUj/HMenpsx/0 root@ansible01
    13. The key's randomart image is:
    14. +---[RSA 2048]----+
    15. | o.... ...|
    16. | ==. .*.|
    17. | o..= o. =|
    18. | ....+ o . .. |
    19. | .*.*S+ = . .|
    20. | .Oo= * =.|
    21. | o .= . . B|
    22. | o o. oo|
    23. | o.... E|
    24. +----[SHA256]-----+
    25. #2.将公钥copy到被控主机上
    26. [root@ansible01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@11.0.1.19
    27. /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
    28. /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
    29. /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
    30. root@11.0.1.19's password:
    31. Number of key(s) added: 1
    32. Now try logging into the machine, with: "ssh 'root@11.0.1.19'"
    33. and check to make sure that only the key(s) you wanted were added.

            4.2 主机连通性测试

    1. [root@ansible01 ~]# ansible 11.0.1.19 -m ping
    2. 11.0.1.19 | SUCCESS => {
    3. "ansible_facts": {
    4. "discovered_interpreter_python": "/usr/bin/python"
    5. },
    6. "changed": false,
    7. "ping": "pong"
    8. }

    下一章会对组件进行说明。

  • 相关阅读:
    [CCS] 没有Runtime Object View(ROV)怎么办?
    46届世界技能大赛湖北省选拔赛wp 3.0
    面试官:今天要不来聊聊SpringMVC吧?
    拦截|篡改|伪造.NET类库中不限于public的类和方法
    Putty连接登录Linux .ppk
    进制转换随手记
    iMazing 3.0.0.3 for mac 中文破解版2024最新图文安装教程
    Prometheus+Grafana监控MySQL
    Workflow,要不要了解一下
    简单版的采用前后端分离模式实现SpingBoot新增&查询功能
  • 原文地址:https://blog.csdn.net/qq_37278522/article/details/137920399