Posted on:
Last modified:
ansible 的操作是幂等的,也就是说可以进行任意次操作而不会造成副作用。ansible 基于 ssh,不需要在目标机器上运行任何特殊的 agent。
pip3 install ansible
ansible 使用 hosts
文件来管理主机,每个 Hosts 中定义多个 Inventory,可以认为是分组的主机
默认位置:/etc/ansible/hosts
。可以使用 -i
来指定 Inventory 文件
[inventory_name]
192.168.0.1
# 或者域名
如果需要改变登录使用的用户名,可以在当前目录的 ansible.cfg
, $HOME/.ansible.cfg
或者 /etc/ansible/ansible.cfg
中指定:
[defaults]
remote_user=rabbit
see ec2.py
see https://github.com/lorin/ansible-quickref
ansible 使用 module 来组织命令。
-m module to run
-s use sudo
-k ask for key/password
-u user
-a 传递给 module 的参数
ansible -i ./hosts all -m ping
ansible -i ./hosts all -m shell -a "apt-get install nginx"
ansible -i ./hosts all -s -m apt -a "pkg=nginx state=installed update_cache=true"
响应
host | state >> {
"changed": false # whether the host is affected by the command
}
ansible 内置的 module 有:ping, shell
ansible 可以直接在命令行使用,但是最终需要的命令可能很长,不过最好的方式还是使用 playbook 来把需要运行的命令写成 yaml 文件。就像是 docker 的启动参数可以写成 docker-compose 配置一样。
- hosts: local
# define variables
vars:
- docroot: /var/www/serversforhackers.com/public
# more options goes here
# ...
# tasks are the basic action unit
tasks:
- name: Add Nginx Repository
# module apt_repository
apt_repository: repo="ppa:nginx/stable" state=present
# register an event
register: ppastable
- name: Install Nginx
apt: pkg=nginx state=installed update_cache=true
# listen an event, run only it happens
when: ppastable|success
register: nginxinstalled
# notify calles handlers
notify:
- Start Nginx
- name: Create Web Root
when: nginxinstalled|success
file: dest={{ "{{" }} docroot {{ "}}" }} mode=775 state=directory owner=www-data group=www-data
notify:
- Reload Nginx
# handlers are like functions, called by `notify`
handlers:
- name: Start Nginx
service: name=nginx state=started
- name: Reload Nginx
service: name=nginx state=reloaded
刚刚用 Google 搜 Ansible 部署 docker 竟然一篇教程都没有搜到,其实这个是一个非常简单的操作。对于早期的简单架构,直接在开发机上部署很方便。
Ansible 的基础用法不再赘述,参考 使用 Ansible 部署服务.
Ansible 中部署 docker 镜像主要需要的是 docker_container, docker_image, docker_service 三个
模块。其中 docker_container
用于部署 docker 容器,docker_image 用于编译镜像,docker_service
模块用于部署 docker compose。
docker_container
模块docker_container
模块依赖于 docker 这个 Python 包,需要在宿主机和目标机上都安装:
pip install docker
错误信息中可能提示需要 docker-py,但是这个包已经被 docker 替代了。
在 playbook 中的 tasks 中利用 docker_container
模块指定容器的运行模式即可。具体的参数可以查看 文档。比如下面的例子:
---
- hosts: ynote
remote_user: tiger
tasks:
- name: Deploy Ynote
docker_container:
name: ynote
image: docker.yifei.me/ynote
auto_remove: true
published_ports:
- "8000:80"
env:
DB_NAME: ynote
pull: true
然后使用 ansible-playbook 部署
ansible-playbook -i hosts playbooks/ynote.yml
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站