百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

运维必会:基于 Ansible 的 Docker 自动化部署,小白也能看懂?

off999 2024-09-18 22:33 36 浏览 0 评论

Ansible 是一个 Python 写的自动化工具,这个工具可以实现集群自动化管理,然后进行一些常用的运维操作。

现在的公司很多都是使用的集群部署服务,少则几台虚拟机,多则几百上千台虚拟机,有的时候需要对一个集群或者多个集群集中进行运维操作,那么这个时候,Ansible 就可以实现批量操作了。

我在公司主要负责的任务就是关于服务的自动化部署和运维,公司本身就属于云服务,而且非常多,所以部署的方式也有很多种版本,我接触到的自动化平台主要包括一下几种:

  1. 以 Ansible 脚本为主导而搭建的自动化部署升级平台
  2. 以类似 Jenkins 流水线而搭建的自动化构建和部署平台
  3. 以 SDK 包为基础,以 Python 脚本执行主导的运维平台
  4. Docker 容器+编排

本文分享一下使用 ansible 自动化安装 docker 和 docker-compose 的经验。

1、安装ansible

ansible 的管理机必须安装 python2,但是有个非常重要的点,那就是 Windows 不可以当做管理机,主机系统可以是 Red Hat, Debian, CentOS, OS X, BSD 的各种版本。

使用pip安装

由于 ansible 是一个 python 写的包,所以可以直接当做一个普通的第三方库来安装,直接运行命令安装即可:

sudo pip install ansible

使用yum或者apt-get安装

ansible 也可以直接使用系统的包管理工具来安装,比如 CentOS 的 yum 命令:

sudo yum install ansible

Ubuntu 系统的 apt-get 命令:

sudo apt-get install software-properties-common

sudo apt-add-repository ppa:ansible/ansible

sudo apt-get update

sudo apt-get install ansible

2、Ansible基本用法

使用 ansible-playbook

ansible-playbook 也称之为剧本,是 ansible 把一系列自动化操作按照一定的执行顺序和执行逻辑进行组合起来的模块,使用这个模块可以更加方便地管理 ansible 任务。

ansible-playbook 命令可以作为运行一个 ansible 任务的开始,具体如何使用,可以查看帮助,下面这条是一般启动命令:

ansible-playbook docker.yml -i hosts -u alex -k -K

这个命令可以指定一个操作的用户,后续需要输入用户的密码和sudo命令。

由于 ansible 有很多非常有用的模块和命令可以使用,但是没有人能够全部记住每个模块命令,但是 ansible 有一个非常有用的命令使用查询文档,直接使用命令就可以查看某个模块的用法,还有例子:

# 列出所有模块

ansible-doc -l




# 列出yum模块的使用方式

ansible-doc yum

ansible-playbook 目录结构

下面是一个 ansible-playbook 项目的基本目录结构,具体的目录和文件作用已经注释出来:

├── group_vars           <- 所有主机的公共变量存放位置

│   └── all

├── hosts                <- 需要管理的主机的列表信息

├── roles              <- roles 存放模块, 当前有 etcd, initial, loop 三个模块

│   ├── etcd

│   │   ├── files                    <- 需要直接复制到 client 的文件存放位置

│   │   │   └── etcd-proxy.service            <--即每个主机配置一样

│   │   ├── handlers                     <- 用于服务管理用的控制文件

│   │   │   └── main.yml

│   │   ├── tasks                        <- ansible 任务文件

│   │   │   ├── config.yml

│   │   │   ├── main.yml

│   │   │   ├── package.yml

│   │   │   └── service.yml

│   │   └── templates                <- 需要复制到 client 中的模板文件, 会配合变量进行配置变换

│   │       └── etcd-proxy.conf       <-- 即每个主机配置可能不一样

│   ├── initial

│   │   ├── files

│   │   │   ├── hosts

│   │   │   ├── resolv.conf

│   │   │   └── updatedb.conf

│   │   ├── handlers

│   │   ├── tasks

│   │   │   ├── main.yml

│   │   │   ├── mlocate.yml

│   │   │   ├── package.yml

│   │   │   ├── sysctl.yml

│   │   │   └── yumrepo.yml

│   │   └── templates

│   │       ├── centos7.repo

│   │       └── docker.repo

│   └── loop

│       ├── files

│       ├── handlers

│       ├── tasks

│       │   ├── main.yml

│       │   └── t1.yml

│       └── templates

└── site.yml                           <- 主控制入口文件

ansible 安装 docker

我写了一个使用 ansible 自动化安装 docker 的剧本,

项目地址:https://github.com/Hopetree/ansible-demos/tree/master/install_docker

适合于在 CentOS 系统上面执行 docker 的安装。这个剧本做的事情包括判断 docker 是否可以用,然后包括安装 docker,添加用户到 docker 组,安装pip 和 docker-compose 等。剧本目录如下:

尽量使用内置模块

所谓尽量使用内置模块的意思是当可以使用 shell 模块执行命令也可以使用内置的模块执行命令的时候应该尽量使用内置模块,比如下面这种,前面一种是使用命令行来安装包,后面一种是直接使用 yum 模块:

# 使用shell 命令行安装

- name: install yum-utils

  shell: yum install yum-utils




# 使用yum 模块安装

- name: install yum-utils

  yum:

    name: yum-utils

    state: present

还有下面这种直接使用pip模块的:

- name: install docker-compose
  pip:
    name: docker-compose
    extra_args: "-i {{ pip.index_url }} --trusted-host {{ pip.trusted_host }}"

register+when的使用

