ansible基础介绍与安装

ansible的基础介绍与安装

运维介绍

运维日常工作

1、云计算运维工程师核心职能:

  1. 平台架构组建:负责参与并审核架构设计和合理性、可运维性;利用开源方案搭建运维平台技术架构,确保产品发布之后高效稳定的运行,保障并不断提升服务的可用性,确保用户数据安全,提升用户体验;
  2. 日常运营保障:负责运维技术或运维平台可保障产品高效的发布上线,负责保障产品的7*24h稳定运行,出现问题时可以快速定位并解决,不断优化架构,以提升系统整体的稳定性
  3. 性能、效率优化:利用自动化的工具、平台,不断优化系统架构,提升部署效率,提升性能,稳定性,高可用性,安全性,可扩展性,可伸缩性等

2、运维职能划分:

image-20201007102610952

3、企业实际应用场景:

dev开发环境:

  • 使用者:开发人员
  • 功能:开发软件,调试bug
  • 管理者:开发人员

测试环境

  • 使用者:QA测试人员
  • 功能:测试开发提交的代码
  • 管理者:运维人员

发布环境:

  • 使用者:运维人员
  • 功能:发布通过测试的代码到生产环境
  • 管理者:运维
  • 发布机:2台以上(主备)

生产环境:

  • 使用者:运维人员
  • 功能:运行正式代码,对外提供服务
  • 管理者:运维
  • 特点:服务器数量较多,都需要自动化工具提升效率,较少人为失误

灰度环境:

  • 使用者:运维
  • 功能:代码版本变更时,只对线上部分主机做修改,新老版本并存,新版本一般只引流给部分用户,如申请游戏新版本的内测用户
  • 管理者:运维

4、程序发布要求

  1. 不能导致系统故障,
  2. 不能影响用户体验
  3. 预发布验证:
    1. 新版本发布到服务器测试,(和线上环境相同,只是没接入前方调度器)
  4. 灰度发布划分标准:
    1. 主机
    2. 用户
    3. 业务
  5. 每个版本要带版本号,通过修改软链接切换
    1. /webapp/myapp
    2. /webapp/myapp1-1
    3. /webapp/myapp1-2
  6. 发布过程
    1. 调度器:lvs或haproxy,分批下线机器,更新代码,测试正常,重新上线,直到全部机器更新完成
    2. 脚本、或自动化平台,辅助完成

什么是运维自动化

  • 文件传输
  • 应用编排
  • 配置管理
  • 任务流编排

运维自动化常用工具

  • ansible:python,agentless,中小型环境
  • saltstack:python,需要agent,
  • puppet:ruby,适合大型环境
  • fabric:python
  • chef:ruby
  • cfengine
  • func

ansible

学习文档:

官方文档:https://docs.ansible.com/

有ansible,ansible tower,ansible galaxy,ansible network四大类的官方文档;

ansible galaxy:社区贡献的role,可以下载,学习,参考,甚至可以直接用

ansible network:ansible管理网络设备相关文档

ansible tower:可以理解为红帽对ansible的商业发行版,一个集成的解决方案,基于web,更易用;

中文翻译官方文档:http://ansible.com.cn/index.html

wikipedia介绍:https://en.wikipedia.org/wiki/Ansible_(software)

​ 作者:michael dehaan(cobbler 和 func作者)后被红帽收购

ansible基础与特性

  • 模块化:通过调用特定的模块,完成特定类型的任务
  • 关键模块:paramiko、pyyaml、jinja2
  • 支持自定义模块
  • 基于python
  • 部署简单,无需agent,通过openssh管理主机
  • 安全
  • 支持playbook编排任务
  • 幂等性,任务执行多次,结果一致
  • yaml格式,编排任务,易读

ansible架构

image-20201007105347093

ansible工作原理

image-20201007105713064

ansible软件组成

ansible playbook:定义任务流的配置文件,ansible读取并顺序执行,通常为json格式的yaml文件

inventory:主机清单:/etc/ansible/hosts

modules:ansible执行命令的功能模块,多为内置核心模块,可自定义模块

plugins:插件,连接型插件、循环插件、变量插件、过滤插件等

api:供第三方程序调用的编程接口

1、ansible命令执行来源

user、普通用户,系统管理员

cmdb、通过api调用,一般取出其中主机清单

public/private cloud、api调用

