自动化运维工具
部署类:jenkins
环境类:ansible
监控类:ngios
运维发展的不同阶段
传统运维:(效率低、无法跨平台、资源分散、无标准)
命令行
批量脚本
自动化运维:是一组将静态的设备转化为根据IT服务需求动态弹性响应的策略,目的就是实现IT运维的高质量,降低成本(高效率、平台化、标准化、流程化)
云运维
运维自动化设计思想
管理体系化
工作流程化
人员专业化
任务自动化:环境定义自动初始化、部署自动化、监控自动化
why python??
自动化运维关心的问题:自动化、易实现、跨平台、轻量级
运维人员的技能:编程能力偏弱、熟悉运维、散发能力偏弱
适合自动化运维的编程语言:丰富的第三方库、学习成本低、跨平台、轻量级
为什么是python
《python简明教程》短时间可学完
丰富的库,如ansible、ssh
大量的python编写的运维工具。如salt
跨平台的,安装python虚拟机即可运行
用python实现一个自动安装脚本
功能需求
下载指定版本python源码
安装python需要依赖的库
编译安装python
笔记截图222
传统命令行
python基础知识
自动化韵味的概念
检查项
修改SSH配置文件 (主从配置)
vi /etc/ssh/sshd_config
开放四个配置 (主从配置)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin yes
重启服务
配置项
cd ~/.ssh
ssh-keygen -t rsa
cat id_rsa.pub----公钥内容
:添加目标节点的SSH认证信息
#ssh-copy-id root@目标节点IP
把产生的公钥复制到从节点的authorized_keys
vim ~/.ssh/authorized_keys
ansible的安装
这里的安装环境是centos7.5版本操作系统,首先需要安装第三方epel源:
[root@ACA8D5EF ~]# yum install epel-release
Ansible依赖python环境,同时,Ansible已经是RHEL/Centos的一个组成部分,因此推荐通过yum安装ansible:
[root@ACA8D5EF ~]# yum install ansible
检查是否安装正确
ansible sa -m ping
ansible主机和组的配置
3.1、简单的主机和组
ansible的配置文件位于/etc/ansible目录下,主要有ansible.cfg、hosts文件。本节重点介绍主机与组定义文件/etc/ansible/hosts.
/etc/ansible/hosts最简单的格式如下:
www.ixdba.net
[webservers]
ixdba1.net
ixdba2.net
[dbservers]
db.ixdba1.net
db.ixdba2.net
中括号中的名字代表组名,可以根据需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;
主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;
未分组的机器需保留在hosts的顶部。
3.2、指定主机范围
可在/etc/ansible/hosts文件中,指定主机的范围,示例如下:
[web]
www[01:50].ixdba.net
[db]
db[a:f].ixdba.net
3.3、主机变量
以下是Hosts部分中经常用到的变量部分:
ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名
ansible_ssh_pass #ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type #目标系统的shell的类型,默认sh
ansible_connection #SSH 连接的类型:local , ssh , paramiko,在 ansible1.2之前默认是 paramiko ,后来智能选择,优先使用基于ControlPersist 的ssh
ansible_pythoninterpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl的路径
ansible_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里””可以是ruby或perl等其它语言
例子1:
[web]
192.168.78.11 http_port=80
192.168.78.12 http_port=80
还可以改成这样:
[web]
192.168.78.11
192.168.78.12
[web:vars]
http_port=80
例子2:
[webhost]
host1
host2
[dbhost]
host2
host3
[allhosts:children]
webhost
Dbhost
主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量。定义主机组之间的继承关系我们使用”:children”来表示.
四、 ansible.cfg与默认配置
/etc/ansible/ansible.cfg文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。
#inventory = /etc/ansible/hosts 该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表
#library = /usr/share/my_modules/ Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp 指定远程执行的路径
#local_tmp = ~/.ansible/tmp ansible管理节点的执行路径
#forks = 5 forks 设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。
#poll_interval = 15 轮询间隔
#sudo_user = root sudo使用的默认用户 ,默认是root
#ask_sudo_pass = True 是否需要用户输入sudo密码
#ask_pass = True 是否需要用户输入连接密码
#remote_port = 22 这是指定连接对端节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的
#module_lang = C 这是默认模块和系统之间通信的计算机语言,默认为’C’语言.
host_key_checking = False 跳过ssh首次连接提示验证部分,False表示跳过。
#timeout = 10 连接超时时间
#module_name = command 指定ansible默认的执行模块
#nocolor = 1 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:
#private_key_file=/path/to/file.pem 在使用ssh公钥私钥登录系统时候,使用的密钥路径
检查项
修改SSH配置文件 (主从配置)
vi /etc/ssh/sshd_config
开放四个配置 (主从配置)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin yes
重启服务
配置项
cd ~/.ssh
ssh-keygen -t rsa
cat id_rsa.pub----公钥内容
:添加目标节点的SSH认证信息
#ssh-copy-id root@目标节点IP
把产生的公钥复制到从节点的authorized_keys
vim ~/.ssh/authorized_keys
ansible的安装
这里的安装环境是centos7.5版本操作系统,首先需要安装第三方epel源:
[root@ACA8D5EF ~]# yum install epel-release
Ansible依赖python环境,同时,Ansible已经是RHEL/Centos的一个组成部分,因此推荐通过yum安装ansible:
[root@ACA8D5EF ~]# yum install ansible
检查是否安装正确
ansible sa -m ping
ansible主机和组的配置
3.1、简单的主机和组
ansible的配置文件位于/etc/ansible目录下,主要有ansible.cfg、hosts文件。本节重点介绍主机与组定义文件/etc/ansible/hosts.
/etc/ansible/hosts最简单的格式如下:
www.ixdba.net
[webservers]
ixdba1.net
ixdba2.net
[dbservers]
db.ixdba1.net
db.ixdba2.net
中括号中的名字代表组名,可以根据需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;
主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;
未分组的机器需保留在hosts的顶部。
3.2、指定主机范围
可在/etc/ansible/hosts文件中,指定主机的范围,示例如下:
[web]
www[01:50].ixdba.net
[db]
db[a:f].ixdba.net
3.3、主机变量
以下是Hosts部分中经常用到的变量部分:
ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名
ansible_ssh_pass #ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type #目标系统的shell的类型,默认sh
ansible_connection #SSH 连接的类型:local , ssh , paramiko,在 ansible1.2之前默认是 paramiko ,后来智能选择,优先使用基于ControlPersist 的ssh
ansible_pythoninterpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl的路径
ansible_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里””可以是ruby或perl等其它语言
例子1:
[web]
192.168.78.11 http_port=80
192.168.78.12 http_port=80
还可以改成这样:
[web]
192.168.78.11
192.168.78.12
[web:vars]
http_port=80
例子2:
[webhost]
host1
host2
[dbhost]
host2
host3
[allhosts:children]
webhost
Dbhost
主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量。定义主机组之间的继承关系我们使用”:children”来表示.
四、 ansible.cfg与默认配置
/etc/ansible/ansible.cfg文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。
#inventory = /etc/ansible/hosts 该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表
#library = /usr/share/my_modules/ Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp 指定远程执行的路径
#local_tmp = ~/.ansible/tmp ansible管理节点的执行路径
#forks = 5 forks 设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。
#poll_interval = 15 轮询间隔
#sudo_user = root sudo使用的默认用户 ,默认是root
#ask_sudo_pass = True 是否需要用户输入sudo密码
#ask_pass = True 是否需要用户输入连接密码
#remote_port = 22 这是指定连接对端节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的
#module_lang = C 这是默认模块和系统之间通信的计算机语言,默认为’C’语言.
host_key_checking = False 跳过ssh首次连接提示验证部分,False表示跳过。
#timeout = 10 连接超时时间
#module_name = command 指定ansible默认的执行模块
#nocolor = 1 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:
#private_key_file=/path/to/file.pem 在使用ssh公钥私钥登录系统时候,使用的密钥路径
检查项
修改SSH配置文件 (主从配置)
vi /etc/ssh/sshd_config
开放四个配置 (主从配置)
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin yes
重启服务
配置项
cd ~/.ssh
ssh-keygen -t rsa
cat id_rsa.pub----公钥内容
:添加目标节点的SSH认证信息
#ssh-copy-id root@目标节点IP
把产生的公钥复制到从节点的authorized_keys
vim ~/.ssh/authorized_keys
ansible的安装
这里的安装环境是centos7.5版本操作系统,首先需要安装第三方epel源:
[root@ACA8D5EF ~]# yum install epel-release
Ansible依赖python环境,同时,Ansible已经是RHEL/Centos的一个组成部分,因此推荐通过yum安装ansible:
[root@ACA8D5EF ~]# yum install ansible
检查是否安装正确
ansible sa -m ping
ansible主机和组的配置
3.1、简单的主机和组
ansible的配置文件位于/etc/ansible目录下,主要有ansible.cfg、hosts文件。本节重点介绍主机与组定义文件/etc/ansible/hosts.
/etc/ansible/hosts最简单的格式如下:
www.ixdba.net
[webservers]
ixdba1.net
ixdba2.net
[dbservers]
db.ixdba1.net
db.ixdba2.net
中括号中的名字代表组名,可以根据需求将庞大的主机分成具有标识的组,如上面分了两个组webservers和dbservers组;
主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址;
未分组的机器需保留在hosts的顶部。
3.2、指定主机范围
可在/etc/ansible/hosts文件中,指定主机的范围,示例如下:
[web]
www[01:50].ixdba.net
[db]
db[a:f].ixdba.net
3.3、主机变量
以下是Hosts部分中经常用到的变量部分:
ansible_ssh_host #用于指定被管理的主机的真实IP
ansible_ssh_port #用于指定连接到被管理主机的ssh端口号,默认是22
ansible_ssh_user #ssh连接时默认使用的用户名
ansible_ssh_pass #ssh连接时的密码
ansible_sudo_pass #使用sudo连接用户时的密码
ansible_sudo_exec #如果sudo命令不在默认路径,需要指定sudo命令路径
ansible_ssh_private_key_file #秘钥文件路径,秘钥文件如果不想使用ssh-agent管理时可以使用此选项
ansible_shell_type #目标系统的shell的类型,默认sh
ansible_connection #SSH 连接的类型:local , ssh , paramiko,在 ansible1.2之前默认是 paramiko ,后来智能选择,优先使用基于ControlPersist 的ssh
ansible_pythoninterpreter #用来指定python解释器的路径,默认为/usr/bin/python 同样可以指定ruby 、perl的路径
ansible_interpreter #其他解释器路径,用法与ansible_python_interpreter类似,这里””可以是ruby或perl等其它语言
例子1:
[web]
192.168.78.11 http_port=80
192.168.78.12 http_port=80
还可以改成这样:
[web]
192.168.78.11
192.168.78.12
[web:vars]
http_port=80
例子2:
[webhost]
host1
host2
[dbhost]
host2
host3
[allhosts:children]
webhost
Dbhost
主机组可以包含主机组,主机的变量可以通过继承关系,继承到最高等级的组的变量。定义主机组之间的继承关系我们使用”:children”来表示.
四、 ansible.cfg与默认配置
/etc/ansible/ansible.cfg文件中定义了ansible的主机的默认配置部分,如默认是否需要输入密码、是否开启sudo认证、action_plugins插件的位置、hosts主机组的位置、是否开启log功能、默认端口、key文件位置等等。
#inventory = /etc/ansible/hosts 该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表
#library = /usr/share/my_modules/ Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录
#module_utils = /usr/share/my_module_utils/
#remote_tmp = ~/.ansible/tmp 指定远程执行的路径
#local_tmp = ~/.ansible/tmp ansible管理节点的执行路径
#forks = 5 forks 设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。
#poll_interval = 15 轮询间隔
#sudo_user = root sudo使用的默认用户 ,默认是root
#ask_sudo_pass = True 是否需要用户输入sudo密码
#ask_pass = True 是否需要用户输入连接密码
#remote_port = 22 这是指定连接对端节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的
#module_lang = C 这是默认模块和系统之间通信的计算机语言,默认为’C’语言.
host_key_checking = False 跳过ssh首次连接提示验证部分,False表示跳过。
#timeout = 10 连接超时时间
#module_name = command 指定ansible默认的执行模块
#nocolor = 1 默认ansible会为输出结果加上颜色,用来更好的区分状态信息和失败信息.如果你想关闭这一功能,可以把’nocolor’设置为‘1’:
#private_key_file=/path/to/file.pem 在使用ssh公钥私钥登录系统时候,使用的密钥路径
运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性的策略,目的就是实现IT运维的质量,降低成本
自动化运维工具
部署类:jenkins
环境类:ansible
监控类:ngios
自动化运维关心的问题
运维自动化设计思想
什么是自动化运维?
自动化运维工具
python自动化运维
运维的长项 弱项
主要函数讲解2
主要函数讲解
python运维
运维自动化是一组将静态的设备结构转化为根据IT服务需求动态弹性的策略,目的就是实现IT运维的质量,降低成本
自动化运维工具
部署类:jenkins
环境类:ansible
监控类:ngios
os.system: 执行shell命令
主要函数raw_input()讲解(python3中改为了“input()”)
主要函数os.system讲解
功能实现的流程
1、判断root
2、等待用户输入python版本
3、执行shell命令,下载源码包
4、安装依赖开发包
5、编译安装python
功能需求
1、下载python源码
2、安装python依赖的库
3、编译安装python
选择python作为自动化运维工具的原因
1、简明易学
2、丰富的库,如ansible
3、大量python编写的运维工具,如salt
4、跨平台,安装python虚拟机即可运行
适合自动化运维编程语言特点
1、丰富的第三方库
2、学习成本低
3、跨平台
4、轻量级
运维人员的技能
1、编程能力偏弱
2、熟悉运维
3、算法能力偏弱
自动化运维关心的问题
1、自动化
2、易实现
3、跨平台
4、轻量级
运维自动化-----任务自动化
1、环境定义自动化
2、部署自动化
3、监控自动化