Vagrant multinode deployment
Preparing Vagrant for multinode (and all-in-one as well) Ansible deployment. Change-Id: Ib2ddfe80159211363ec5e96ef904388d5870927d Implements: blueprint vagrant
This commit is contained in:
parent
bc9b94f158
commit
10f8a02ae2
|
@ -60,6 +60,7 @@ ChangeLog
|
|||
# Vagrant
|
||||
.vagrant
|
||||
vagrant/Vagrantfile.custom
|
||||
vagrant/vagrantkey*
|
||||
|
||||
# generated openrc
|
||||
openrc
|
||||
|
|
|
@ -34,7 +34,7 @@ PROVIDER_DEFAULTS ||= {
|
|||
|
||||
MULTINODE = false unless self.class.const_defined?(:MULTINODE)
|
||||
|
||||
NUMBER_OF_MESOS_MASTER_NODES ||= 3
|
||||
NUMBER_OF_MASTER_NODES ||= 3
|
||||
NUMBER_OF_CONTROLLER_NODES ||= 3
|
||||
NUMBER_OF_COMPUTE_NODES ||= 1
|
||||
NUMBER_OF_STORAGE_NODES ||= 1
|
||||
|
@ -44,7 +44,7 @@ NODE_SETTINGS ||= {
|
|||
cpus: 4,
|
||||
memory: 4096
|
||||
},
|
||||
mesos_master: {
|
||||
master: {
|
||||
cpus: 1,
|
||||
memory: 1024
|
||||
},
|
||||
|
@ -62,6 +62,12 @@ NODE_SETTINGS ||= {
|
|||
}
|
||||
}
|
||||
|
||||
# Configure a new SSH key and config so the operator is able to connect with
|
||||
# the other cluster nodes.
|
||||
unless File.file?(File.join(vagrant_dir, 'vagrantkey'))
|
||||
system("ssh-keygen -f #{File.join(vagrant_dir, 'vagrantkey')} -N '' -C this-is-vagrant")
|
||||
end
|
||||
|
||||
def get_default(setting)
|
||||
PROVIDER_DEFAULTS[PROVIDER.to_sym][setting]
|
||||
rescue
|
||||
|
@ -82,18 +88,68 @@ Vagrant.configure(2) do |config|
|
|||
config.vm.network "private_network", type: "dhcp"
|
||||
config.vm.network "public_network", dev: get_default(:bridge_interface), bridge: get_default(:bridge_interface), mode: 'bridge', type: 'bridge'
|
||||
|
||||
if MULTINODE
|
||||
# TODO(nihilifer): Implement multinode deployment.
|
||||
raise KollaMesosNotImplemented,
|
||||
"Multinode deployment is not implemented yet"
|
||||
else
|
||||
# All-in-one
|
||||
config.vm.synced_folder "..", "/home/vagrant/kolla-mesos", type: get_default(:sync_method)
|
||||
config.vm.provider PROVIDER do |vm|
|
||||
my_privatekey = File.read(File.join(vagrant_dir, "vagrantkey"))
|
||||
my_publickey = File.read(File.join(vagrant_dir, "vagrantkey.pub"))
|
||||
|
||||
config.vm.provision :shell, inline: <<-EOS
|
||||
mkdir -p /root/.ssh
|
||||
echo '#{my_privatekey}' > /root/.ssh/id_rsa
|
||||
chmod 600 /root/.ssh/id_rsa
|
||||
echo '#{my_publickey}' > /root/.ssh/authorized_keys
|
||||
chmod 600 /root/.ssh/authorized_keys
|
||||
echo '#{my_publickey}' > /root/.ssh/id_rsa.pub
|
||||
chmod 644 /root/.ssh/id_rsa.pub
|
||||
mkdir -p /home/vagrant/.ssh
|
||||
echo '#{my_privatekey}' >> /home/vagrant/.ssh/id_rsa
|
||||
chmod 600 /home/vagrant/.ssh/*
|
||||
echo 'Host *' > ~vagrant/.ssh/config
|
||||
echo StrictHostKeyChecking no >> ~vagrant/.ssh/config
|
||||
chown -R vagrant: /home/vagrant/.ssh
|
||||
EOS
|
||||
|
||||
config.hostmanager.enabled = false
|
||||
config.hostmanager.ip_resolver = proc do |vm, resolving_vm|
|
||||
case PROVIDER
|
||||
when "libvirt"
|
||||
if vm.name
|
||||
`virsh -c qemu:///system net-dhcp-leases default | awk -F'[ /]+' '/#{vm.name} / {print $6}'`.chop
|
||||
end
|
||||
when "virtualbox"
|
||||
if vm.id
|
||||
`VBoxManage guestproperty get #{vm.id} "/VirtualBox/GuestInfo/Net/2/V4/IP"`.split()[1]
|
||||
end
|
||||
end
|
||||
end
|
||||
config.hostmanager.manage_host = true
|
||||
|
||||
config.vm.define "operator" do |admin|
|
||||
hostname = "operator"
|
||||
admin.vm.hostname = "#{hostname}.local"
|
||||
admin.vm.synced_folder "..", "/home/vagrant/kolla-mesos", type: get_default(:sync_method)
|
||||
admin.vm.provider PROVIDER do |vm|
|
||||
vm.cpus = get_setting(:aio, :cpus)
|
||||
vm.memory = get_setting(:aio, :memory)
|
||||
end
|
||||
config.vm.provision :shell, path: "provision.sh"
|
||||
config.vm.provision :shell, path: "../tools/bootstrap.sh", args: "start"
|
||||
admin.vm.provision :hostmanager
|
||||
admin.vm.provision :shell, path: "provision.sh", args: "operator #{MULTINODE ? 'multinode' : 'aio'}"
|
||||
admin.hostmanager.aliases = hostname
|
||||
end
|
||||
|
||||
if MULTINODE
|
||||
['master', 'controller', 'compute'].each do |node_type|
|
||||
(1..self.class.const_get("NUMBER_OF_#{node_type.upcase}_NODES")).each do |i|
|
||||
hostname = "#{node_type}0#{i}"
|
||||
config.vm.define hostname do |node|
|
||||
node.vm.hostname = "#{hostname}.local"
|
||||
node.vm.provision :hostmanager
|
||||
node.vm.provision :shell, path: "provision.sh", args: "#{hostname} multinode"
|
||||
node.vm.provider PROVIDER do |vm|
|
||||
vm.memory = get_setting(node_type.to_sym, :memory)
|
||||
vm.cpus = get_setting(node_type.to_sym, :cpus)
|
||||
end
|
||||
node.hostmanager.aliases = hostname
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
# MULTINODE = false
|
||||
|
||||
# NUMBER_OF_MESOS_MASTER_NODES = 3
|
||||
# NUMBER_OF_MASTER_NODES = 3
|
||||
# NUMBER_OF_CONTROLLER_NODES = 3
|
||||
# NUMBER_OF_COMPUTE_NODES = 1
|
||||
# NUMBER_OF_STORAGE_NODES = 1
|
||||
|
@ -27,9 +27,9 @@
|
|||
# cpus: 4,
|
||||
# memory: 4096
|
||||
# },
|
||||
# mesos_master: {
|
||||
# master: {
|
||||
# cpus: 1,
|
||||
# memory: 1024
|
||||
# memory: 512
|
||||
# },
|
||||
# controller: {
|
||||
# cpus: 2,
|
||||
|
|
|
@ -1,10 +1,39 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Disable SELinux
|
||||
setenforce 0
|
||||
VM=$1
|
||||
MODE=$2
|
||||
|
||||
# Install system packages
|
||||
cat >/etc/yum.repos.d/docker.repo <<-EOF
|
||||
if [ "$MODE" = 'aio' ]; then
|
||||
REGISTRY_PORT=4000
|
||||
else
|
||||
REGISTRY_PORT=5000
|
||||
fi
|
||||
REGISTRY=operator.local:${REGISTRY_PORT}
|
||||
|
||||
function configure_commons {
|
||||
# Disable SELinux
|
||||
setenforce 0
|
||||
sed -i -r "s,^SELINUX=.+$,SELINUX=permissive," /etc/selinux/config
|
||||
|
||||
yum -y install \
|
||||
epel-release \
|
||||
git \
|
||||
python-devel \
|
||||
vim-enhanced
|
||||
|
||||
# Instal Development Tools
|
||||
yum -y groupinstall "Development Tools"
|
||||
|
||||
# Install packages from EPEL
|
||||
yum -y install \
|
||||
python-pip
|
||||
|
||||
yum clean all
|
||||
}
|
||||
|
||||
function configure_docker {
|
||||
# Install Docker
|
||||
cat >/etc/yum.repos.d/docker.repo <<-EOF
|
||||
[dockerrepo]
|
||||
name=Docker Repository
|
||||
baseurl=https://yum.dockerproject.org/repo/main/centos/7
|
||||
|
@ -12,30 +41,63 @@ enabled=1
|
|||
gpgcheck=1
|
||||
gpgkey=https://yum.dockerproject.org/gpg
|
||||
EOF
|
||||
yum -y install docker-engine epel-release git python-devel vim-enhanced
|
||||
yum -y install python-pip
|
||||
yum -y groupinstall "Development Tools"
|
||||
yum clean
|
||||
yum -y install \
|
||||
docker-engine \
|
||||
&& yum clean all
|
||||
pip install docker-py
|
||||
|
||||
# Start services
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
# Configure registry
|
||||
sed -i -r "s,(ExecStart)=(.+),\1=/usr/bin/docker -d --insecure-registry ${REGISTRY} --registry-mirror=http://${REGISTRY}," /usr/lib/systemd/system/docker.service
|
||||
|
||||
# Fetch and install pip packages
|
||||
pip install tox
|
||||
sudo -u vagrant git clone https://github.com/openstack/kolla ~vagrant/kolla
|
||||
pip install ~vagrant/kolla
|
||||
pip install ~vagrant/kolla-mesos
|
||||
# Start services
|
||||
systemctl enable docker
|
||||
systemctl start docker
|
||||
}
|
||||
|
||||
# Generate and copy configuration
|
||||
sudo -u vagrant bash -c "cd ~vagrant/kolla-mesos && tox -e genconfig"
|
||||
mkdir -p /etc/kolla-mesos
|
||||
cp -r ~vagrant/kolla/etc/kolla/ /etc/kolla
|
||||
cp ~vagrant/kolla-mesos/etc/kolla-mesos.conf.sample /etc/kolla-mesos/kolla-mesos.conf
|
||||
function configure_operator {
|
||||
# Fetch and install pip packages
|
||||
pip install ansible tox
|
||||
sudo -u vagrant git clone https://github.com/openstack/kolla ~vagrant/kolla
|
||||
pip install ~vagrant/kolla
|
||||
pip install ~vagrant/kolla-mesos
|
||||
|
||||
# Change network settings
|
||||
# TODO(nihilifer): Change kolla_internal_address when loadbalancing will be implemented.
|
||||
HOST_IP=$(ip addr show eth1 | grep -Po 'inet \K[\d.]+')
|
||||
sed -i -r "s,^[# ]*kolla_internal_address:.+$,kolla_internal_address: \"$HOST_IP\"," /etc/kolla/globals.yml
|
||||
sed -i -r "s,^[# ]*network_interface:.+$,network_interface: \"eth1\"," /etc/kolla/globals.yml
|
||||
sed -i -r "s,^[# ]*neutron_external_interface:.+$,neutron_external_interface: \"eth2\"," /etc/kolla/globals.yml
|
||||
# Generate and copy configuration
|
||||
sudo -u vagrant bash -c "cd ~vagrant/kolla-mesos && tox -e genconfig"
|
||||
mkdir -p /etc/kolla-mesos
|
||||
cp -r ~vagrant/kolla/etc/kolla/ /etc/kolla
|
||||
cp ~vagrant/kolla-mesos/etc/kolla-mesos.conf.sample /etc/kolla-mesos/kolla-mesos.conf
|
||||
cp ~vagrant/kolla-mesos/etc/globals.yml /etc/kolla-mesos/globals.yml
|
||||
cp ~vagrant/kolla-mesos/etc/passwords.yml /etc/kolla-mesos/passwords.yml
|
||||
|
||||
# Change network settings
|
||||
# TODO(nihilifer): Change kolla_internal_address when loadbalancing will be implemented.
|
||||
HOST_IP=$(ip addr show eth1 | grep -Po 'inet \K[\d.]+')
|
||||
if [ "$MODE" = "multinode" ]; then
|
||||
sed -i -r "s,^[# ]*namespace.+$,namespace = ${REGISTRY}/kollaglue," /etc/kolla/kolla-build.conf
|
||||
sed -i -r "s,^[# ]*push.+$,push = True," /etc/kolla/kolla-build.conf
|
||||
else
|
||||
sed -i -r "s,^[# ]*docker_registry.+$,docker_registry: \"\"," /etc/kolla-mesos/globals.yml
|
||||
fi
|
||||
sed -i -r "s,^[# ]*kolla_internal_address:.+$,kolla_internal_address: \"$HOST_IP\"," /etc/kolla/globals.yml
|
||||
sed -i -r "s,^[# ]*network_interface:.+$,network_interface: \"eth1\"," /etc/kolla/globals.yml
|
||||
sed -i -r "s,^[# ]*neutron_external_interface:.+$,neutron_external_interface: \"eth2\"," /etc/kolla/globals.yml
|
||||
sed -i -r "s,^[# ]*registry.+$,registry = operator.local:${REGISTRY_PORT}," /etc/kolla-mesos/kolla-mesos.conf
|
||||
|
||||
# Run Docker Registry
|
||||
if [[ ! $(docker ps -a -q -f name=registry) ]]; then
|
||||
docker run -d \
|
||||
--name=registry \
|
||||
--restart=always \
|
||||
-p ${REGISTRY_PORT}:5000 \
|
||||
-e STORAGE_PATH=/var/lib/registry \
|
||||
-v /data/host/registry-storage:/var/lib/registry \
|
||||
distribution/registry
|
||||
fi
|
||||
}
|
||||
|
||||
configure_commons
|
||||
configure_docker
|
||||
|
||||
if [ "$VM" = "operator" ]; then
|
||||
configure_operator
|
||||
fi
|
||||
|
|
Loading…
Reference in New Issue