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
之后有改动会继续更新