user、ansible playbook、ansible

2、ansible实现管理的方式

ad-hoc即ansible命令行,临时场景

ansible-playbook,长期的,事先规则的,大型项目,可重复利用,

3、ansible-playbook执行过程

将编排好的任务写入playbook,ansible读取,按照顺序执行,不同类型的任务通过调用不同的模块来完成;

4、ansible管理对象

  • 主机
  • 网络设备

5、ansible注意事项

  1. 执行ansible主机为控制端
  2. 控制端python版本,2.6及以上
  3. 被控制端python小于2.4需安装python-simplejson
  4. 被控制端若开启selinux需要安装libselinux-python
  5. windows不能作为控制端

ansible安装

https://docs.ansible.com/ansible/latest/installation_guide/index.html

官方文档:ansible具有多种安装方式

yum安装

#配置epel源后,直接安装

[root@host2 ~]# yum list ansible
Available Packages
ansible.noarch                               2.9.10-1.el7                               epel
[root@host2 ~]# yum install -y ansible
[root@host2 ~]# ansible --version
ansible 2.9.13
  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
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Apr 11 2018, 07:36:10) [GCC 4.8.5 20150623 (Red Hat 4.8.5-28)]

编译安装

#安装依赖包
[root@host3 ansible-1.5.4]# yum install -y python-jinja2 PyYAML python-paramiko python-babel python-crypto

#解压源码包,编译安装
[root@host3 ansible-1.5.4]# tar -xf ansible-1.5.4.tar.gz -C /usr/local/
[root@host3 ansible-1.5.4]# cd /usr/local/ansible-1.5.4/
[root@host3 ansible-1.5.4]# python setup.py build
[root@host3 ansible-1.5.4]# python setup.py install


[root@host3 ansible-1.5.4]# mkdir /etc/ansible
[root@host3 ansible-1.5.4]# cp -r examples/* /etc/ansible/
[root@host3 ansible-1.5.4]# ansible --version
ansible 1.5.4

git安装

[root@host4 ~]# git clone https://github.com/ansible/ansible.git --recursive

[root@host4 ~]# cd ansible/
[root@host4 ansible]# ll
total 92
drwxr-xr-x 2 root root   243 Oct  7 14:42 bin
drwxr-xr-x 3 root root    85 Oct  7 14:42 changelogs
-rw-r--r-- 1 root root 35148 Oct  7 14:42 COPYING
drwxr-xr-x 6 root root    60 Oct  7 14:42 docs
drwxr-xr-x 3 root root   191 Oct  7 14:42 examples
drwxr-xr-x 7 root root  4096 Oct  7 14:42 hacking
drwxr-xr-x 3 root root    21 Oct  7 14:42 lib
drwxr-xr-x 2 root root   104 Oct  7 14:42 licenses
-rw-r--r-- 1 root root  9913 Oct  7 14:42 Makefile
-rw-r--r-- 1 root root  1755 Oct  7 14:42 MANIFEST.in
drwxr-xr-x 8 root root    90 Oct  7 14:42 packaging
-rw-r--r-- 1 root root  5754 Oct  7 14:42 README.rst
-rw-r--r-- 1 root root   361 Oct  7 14:42 requirements.txt
-rw-r--r-- 1 root root 15418 Oct  7 14:42 setup.py
-rw-r--r-- 1 root root  4426 Oct  7 14:42 shippable.yml
drwxr-xr-x 9 root root   111 Oct  7 14:42 test
[root@host4 ansible]# source ./hacking/env-setup
Ansible now needs setuptools in order to build. Install it using your package manager (usually python-setuptools) or via pip (pip install setuptools).

Setting up Ansible to run out of checkout...

PATH=/root/ansible/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PYTHONPATH=/root/ansible/lib
MANPATH=/root/ansible/docs/man:/usr/local/share/man:/usr/share/man

Remember, you may wish to specify your host file with -i

Done!

[root@host4 ansible]# echo $?
0
[root@host4 ansible]# ansible --version
Traceback (most recent call last):
  File "/root/ansible/bin/ansible", line 62, in <module>
    import ansible.constants as C
  File "/root/ansible/lib/ansible/constants.py", line 12, in <module>
    from jinja2 import Template
ImportError: No module named jinja2

pip安装

利用pip命令安装,pip为python程序包的管理程序,类比yum

[root@host1 ~]# yum install -y python-pip python-devel
[root@host1 ~]# yum install -y gcc glibc-devel zlib-devel rpm-build openssl-devel 
[root@host1 ~]# pip install --upgrade pip
[root@host1 ~]# pip install ansible --upgrade

ansible配置文件

#yum安装后目录结构:

[root@host2 ~]# rpm -ql ansible |less
/etc/ansible
/etc/ansible/ansible.cfg
主配置文件,配置ansible的工作特性
/etc/ansible/hosts
主机清单
/etc/ansible/roles
存放角色的目录

/usr/bin/ansible
/usr/bin/ansible-2
/usr/bin/ansible-2.7
主程序,临时命令行工具,用于临时任务


/usr/bin/ansible-config
/usr/bin/ansible-connection

/usr/bin/ansible-console
/usr/bin/ansible-console-2
/usr/bin/ansible-console-2.7
基于console界面和用户交互工具

/usr/bin/ansible-doc
/usr/bin/ansible-doc-2
/usr/bin/ansible-doc-2.7
查看配置文档,模块功能,类比于man


/usr/bin/ansible-galaxy
/usr/bin/ansible-galaxy-2
/usr/bin/ansible-galaxy-2.7
下载上传,官网上roles模块的工具

/usr/bin/ansible-inventory


/usr/bin/ansible-playbook
/usr/bin/ansible-playbook-2
/usr/bin/ansible-playbook-2.7
编排任务流的命令


inventory主机清单:
ansible是批量操作主机,为了区分,可以在inventory file中为主机分组,如web组,数据库组,app组,调度器组等


/etc/ansible/hosts

#下为yum安装时,默认的配置文件,
#[group_name] 可以对主机进行归类分组;
#没有[group_name]的可以不分
#支持类似通配符的匹配多台主机,用[]表示,
#ip,主机名均可

[root@host2 ~]# vim /etc/ansible/hosts 

# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.
# This is the default ansible 'hosts' file.
#
# It should live in /etc/ansible/hosts
#
#   - Comments begin with the '#' character
#   - Blank lines are ignored
#   - Groups of hosts are delimited by [header] elements
#   - You can enter hostnames or ip addresses
#   - A hostname/ip can be a member of multiple groups

# Ex 1: Ungrouped hosts, specify before any group headers.

## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10

# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110

# If you have multiple hosts following a pattern you can specify
# them like this:

## www[001:006].example.com

# Ex 3: A collection of database servers in the 'dbservers' group

## [dbservers]
## 
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
## 10.25.1.56
## 10.25.1.57

# Here's another example of host ranges, this time there are no
# leading 0s:

## db-[99:101]-node.example.com

#ssh服务非标准22端口,可以加端口指定
ntp.magedu.com 
[webservers] 
www1.magedu.com:2222  www2.magedu.com  
[dbservers]  
db1.magedu.com 
db2.magedu.com 
db3.magedu.com 

#列表方式通配主机名
[websrvs]
www[1:100].example.com 
 
[dbsrvs] 
db-[a:f].example.com 

/etc/ansible/ansible.cfg

一般保持默认

  1 # config file for ansible -- https://ansible.com/
  2 # ===============================================
  3 
  4 # nearly all parameters can be overridden in ansible-playbook
  5 # or with command line flags. ansible will read ANSIBLE_CONFIG,
  6 # ansible.cfg in the current working directory, .ansible.cfg in
  7 # the home directory or /etc/ansible/ansible.cfg, whichever it
  8 # finds first
  9 
 10 [defaults]
 11 
 12 # some basic default values...
 13 
 14 #inventory      = /etc/ansible/hosts
 15 #library        = /usr/share/my_modules/
 16 #module_utils   = /usr/share/my_module_utils/
 17 #remote_tmp     = ~/.ansible/tmp
 18 #local_tmp      = ~/.ansible/tmp
 19 #plugin_filters_cfg = /etc/ansible/plugin_filters.yml
 20 #forks          = 5
 21 #poll_interval  = 15
 22 #sudo_user      = root
 23 #ask_sudo_pass = True
 24 #ask_pass      = True
 25 #transport      = smart
 26 #remote_port    = 22
 27 #module_lang    = C
 28 #module_set_locale = False
updatedupdated2021-03-092021-03-09
加载评论