register 可以用来把一个步骤的执行结果赋值到一个变量中,而 when 就可以用来判断一个变量的结果,所以通常可以把这两个模块结合起来使用。比如下面这段,第一个步骤是使用docker -v命令查询 docker 版本,然后第二个步骤判断当 docker 不可用的时候就执行 docker 安装。

- name: check docker

  shell: docker -v

  register: result

  ignore_errors: True




- name: include tasks yaml if not docker

  include_tasks: install.yml

  when: result is failed

执行结果

来源:https://cloud.tencent.com/developer/article/2123531

相关推荐

不小心抹掉了mac内置的磁盘(不小心抹掉了mac内置的磁盘怎么恢复)

因为你进入的是恢复磁盘,恢复磁盘是基于mac的。自己不能抹掉自己吧。所以抹不掉。如果你要彻底抹掉的话,开机按option+command+r,wifi下载网络恢复磁盘,就可以抹掉了。您可以按住COMM...

开机界面切换用户不见了win7
开机界面切换用户不见了win7

开始--运行(或者WIN+R),键入“msconfig”,单击“确定”或回车,运行“系统配置实用程序”。在“启动”里把“Ctfmon.exe”选中,单击“确定”开始--运行,输入“ctfmon.exe”回车,再输入“msconfig”启动,...

2025-12-13 00:03 off999

win7旗舰版进入安全模式(win7旗舰版进入安全模式无法启动)

win7安全模式怎么进?  一、开机时按F8键  当你重启或开机时,在进入Windows系统启动画面之前按下F8键,会出现系统多操作启动菜单,有三个版本的安全模式可以选择,回车就直接进入安全模式。  ...

ps手机版下载中文免费版2025

ps2023对电脑要求高。ps2022版本对电脑配置要求是:1、内存要求在一32G和64G之间。2、硬盘要求选择7200转机械硬盘,4k以上分辨,就选择SSD固态硬盘。3、CPU要求睿频在4.1GHZ...

苹果电脑如何下载windows系统

下载后安装BootCamp,之后在[应用程序]的[实用程序]中找到BootCamp助理,下面就可以开始安装Windows前的准备工作了。  第一步是要用BootCamp助理刻录一张驱动程序的CD...

efi系统分区什么意思(efi系统分区的作用)

ud空间是指存放PE启动文件的分区;efi空间是指存放UEFI启动文件的分区。系统U盘(PE启动盘)的制作方法,一共分为三种。三分区法是其中的一种,三分区法就是一个U盘被分成了三个区,两边的分区是隐藏...

无需u盘重装系统(无需u盘安装系统)

可以通过以下步骤在不使用U盘的情况下重装Win7系统:首先需要备份您的电脑中的重要数据,以免在系统重装时丢失。进入系统的“控制面板”,找到“系统与安全”选项并单击进入。在“系统与安全”页面中,找到“备...

改无线网密码的网址(改无线网密码的网站)

  移动宽带无线网改密码,可以在移动网上营业厅办理,但更简单的办法是通过短信办理(详见如下第2条):  移动无线宽带短信操作方式:  1)开通业务:编写短信“KTWLAN”发送至10086。  注:短...

英伟达驱动怎么更新(英伟达驱动在哪儿更新)
  • 英伟达驱动怎么更新(英伟达驱动在哪儿更新)
  • 英伟达驱动怎么更新(英伟达驱动在哪儿更新)
  • 英伟达驱动怎么更新(英伟达驱动在哪儿更新)
  • 英伟达驱动怎么更新(英伟达驱动在哪儿更新)
c盘满了却不敢删(c盘满了清不掉)

1、运用磁盘清理软件清理C盘,大约可为C盘释放50M-800M空间。2、关闭休眠功能,在开始菜单的运行里输入powercfg-hoff指令,关闭休眠,此文件实际大小和物理内存是一样的,大约可以...

联想笔记本电脑怎么打开摄像头
联想笔记本电脑怎么打开摄像头

联想笔记本怎么打开摄像头?1、点击电脑开始菜单栏,在弹出的窗口中点击【设置】。2、在”隐私和安全性“面板中点击【相机】选项。3、将【摄像头访问】右侧的开关打开。材料/工具:以联想Y460笔记本为例。操作步骤如下:1、在电脑的桌面,打开我...

2025-12-12 19:51 off999

win732纯净版系统gho(win732纯净版下载)

一,win7x32gho指的是32位的Windows7操作系统,gho指的是ghost方式封装的镜像文件,一般这种都是盗版系统。二,如果自己需要安装64位系统就不要选这个,内存低于3GB可以安装win...

pscs6激活账户(pscs6激活账户和序列号免费)

pscs6破解补丁是AdobePhotoShopCs6版本的破解激活补丁,使用后不会弹出购买窗口,实现完美破解,无任何限制破解版软件扩展功能好像不好用!要用需要的扩展功能可以在网上下载需要的插件...

键盘皮肤下载(键盘皮肤下载软件免费有音效)

1、vivo自带的输入法不能更换键盘皮肤;2、建议可以下载第三方输入法更换皮肤,比如:搜狗输入法等;3、下载第三方输入法之后需要在设置-更多设置-输入法中设置为第三方的输入法使用;4、然后在输入法界面...

win11如何格式化硬盘(win11硬盘分区怎么改成gpt)

win11系统格式化电脑和硬盘的方法如下1、打开本地磁盘管理页面,右键点击需要格式化的磁盘,选择【格式化】。2、在弹出的窗口中,勾选【快速格式化】,点击【开始】。3、最后等待格式化完成即可。1.首先我...

取消回复欢迎 发表评论: