使用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}"