使用 Ansible 操纵 Vagrant 中的 CoreOS Docker
(MacOSX10.9,Vagrant1.7.2)的汉语翻译为:(MacOSX10.9,Vagrant1.7.2)
目标
尝试使用在CoreOS官方网站介绍的Ansible来管理CoreOS。
基本上按照文章中的Example Playbook部分。
我个人还想尝试加上Nginx停止和重新启动的Playbook来进行测试。
- https://coreos.com/blog/managing-coreos-with-ansible/
安装
流浪者
- http://docs.vagrantup.com/v2/installation/
安弗赛布
在本地安装Ansible
- http://docs.ansible.com/intro_installation.html#installing-the-control-machine
使用Vagrant来配置CoreOS环境。
$ git clone https://github.com/defunctzombie/coreos-ansible-example.git
$ cd coreos-ansible-example
$ vagrant up
$ ./bin/generate_ssh_config
核心操作系统引导
使用Ansible在核心os内使python和pip可用。
- https://github.com/defunctzombie/ansible-coreos-bootstrap
$ ansible-galaxy install defunctzombie.coreos-bootstrap -p ./roles
执行bootstrap.yml
$ ansible-playbook -i inventory/vagrant bootstrap.yml
尝试获取目标主机的信息
$ ansible -i inventory/vagrant all -m setup
core-01 | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"172.17.42.1",
"172.12.8.101",
...
示例剧本
拉取并启动nginx容器。
$ ansible-playbook -i inventory/vagrant website.yml
- https://github.com/defunctzombie/coreos-ansible-example/blob/master/website.yml
我們可以在網頁瀏覽器上確認一下。
- http://172.12.8.101:8080/
尝试添加一个用于停止和重新启动Nginx的Playbook。
除了这篇文章外,以下是个人的补充。
停止 nginx
创建文件
- name: example stop nginx
hosts: web
tasks:
- name: stop nginx
docker:
image="nginx:1.7.1"
name="example-nginx"
ports="8080:80"
state=stopped
执行
$ ansible-playbook -i inventory/vagrant stop_nginx.yml
PLAY [example stop nginx] *****************************************************
GATHERING FACTS ***************************************************************
ok: [core-01]
TASK: [stop nginx] ************************************************************
changed: [core-01]
PLAY RECAP ********************************************************************
core-01 : ok=2 changed=1 unreachable=0 failed=0
当我使用网络浏览器进行确认时,发现无法连接。
- http://172.12.8.101:8080/
重新启动Nginx
创建文件
- name: example restart nginx
hosts: web
tasks:
- name: restart nginx
docker:
image="nginx:1.7.1"
name="example-nginx"
ports="8080:80"
state=restarted
执行
$ ansible-playbook -i inventory/vagrant restart_nginx.yml
PLAY [example restart nginx] **************************************************
GATHERING FACTS ***************************************************************
ok: [core-01]
TASK: [restart nginx] *********************************************************
changed: [core-01]
PLAY RECAP ********************************************************************
core-01 : ok=2 changed=1 unreachable=0 failed=0
当在网络浏览器中进行确认时,它会显示出来。
- http://172.12.8.101:8080/
[补充说明] 尝试使用systemd启动服务。
首先,删除nginx的Docker镜像。
$ vagrant ssh core-01
core@core-01 ~ $ docker ps
core@core-01 ~ $ docker kill example-nginx
core@core-01 ~ $ docker rm example-nginx
确认是否未启动。
core@core-01 ~ $ curl http://172.12.8.101:8080/
curl: (7) Failed to connect to 172.12.8.101 port 8080: Connection refused
创建一个 nginx 服务。
core@core-01 ~ $ sudo vim /etc/systemd/system/nginx.service
[Unit]
Description=example-nginx-description
After=docker.service
Requires=docker.service
[Service]
TimeoutStartSec=0
ExecStartPre=-/usr/bin/docker kill example-nginx
ExecStartPre=-/usr/bin/docker rm example-nginx
ExecStartPre=/usr/bin/docker pull nginx:1.7.1
ExecStart=/usr/bin/docker run -d -p 8080:80 --name example-nginx nginx
[Install]
WantedBy=multi-user.target
请用中文将以下内容进行转述,只需要一种选择:
使用 systemctl 进行启动
sudo systemctl enable /etc/systemd/system/nginx.service
core@core-01 ~ $ sudo systemctl start nginx.service
确认是否已经启动。
core@core-01 ~ $ curl http://172.12.8.101:8080/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
...
请参阅
-
- https://coreos.com/blog/managing-coreos-with-ansible/
-
- https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/
- http://docs.ansible.com/docker_module.html