Ansible与Docker集成:实现容器化运维自动化

工作原理

Ansible 分为控制端和被控端。根据其中定义的规则获取Inventory中的管理主机列表,然后基于 SSH 协议连接到被控端主机,调取本地的各个模块对被控端机器实现批量、并发的配置管理和维护。如果任务比较复杂,可以写成PlayBook剧本进行分发管理。

ansible的四大组件:

ansible批量安装docker

准备3台机器,1台master,2台node建立免密通道

1.安装docker依赖软件包

[root@docker playbooks]# vim installDocker.yaml

[root@docker playbooks]# ansible-playbook installDocker.yaml

这个 Playbook 任务的功能是使用 Ansible 的 yum 模块,在指定的目标主机上安装 yum-utilsdevice-mapper-persistent-datalvm2 这三个软件包,为后续安装和配置 Docker 提供必要的依赖环境。

  • name: Install required packages:此任务的名称,说明了要安装必需的软件包。
  • yum:这是 Ansible 里的一个模块,用于在基于 RPM 的系统(如 CentOS)上管理软件包。
  • name:列出需要安装的软件包名称。
  • state: present:表示要确保这些软件包已安装。

==========================================

在目标主机上验证依赖安装成功,yum list installed 命令检查软件包安装情况

 以下配置全部写到installDocker.yaml文件里:

# 指定该Playbook要在Ansible主机清单中定义的所有主机上执行
- hosts: all
  # 指定以root用户的身份在远程主机上执行任务
  remote_user: root
  # 定义一个任务列表,包含一系列要在目标主机上执行的操作
  tasks:
    # 为当前任务命名,便于在执行Playbook时识别操作内容
    - name: Install required packages
      # 使用Ansible的yum模块,该模块用于基于RPM的Linux系统(如CentOS、Red Hat)管理软件包
      yum:
        # 指定要安装的软件包名称列表
        name:
          # yum-utils包含实用的YUM工具,例如yum-config-manager可用于管理YUM仓库
          - yum-utils
          # device-mapper-persistent-data为设备映射器提供持久化数据支持,是Docker存储驱动的依赖
          - device-mapper-persistent-data
          # lvm2是逻辑卷管理工具集,提供灵活的磁盘空间管理,也是Docker存储管理的依赖
          - lvm2
        # 确保指定的软件包已经安装在目标主机上
        # 若软件包未安装,Ansible会使用YUM自动下载并安装;若已安装则不进行操作
        state: present
 2. 配置 Docker 仓库(使用阿里云的 Docker 镜像仓库)

通过 yum_repository 模块在系统中添加了 Docker 的软件仓库,并配置了必要的参数,为后续使用 yum 命令安装 Docker 相关软件包做好准备。

==========================================

在目标主机上验证设置 Docker 的软件仓库是否配置成功

    # 任务名称,表明此任务用于添加阿里云的 Docker CE 镜像仓库
    - name: Add Docker CE repository from Alibaba Cloud mirror
      # 使用 shell 模块执行 shell 命令
      shell: yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
      args:
        # creates 参数用于检查文件是否存在,如果 /etc/yum.repos.d/docker-ce.repo 已存在,该任务将不会再次执行
        creates: /etc/yum.repos.d/docker-ce.repo
3. 安装 Docker CE
  • name: Install Docker CE:任务名称,表明要安装 Docker CE。
  • yum:同样是用于管理软件包的模块。
  • name:列出需要安装的 Docker 相关软件包名称。
  • state: present:确保这些软件包已安装。
    # 任务名称,表明此任务用于安装 Docker CE 及其相关组件
    - name: Install Docker CE
      # 使用 yum 模块来管理基于 RPM 的系统中的软件包
      yum:
        # 指定要安装的 Docker 相关软件包列表
        name:
          # Docker 社区版
          - docker-ce
          # Docker 社区版命令行工具
          - docker-ce-cli
          # 容器运行时
          - containerd.io
        # 确保这些软件包处于已安装状态
        state: present
4. 启动并设置 Docker 服务开机自启

全部执行成功!!

在目标主机上验证设置 Docker状态

    # 任务名称,表明此任务用于启动 Docker 服务并设置为开机自启
    - name: Start and enable Docker service
      # 使用 systemd 模块来管理系统服务
      systemd:
        # 指定要管理的服务名称为 docker
        name: docker
        # 启动 Docker 服务
        state: started
        # 设置 Docker 服务为开机自启
        enabled: true

ansible批量配置docker

1.修改docker镜像源,拉取镜像需修改本机/etc/docker/daemon.json配置文件(没有就新建)

再使用ansible批量copy到别的机器

[root@docker playbooks]# ansible all -m copy -a 'src=/etc/docker/daemon.json dest=/etc/docker/daemon.json'

2.批量重载配置文件并重启docker

[root@docker playbooks]# ansible all -m shell -a 'systemctl daemon-reload'

[root@docker playbooks]# ansible all -m shell -a 'systemctl restart docker'

 一个简单的Ansible Playbook示例,用于创建一个Nginx容器:

 

在目标主机验证 Nginx 容器是否正常运行:

执行成功!

# YAML 文件的起始标记,表明这是一个 YAML 格式的文件
---
# 定义一个 play,每个 play 以短横线 - 开头,play 是 Ansible Playbook 中的一个执行单元
-
  # 指定此 play 要执行的目标主机,这里 all 表示所有在主机清单中定义的主机
  hosts: all
  # 指定以 root 用户身份连接到远程主机并执行任务
  remote_user: root
  # 定义变量,指定使用 Python 3 解释器来执行任务,避免因 Python 版本不一致导致库找不到的问题
  vars:
    ansible_python_interpreter: /usr/bin/python3
  # 定义此 play 要执行的一系列任务
  tasks:
    # 任务名称,表明该任务用于安装 Docker SDK for Python 和 requests 库
    - name: Install Docker SDK for Python and requests
      # 使用 pip 模块来安装 Python 库
      pip:
        # 指定要安装的库名称
        name:
          - docker
          - requests
        # 指定使用 pip3 来安装库,确保安装到 Python 3 环境中
        executable: pip3
    # 任务名称,表明该任务用于拉取 Nginx 镜像
    - name: Pull Nginx image
      # 使用 docker_image 模块来管理 Docker 镜像
      docker_image:
        # 指定要操作的镜像名称为 nginx
        name: nginx
        # 确保镜像在本地存在,如果本地没有则会从镜像仓库拉取
        state: present
        # 显式指定镜像来源为从远程仓库拉取,避免未来版本 Ansible 的兼容性警告
        source: pull
    # 任务名称,表明该任务用于运行一个 Nginx 容器
    - name: Run Nginx container
      # 使用 docker_container 模块来管理 Docker 容器
      docker_container:
        # 指定要创建的容器的名称为 nginx_container
        name: nginx_container
        # 指定创建容器所使用的镜像为 nginx
        image: nginx
        # 配置容器的端口映射,将主机的 8033 端口映射到容器内部的 80 端口
        ports:
          - "8033:80"
        # 确保容器处于启动状态,如果容器未启动则会启动它
        state: started

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值