前言:代码管理知识点
企业中代码管理流程:
-
程序员会把编写好的代码通过 SVN、Git (GitLab(可本地化)、GitHub(网站,服务器收费)) 工具上传到代码版本管理系统中。
-
运维人员可以通过 SVN、Git 下载指定版本的代码,对代码封装打包构建镜像,在Docker 容器中运行。
-
Jenkins 通过一整套流水线自动进行持续的集成和构建,将镜像放到私有仓库中。
管理容器有以下几种方式:
单机编排工具:
- Docker compose
多机编排工具:
- Docker swarm + machine (Docker 自己的工具)
- K8s
- Ansible 应用级别的多机编排工具
比如通过初始化服务端服务器,再将初始化脚本传到各个服务器,再分别执行脚本。
服务器 同时/分批 对多台主机 进行自动化操作(比如 docker run 运行容器)。
一、Ansible 工具
- Ansible是一个开源IT引擎, 可自动执行应用程序部署, 云配置, 内部服务编排和其他IT工具。
- Ansible非常易于部署, 因为它在客户端不使用任何代理程序或自定义安全基础结构, 也不通过将模块推送到客户端。这些模块在客户端本地执行, 并将输出推回Ansible服务器。它可以使用SSH密钥轻松连接到客户端。
- Ansible 是一个基于 Python 开发的 配置管理 和 应用部署工具,在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点,Pabbet 和 saltstack 能实现的功能,Ansible基本上都可以实现。
- Ansible 能 批量配置、部署、管理上千台主机。比如以前需要切换到每个主机上执行的一或多个操作,使用 Ansible 只需在固定的一台 Ansible 控制节点上去完成所有主机的操作。
- Ansible 是基于模块工作的,它只是提供了一种运行框架,它本身没有完成任务的能力,真正执行操作的是 Ansible 的模块,比如:
- copy 模块 :用于拷贝文件到远程主机上;
- service 模块 :用于管理服务的启动、停止、重启等。
- Ansible 其中一个比较鲜明的特性是 Agentless,即无 Agent 的存在,它就像普通命令一样,并非 c/s 软件,也只需在某个作为控制节点的主机上安装一次 Ansible 即可,通常它基于 SSH 连接来控制远程主机,远程主机上不需要安装 Ansible 或其它额外的服务。
- 使用者在使用时,在服务器终端输入命令 或者 playbooks(剧本),会通过预定好的规则将 playbook 拆解为 play,再组织成 ansible 可以识别的任务,调用模块和插件,根据主机清单通过 SSH 将临时文件发给远程的客户端执行并返回结果,执行结束后自动删除。
- Ansible 的另一个比较鲜明的特性是它的 绝大多数模块都具备幂等性(idempotence)。所谓幂等性,指的是多次操作或多次执行对系统资源的影响是一致的。比如执行 systemctl stop xxx 命令来停止服务,当发现要停止的目标服务已经处于停止状态,它什么也不会做,所以多次停止的结果仍然是停止,不会改变结果,它是幂等的,而 systemctl restart xxx 是非幂等的。
- Ansible的很多模块在执行时都会先判断目标节点是否要执行任务,所以,可以放心大胆地让ansible去执行任务,重复执行某个任务绝大多数时候不会产生任何副作用。
特点:
Ansible 是基于模块工作的
客户端不需要安装配置Ansible 服务
绝大多数模块都具备幂等性
二、Ansible 环境部署
环境准备
准备三台机器
角色 | 服务器 | 所需服务 |
---|---|---|
管理端 | 192.168.10.50 | ansible |
被管理端 | 192.168.10.60 | |
被管理端 | 192.168.10.70 |
7-0 80.10 管理端
7-1 80.11 被管理端
7-2 80.12 被管理端
修改主机名好区分
192.168.10.50
hostnamectl set-hostname centos0
192.168.10.60
hostnamectl set-hostname centos1
192.168.10.70
hostnamectl set-hostname centos2
都关闭防火墙
使用在线yum源进行安装 Ansible 服务
//管理端安装ansible
yum install -y epel-release
//先安装epel源
yum install -y ansible
ansible 目录结构:
ls /etc/ansible/
ansible.cfg
#ansible的配置文件,一般无需修改hosts
#ansible的主机清单,用于存储需要管理的远程主机的相关信息roles/
#公共角色目录
配置主机清单hosts 文件:
cd /etc/ansible
vim hosts
[webservers] #配置组名1
192.168.10.60 #组1里包含的被管理的主机IP地址或主机名
[dbservers] #配置组名2
192.168.10.70 #组名2里包含的主机IP
注:(主机名需要先修改/etc/hosts文件)
设置SSH免密登录
//配置密钥对验证,执行ssh 加密类型为 rsa
ssh-keygen -t rsa
#一路回车
#使用免密登录
#指定客户服务器的验证密码
cd ~/.ssh/
sshpass -p '123456' ssh-copy-id root@192.168.10.60
sshpass -p '123456' ssh-copy-id root@192.168.10.70
再用 ssh root@192.168.80.12 就不用输入密码就能远程连接了。
因为 Ansiable 是基于SSH 连接到客户端,上面是为了之后免密登录。
到这基本配置好了。