自动化工具Ansible的使用操作


Ansible是通过SSH协议实现对远程服务器进行自动化,集中化的配置管理、应用部署等,结合Jenkins来实现自动化部署,今天重新在新的机器上部署k8s,用到Ansible,so记录一下

相比于SaltStack,Fabric,Puppet等自动化工具,我这里选择Ansible的原因是轻巧便捷易操作更方便简化工时,其他的自动化工具以后在用到在记录

Ansible的官方文档:https://ansible-tran.readthedocs.io/en/latest/index.html

一、Ansible部署

1.1 环境及安装

我这里的部署环境为三台子节点一台主节点

  • 192.168.1.128 主
  • 192.168.1.129 子
  • 192.168.1.130 子
  • 192.168.1.131 子
  • 操作系统:CentOS Linux release 8.3.2011

在主节点进行安装Ansible,用于管理子节点服务器

yum install ansible -y 

由于是新机器,我这里出现Error: Unable to find a match: ansible,是因为新机器没有配置 yum 源,那么我们这里安装 EPEL 源

[root@192 ~]# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

完成以上我们即可安装Ansible

1.2 Ansible配置

接下来进行修改Ansible要管理的子节点服务器,我们进入Ansible的目录看一下都有什么

  • ansible.cfg:Ansible的配置文件

  • hosts:服务器子节点信息

这里我们用到hosts这个文件

[root@tool-server ~]# vim /etc/ansible/hosts

添加一下你的服务器信息,[]里为组的名称,管理的时候执行组名即可

接下来生成一下shh私钥复制到子节点上,以实现ssh免密访问,ssh免密在之前的ambari大数据文章中详细介绍过,这里再简单说一下

[root@192 ansible]# ssh-keygen

让你选择存放位置和秘钥信息,一路回车即可,接下来进行复制,输入yes以及子节点服务器的密码即可完成免密访问

[root@192 ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.128
[root@192 ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.129
[root@192 ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.130
[root@192 ansible]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.131

1.3 测试Ansible

测试Ansible个节点是否连接通

[root@192 ~]# ansible k8s -m ping

可以看到连接到子节点完全没问题

二、Ansible使用

2.1 Ansible命令

通过上面测试的ping命令我们可以知道执行Ansible的命令格式为:ansible [组名] -m "模块名" -a "需要执行的操作"

#查看所有模块
ansible-doc -l   
# 查看某个模块详情      
ansible-doc -s fetch   

常用Ansible命令模块:

# 执行命令                            
command                                  
# 执行shell		 
shell                        			 
# 远程执行本地脚本            			 
script                       			 
# 获取主机的基本信息                       
setup                                  
# 文件操作,创建、删除、修改                              
file                                 
# 拷贝文件                              
copy                                
# 查找文件                              
find                                  
# 替换文件中的字符串                              
replace                                  
# 操作文件中的一段文本                              
blockinfile                                 
# 操作某行中的一段文本                               
lineinfile                               
# 管理用户                                 
user                                  
# 管理组                              
group                                 
# 管理yum仓库                               
yum_repository                               
# 通过yum管理软件包                                 
yum                               
# 管理定时任务                                 
cron                                  
# 管理主机服务                              
service         

2.2 playbook

playbook是ansible实现配置、部署、编排的载体,是一个YAML格式的文本文件,主机通过编写playbook来实现业务逻辑,其中每一个task就是调用Ansible的一个命令模块

ansible playbook官方文档参考:http://www.ansible.com.cn/docs/playbooks_intro.html#about-playbooks

playbook操作命令

# 执行playbook
ansible-playbook test.yml                        

ansible-playbook --syntax-check test.yml        # 检查playbook中yaml语法

playbook的yml结构,这里以apache为例

---
- hosts: k8s                                      # 主机列表,可以是主机分组名,可以是ip地址
  vars:
    http_port: 80
    max_clients: 200
  remote_user: root
  tasks:
  - name: ensure apache is at the latest version  # 定义任务的名称
    yum: pkg=httpd state=latest                   # yum任务安装调用的必要的依赖
  - name: write the apache config file
    template: src=/srv/httpd.j2 dest=/etc/httpd.conf
    notify:
    - restart apache                              # 结束时触发操作,通过handlers来定义
  - name: ensure apache is running                # 定义任务的名称
    service: name=httpd state=started
  handlers:# 与notify定义的内容对应
    - name: restart apache
      service: name=httpd state=restarted

*[·-·]:

*[·-·]:

*[·-·]:

playbook的条件选择when以及Roles,这里暂时参考官方文档http://www.ansible.com.cn/docs/playbooks_conditionals.html

之后有改动会继续更新