使用ansible在多台客户机安装docker

文章目录

Install ansible on server

  • Ansible是一个开源配置管理工具,可以使用它来自动化任务,部署应用程序实现IT基础架构。Ansible可以用来自动化日常任务,比如,服务器的初始化配置、安全基线配置、更新和打补丁系统,安装软件包等
  • Ansible包括控制节点(Control node)也叫主机,受控节点(Managed nodes)也叫客户机,只在控制节点安装就好了

ansible 优点

  • 只需要在主机上安装ansible软件,客户机不需要安装
  • 通讯协议SSH协议和SFTP
  • 可并行执行程序,默认情况下,forks值为5,可以按需,在配置文件中增大该值

ansible(centos)安装和配置

  • yum install ansible

  • 为了使Ansible与客户端通信,需要使用用户帐户配置管理机和客户机。为了方便快捷安全,一般会配置证书方式连接客户机

    1ssh-keygen
    2ssh-copy-id ansible@node ip
    

使用ad-hoc 在客户执行命令,相当于命令行

  • /etc/ansible/hosts,最好谨慎使用hosts配置,安全问题需要解决

    1[docker]
    2
    3 192.168.25.173 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass="xxx"
    
  • 执行以下ping,命令里面的docker对应的上面文件的docker

    1ansible docker -m ping
    
  • 使用ad-hoc命令管理软件包,安装

    1ansible docker -m yum -a "name=docker state=present" -b
    
  • 使用ad-hoc命令管理软件包,设置默认启动

    1ansible docker -b -m service -a "name=docker  enabled=yes"
    
  • 使用ad-hoc命令管理软件包,启动

    1ansible docker -b -m service -a "name=httpd state=started"
    

使用ansible-playbook 部署docker

  • test-ansile.yml 文件内容

     1  ---
     2  - hosts: docker
     3  remote_user: docker
     4  become: yes
     5  become_method: sudo
     6  vars:
     7      container_name: "robotic"
     8      container_image: "test-prod:{{container_version}}"
     9      registry_url: "ecr.test.amazonaws.com"
    10      working_dir: "/data/docker_test"
    11
    12  tasks:
    13      - name: remove container
    14      docker_container:
    15          name: "{{ container_name }}"
    16          state: absent
    17
    18      - name: install aws cli
    19      shell: |
    20          yum install awscli -y
    21      - name: rm config
    22      shell: |
    23          rm -rf /root/.aws;mkdir /root/.aws
    24      - name: create config for aws user
    25      shell: |
    26          echo "[profile ecr]" >>/root/.aws/config
    27          echo "region = ap-southeast-1" >>/root/.aws/config
    28      - name: create credential
    29      shell: |
    30          echo "[ecr]" >>/root/.aws/credentials
    31          echo "aws_access_key_id = xxx"  >>/root/.aws/credentials
    32          echo "aws_secret_access_key = xxx"  >>/root/.aws/credentials
    33      - name: docker login
    34      shell: |
    35          loginstr=`aws ecr get-login --no-include-email --profile ecr`
    36          bash $loginstr
    37      - name: create working_dir directory
    38      file:
    39          path: "{{ item }}"
    40          state: directory
    41      with_items:
    42          - "{{ working_dir }}"
    43
    44      - name: create container
    45      docker_container:
    46          name: "{{ container_name }}"
    47          image: "{{registry_url}}/{{ container_image }}"
    48          privileged: yes
    49          restart_policy: always
    50          ports:
    51          - "80:80"
    
  • 执行ansible文件

    1ansible-playbook -i /etc/ansible/hosts test-ansible.yml --extra-vars "container_version=${BUILD_NUMBER}"