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

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

off999 2024-09-18 22:33 23 浏览 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

相关推荐

Python Flask 容器化应用链路可观测

简介Flask是一个基于Python的轻量级Web应用框架,因其简洁灵活而被称为“微框架”。它提供了Web开发所需的核心功能,如请求处理、路由管理等,但不会强制开发者使用特定的工具或库。...

Python GUI应用开发快速入门(python开发软件教程)

一、GUI开发基础1.主流GUI框架对比表1PythonGUI框架比较框架特点适用场景学习曲线Tkinter内置库,简单小型应用,快速原型平缓PyQt功能强大,商用许可专业级桌面应用陡峭PySi...

【MCP实战】Python构建MCP应用全攻略:从入门到实战!

实战揭秘:Python Toga 打造跨平台 GUI 应用的神奇之旅

在Python的世界里,GUI(图形用户界面)开发工具众多,但要找到一款真正跨平台、易于使用且功能强大的工具并不容易。今天,我们就来深入探讨一下Toga——一款Python原生、操作系统原...

python应用目录规划(python的目录)

Python大型应用目录结构规划(企业级最佳实践)核心原则模块化:按业务功能拆分,高内聚低耦合可扩展性:支持插件机制和动态加载环境隔离:清晰区分开发/测试/生产环境自动化:内置标准化的构建测试部署流...

Python图形化应用开发框架:PyQt开发简介

PyQt概述定义:PyQt是Python绑定Qt框架的工具集,用于开发跨平台GUI应用程序原理:通过Qt的C++库提供底层功能,PyQt使用SIP工具生成Python绑定特点:支持Windows/ma...

[python] 基于PyOD库实现数据异常检测

PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点。异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误、噪声或潜在的有趣现象。无论是处理小规模项目还是大型...

Python、Selenium 和 Allure 进行 UI 自动化测试的简单示例脚本

环境准备确保你已经安装了以下库:SeleniumAllurepytest你可以使用以下命令安装所需库:pipinstallseleniumallure-pytestpytest示例代码下面的代...

LabVIEW 与 Python 融合:打造强大测试系统的利器

在现代测试系统开发领域,LabVIEW和Python各自凭借独特优势占据重要地位。LabVIEW以图形化编程、仪器控制和实时系统开发能力见长;Python则凭借丰富的库资源、简洁语法和强大数...

软件测试进阶之自动化测试——python+appium实例

扼要:1、了解python+appium进行APP的自动化测试实例;2、能根据实例进行实训操作;本课程主要讲述用python+appium对APP进行UI自动化测试的例子。appium支持Androi...

Python openpyxl:读写样式Excel一条龙,测试报表必备!

无论你是测试工程师、数据分析师,还是想批量导出Excel的自动化工作者,只需一个库openpyxl,即可高效搞定Excel的各种需求!为什么选择openpyxl?支持.xlsx格式...

Python + Pytest 测试框架——数据驱动

引言前面已经和大家介绍过Unittest测试框架的数据驱动框架DDT,以及其实现原理。今天和大家分享的是Pytest测试框架的数据驱动,Pytest测试框架的数据驱动是由pytest自...

这款开源测试神器,圆了我玩游戏不用动手的梦想

作者:HelloGitHub-Anthony一天我在公司用手机看游戏直播,同事问我在玩什么游戏?我和他说在看直播,他恍然大悟:原来如此,我还纳闷你玩游戏,咋不用动手呢。。。。一语惊醒梦中人:玩游戏不用...

Python单元测试框架对比(pycharm 单元测试)

一、核心框架对比特性unittest(标准库)pytest(主流第三方)nose2(unittest扩展)doctest(文档测试)安装Python标准库pipinstallpytestp...

利用机器学习,进行人体33个2D姿态检测与评估

前几期的文章,我们分享了人脸468点检测与人手28点检测的代码实现过程,本期我们进行人体姿态的检测与评估通过视频进行人体姿势估计在各种应用中起着至关重要的作用,例如量化体育锻炼,手语识别和全身手势控制...

取消回复欢迎 发表评论: