Add Ansible playbooks for deploying Mesos

Change-Id: If880af506bcbc8d755e9a441471979eac6a683a5
Partially-Implements: blueprint vagrant
This commit is contained in:
Michal Rostecki 2016-01-05 22:00:08 +01:00
parent fb92420fe0
commit 5ab80223eb
26 changed files with 283 additions and 0 deletions

View File

@ -0,0 +1,21 @@
---
node_config_directory: "/etc/kolla"
container_config_directory: "/var/lib/kolla/config_files"
api_interface: "{{ network_interface }}"
docker_registry_email:
docker_registry:
docker_namespace: "kollaglue"
docker_registry_username:
docker_restart_policy: "always"
docker_common_options:
auth_email: "{{ docker_registry_email }}"
auth_password: "{{ docker_registry_password }}"
auth_registry: "{{ docker_registry }}"
auth_username: "{{ docker_registry_username }}"
environment:
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
restart_policy: "{{ docker_restart_policy }}"

View File

@ -0,0 +1,24 @@
[master]
localhost ansible_connection=local
[controller]
localhost ansible_connection=local
[compute]
localhost ansible_connection=local
[zookeeper:children]
master
[mesos-master:children]
master
[marathon:children]
master
[chronos:children]
master
[mesos-slave:children]
controller
compute

View File

@ -0,0 +1,28 @@
[master]
master01
master02
master03
[controller]
controller01
controller02
controller03
[compute]
compute01
[zookeeper:children]
master
[mesos-master:children]
master
[marathon:children]
master
[chronos:children]
master
[mesos-slave:children]
controller
compute

View File

@ -0,0 +1,4 @@
---
chronos_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-chronos"
chronos_tag: "{{ openstack_release }}"
chronos_image_full: "{{ chronos_image }}:{{ chronos_tag }}"

View File

@ -0,0 +1,3 @@
---
- include: start.yml
when: inventory_hostname in groups['chronos']

View File

@ -0,0 +1,11 @@
---
- name: Starting Chronos container
kolla_docker:
action: "start_container"
common_options: "{{ docker_common_options }}"
environment:
CHRONOS_HTTP_PORT: "4400"
CHRONOS_MASTER: "zk://{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}/mesos"
CHRONOS_ZK_HOSTS: "zk://{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}"
image: "{{ chronos_image_full }}"
name: "chronos"

View File

@ -0,0 +1,4 @@
---
marathon_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-marathon"
marathon_tag: "{{ openstack_release }}"
marathon_image_full: "{{ marathon_image }}:{{ marathon_tag }}"

View File

@ -0,0 +1,3 @@
---
- include: start.yml
when: inventory_hostname in groups['zookeeper']

View File

@ -0,0 +1,13 @@
---
- name: Starting Marathon container
kolla_docker:
action: "start_container"
common_options: "{{ docker_common_options }}"
environment:
MARATHON_HOSTNAME: "{{ inventory_hostname }}"
MARATHON_HTTPS_ADDRESS: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
MARATHON_HTTP_ADDRESS: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
MARATHON_MASTER: "zk://{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}/mesos"
MARATHON_ZK: "zk://{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}/marathon"
image: "{{ marathon_image_full }}"
name: "marathon"

View File

@ -0,0 +1,4 @@
---
mesos_master_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-mesos-master"
mesos_master_tag: "{{ openstack_release }}"
mesos_master_image_full: "{{ mesos_master_image }}:{{ mesos_master_tag }}"

View File

@ -0,0 +1,3 @@
---
- include: start.yml
when: inventory_hostname in groups['mesos-master']

View File

@ -0,0 +1,18 @@
---
- name: Starting Mesos master container
kolla_docker:
action: "start_container"
common_options: "{{ docker_common_options }}"
environment:
MESOS_HOSTNAME: "{{ inventory_hostname }}"
MESOS_IP: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
MESOS_ZK: "zk://{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}/mesos"
MESOS_PORT: "5050"
MESOS_LOG_DIR: "/var/log/mesos"
MESOS_QUORUM: "3"
MESOS_REGISTRY: "in_memory"
MESOS_WORK_DIR: "/var/lib/mesos"
image: "{{ mesos_master_image_full }}"
name: "mesos_master"
volumes:
- /var/lib/mesos:/var/lib/mesos

View File

@ -0,0 +1,4 @@
---
mesos_slave_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-mesos-slave"
mesos_slave_tag: "{{ openstack_release }}"
mesos_slave_image_full: "{{ mesos_slave_image }}:{{ mesos_slave_tag }}"

View File

@ -0,0 +1,3 @@
---
- include: start.yml
when: inventory_hostname in groups['mesos-slave']

View File

@ -0,0 +1,18 @@
---
- name: Starting Mesos slave container
kolla_docker:
action: "start_container"
common_options: "{{ docker_common_options }}"
environment:
MESOS_HOSTNAME: "{{ inventory_hostname }}"
MESOS_IP: "{{ hostvars[inventory_hostname]['ansible_' + api_interface]['ipv4']['address'] }}"
MESOS_MASTER: "zk://{% for host in groups['zookeeper'] %}{{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2181{% if not loop.last %},{% endif %}{% endfor %}/mesos"
MESOS_SWITCH_USER: "false"
MESOS_LOG_DIR: "/var/log/mesos"
MESOS_LOGGING_LEVEL: "INFO"
image: "{{ mesos_slave_image_full }}"
name: "mesos_slave"
privileged: True
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup
- /var/run/docker.sock:/var/run/docker.sock

View File

@ -0,0 +1,4 @@
---
zookeeper_image: "{{ docker_registry ~ '/' if docker_registry else '' }}{{ docker_namespace }}/{{ kolla_base_distro }}-{{ kolla_install_type }}-zookeeper"
zookeeper_tag: "{{ openstack_release }}"
zookeeper_image_full: "{{ zookeeper_image }}:{{ zookeeper_tag }}"

View File

@ -0,0 +1,14 @@
---
- name: Running ZooKeeper bootstrap container
kolla_docker:
action: "start_container"
common_options: "{{ docker_common_options }}"
detach: False
environment:
KOLLA_BOOTSTRAP:
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
image: "{{ zookeeper_image_full }}"
name: "bootstrap_zookeeper"
volumes:
- "{{ node_config_directory }}/zookeeper/:{{ container_config_directory }}/:ro"
- "zookeeper_data:/var/lib/zookeeper"

View File

@ -0,0 +1,19 @@
---
- name: Ensuring config directory exists
file:
path: "{{ node_config_directory }}/zookeeper"
state: "directory"
recurse: yes
- name: Copying config.json
template:
src: "zookeeper.json.j2"
dest: "{{ node_config_directory }}/zookeeper/config.json"
- name: Copying ZooKeeper configuration files
template:
src: "{{ item }}.j2"
dest: "{{ node_config_directory }}/zookeeper/{{ item }}"
with_items:
- "zoo.cfg"
- "myid"

View File

@ -0,0 +1,9 @@
---
- include: config.yml
when: inventory_hostname in groups['zookeeper']
- include: bootstrap.yml
when: inventory_hostname in groups['zookeeper']
- include: start.yml
when: inventory_hostname in groups['zookeeper']

View File

@ -0,0 +1,10 @@
---
- name: Starting ZooKeeper container
kolla_docker:
action: "start_container"
common_options: "{{ docker_common_options }}"
image: "{{ zookeeper_image_full }}"
name: "zookeeper"
volumes:
- "{{ node_config_directory }}/zookeeper/:{{ container_config_directory }}/:ro"
- "zookeeper_data:/var/lib/zookeeper"

View File

@ -0,0 +1 @@
{{ groups['zookeeper'].index(inventory_hostname) + 1 }}

View File

@ -0,0 +1,8 @@
tickTime=3000
initLimit=10
syncLimit=5
clientPort=2181
{% for host in groups['zookeeper'] %}
server.{{ loop.index }}={{ hostvars[host]['ansible_' + hostvars[host]['api_interface']]['ipv4']['address'] }}:2888:3888
{% endfor %}
dataDir=/var/lib/zookeeper

View File

@ -0,0 +1,17 @@
{
"command": "/opt/mesosphere/zookeeper/bin/zkServer.sh start-foreground",
"config_files": [
{
"source": "{{ container_config_directory }}/zoo.cfg",
"dest": "/etc/zookeeper/conf/zoo.cfg",
"owner": "zookeeper",
"perm": "0600"
},
{
"source": "{{ container_config_directory }}/myid",
"dest": "/var/lib/zookeeper/myid",
"owner": "zookeeper",
"perm": "0600"
}
]
}

30
ansible/site.yml Normal file
View File

@ -0,0 +1,30 @@
---
- hosts:
- zookeeper
roles:
- { role: zookeeper,
tags: zookeeper }
- hosts:
- mesos-master
roles:
- { role: mesos-master,
tags: mesos-master }
- hosts:
- marathon
roles:
- { role: marathon,
tags: marathon }
- hosts:
- chronos
roles:
- { role: chronos,
tags: chronos }
- hosts:
- mesos-slave
roles:
- { role: mesos-slave,
tags: mesos-slave }

8
etc/globals.yml Normal file
View File

@ -0,0 +1,8 @@
---
network_interface: "eth2"
docker_registry: "operator.local:5000"
docker_namespace: "kollaglue"
kolla_base_distro: "centos"
kolla_install_type: "binary"
openstack_release: "2.0.0"
config_strategy: "COPY_ONCE"

2
etc/passwords.yml Normal file
View File

@ -0,0 +1,2 @@
---
docker_registry_password: