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

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

nanshan 2025-01-09 15:06 11 浏览 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

相关推荐

Let’s Encrypt免费搭建HTTPS网站

HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...

使用Nginx配置TCP负载均衡(nginx tcp负载)

假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...

Nginx负载均衡及支持HTTPS与申请免费SSL证书

背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...

HTTPS配置实战(https配置文件)

原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...

只有IP地址没有域名实现HTTPS访问方法

一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...

超详解:HTTPS及配置Django+HTTPS开发环境

众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...

Godaddy购买SSL之后Nginx配置流程以及各种错误的解决

完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...

Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)

一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...

阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问

参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...

你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具

NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...

从零开始搭建HTTPS服务(搭建https网站)

搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...

群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问

安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...

让网站快速升级HTTPS协议提高安全性

为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...

用Https方式访问Harbor-1.9版本(https访问流程)

我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...

如何启用 HTTPS 并配置免费的 SSL 证书

在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...

取消回复欢迎 发表评论: