| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
This repository contains resources to deploy a generic cloud platform on top of OVHcloud Public Cloud Infrastructure
[UK1] [DE1] [GRA5]
| | |
----------------------- // ----------------------- // ----------------------- Ext-net
| | |
[frontend1]-------| [frontend1]-------| [frontend1]-------|
| | | | | |
----- Int-net | ----- Int-net | ----- Int-net |
| | | | | |
| | | | | |
[b1-1] ... [b1-X] | [b2-1] ... [b2-X] | [b3-1] ... [b3-X] |
| | |
------------------------------------------------------------------------------- Multi-net
| | |
[b1-1] ... [b1-X] [b2-1] ... [b2-X] [b3-1] ... [b3-X]
Terraform >= 0.14
Create a Public Cloud project
Create a Vrack on BareMetal Cloud section (Do not associate it to your cloud project. It will be done automatically with Terraform).
Create an OpenStack's RC file on your Public Cloud project.
Create an OVH token (tokens must be added to you openstack's rc file)
Packer to build your own openstack images
A fully fonctionnal demo environments will help you to deploy multiple infrastructures:
$ tree -L 2 env/demo env/demo |-- README.md |-- ansible.cfg |-- config |-- group_vars | `-- all |-- infra | |-- monoregion | |-- multiregion | `-- multiregion-vrack |-- inventory.ini |-- playbooks | |-- check-cloudinit.yml | |-- check-port.yml | |-- facts.yml | |-- iptables.yml | |-- nginx.yml | |-- ssh-config.yml | |-- templates | `-- upgrade.yml `-- ssh
Let's deploy a multiregion infrastructure with a OVHcloud vrack.
Do not modify the demo environment, just copy it to develop to test this project.
/home/ansible/ovhcloud-infrastructure$ cp -Rf env/demo env/developThis will be used to create your openstack keypair.
no passphrase.
/home/ansible/ovhcloud-infrastructure$ ssh-keygen -f env/develop/ssh/id_rsa/home/ansible/ovhcloud-infrastructure$ vim env/develop/infra/multiregion-vrack/variables.tfvarszone = {
root = "wiseflat.com"
subdomain = "infra"
}
vlan_id = 3
vrack_id = "pn-xxxx"In order to attach your Public Cloud project to your Vrack, append to your openrc file a terraform variable. You can set your OS_PASSWORD as well to avoid to be prompted.
/home/ansible/ovhcloud-infrastructure$ echo 'export TF_VAR_project_id=${OS_TENANT_ID}' >> env/develop/openrc.shSource your OpenStack's RC file to set your environments variables:
/home/ansible/ovhcloud-infrastructure$ source env/develop/openrc.sh/home/ansible/ovhcloud-infrastructure$ cd env/develop/live/multiregion-vrack
/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform init
/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform plan -var-file="variables.tfvars"
/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform apply -var-file="variables.tfvars"Terraform may fails because your Openstack project do not use the same regions. Check it on horizon.
Edit variables.tfvars file in the same directory, which one contains some defaults values and override the regions variable, than execute again the last command.
// regions = [
// "DE1",
// "UK1",
// "GRA5"
// ]If everything worked, at this step you will have security groups, networks, regions set up.
Setting nbinstances = 1 will create 1 instance per region. Edit variables.tfvars file in the same directory:
frontends = {
lan_net = [
"10.0.1.0/24",
"10.0.2.0/24",
"10.0.3.0/24"
]
vrack_net = "192.168.0.0/16"
hostname = "frontend"
flavor = "s1-2"
image = "Ubuntu 20.04"
nbinstances = 1
disk = false
disk_size = 10
}/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform apply -var-file="variables.tfvars"Setting backends.nbinstances = 1 will create 1 instance per region connected to the Internal network. Setting backends_vrack.nbinstances = 1 will create 1 instance per region connected the vrack network.
Edit variables.tfvars file in the same directory:
backends = {
hostname = "backend"
flavor = "s1-2"
image = "Ubuntu 20.04"
nbinstances = 1
disk = false
disk_size = 10
}
backends_vrack = {
hostname = "backend-vrack"
flavor = "s1-2"
image = "Ubuntu 20.04"
nbinstances = 1
disk = false
disk_size = 10
}/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform apply -var-file="variables.tfvars"Ansible helps you to update your local files automatically:
/home/ansible/ovhcloud-infrastructure/env/develop$ ansible-inventory --graph
@all:
|--@infra:
| |--backend-vrack1.de1.multivrack.infra.wiseflat.fr
| |--backend-vrack1.gra5.multivrack.infra.wiseflat.fr
| |--backend-vrack1.uk1.multivrack.infra.wiseflat.fr
| |--backend1.de1.multivrack.infra.wiseflat.fr
| |--backend1.gra5.multivrack.infra.wiseflat.fr
| |--backend1.uk1.multivrack.infra.wiseflat.fr
| |--frontend1.de1.multivrack.infra.wiseflat.fr
| |--frontend1.gra5.multivrack.infra.wiseflat.fr
| |--frontend1.uk1.multivrack.infra.wiseflat.fr
|--@infrastructures:
| |--@regions:
| | |--@monoregion:
| | |--@multiregion:
| | | |--backend-vrack1.de1.multivrack.infra.wiseflat.fr
| | | |--backend-vrack1.gra5.multivrack.infra.wiseflat.fr
| | | |--backend-vrack1.uk1.multivrack.infra.wiseflat.fr
| | | |--backend1.de1.multivrack.infra.wiseflat.fr
| | | |--backend1.gra5.multivrack.infra.wiseflat.fr
| | | |--backend1.uk1.multivrack.infra.wiseflat.fr
| | | |--frontend1.de1.multivrack.infra.wiseflat.fr
| | | |--frontend1.gra5.multivrack.infra.wiseflat.fr
| | | |--frontend1.uk1.multivrack.infra.wiseflat.fr
| |--@servers:
| | |--@backend:
| | | |--backend1.de1.multivrack.infra.wiseflat.fr
| | | |--backend1.gra5.multivrack.infra.wiseflat.fr
| | | |--backend1.uk1.multivrack.infra.wiseflat.fr
| | |--@backend_vrack:
| | | |--backend-vrack1.de1.multivrack.infra.wiseflat.fr
| | | |--backend-vrack1.gra5.multivrack.infra.wiseflat.fr
| | | |--backend-vrack1.uk1.multivrack.infra.wiseflat.fr
| | |--@frontend:
| | |--@frontend_vrack:
| | | |--frontend1.de1.multivrack.infra.wiseflat.fr
| | | |--frontend1.gra5.multivrack.infra.wiseflat.fr
| | | |--frontend1.uk1.multivrack.infra.wiseflat.fr
|--@ungrouped:
| |--localhost
/home/ansible/ovhcloud-infrastructure/env/develop$ ansible -m ping all
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
frontend1.gra5.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
frontend1.uk1.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
backend-vrack1.gra5.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
backend1.uk1.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
backend-vrack1.uk1.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
backend1.gra5.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
frontend1.de1.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
backend-vrack1.de1.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}
backend1.de1.multivrack.infra.wiseflat.fr | SUCCESS => {
"changed": false,
"ping": "pong"
}Then, you are good to go ! All your instances are ready to be configured with your configuration management tool (puppet, ansible, chef, etc).
In this demo, we will install nginx everywhere:
/home/ansible/ovhcloud-infrastructure/env/develop$ ansible-playbook playbooks/nginx.ymlYou can find your instances IPs address in you ssh configuration file.
UK1 frontend is load balancing requests to the internal network and to the vrack network !
$ curl http://54.37.4.210/ backend1.uk1.multivrack.www.domain.com $ curl http://54.37.4.210/ backend-vrack1.gra5.multivrack.www.domain.com $ curl http://54.37.4.210/ backend-vrack1.uk1.multivrack.www.domain.com $ curl http://54.37.4.210/ backend-vrack1.de1.multivrack.www.domain.com
GRA5 frontend is load balancing requests to the internal network and to the vrack network !
$ curl http://51.68.41.230/ backend1.gra5.multivrack.www.domain.com $ curl http://51.68.41.230/ backend-vrack1.gra5.multivrack.www.domain.com $ curl http://51.68.41.230/ backend-vrack1.uk1.multivrack.www.domain.com $ curl http://51.68.41.230/ backend-vrack1.de1.multivrack.www.domain.com
DE1 frontend is load balancing requests to the internal network and to the vrack network !
$ curl http://135.125.134.167/ backend1.de1.multivrack.www.domain.com $ curl http://135.125.134.167/ backend-vrack1.gra5.multivrack.www.domain.com $ curl http://135.125.134.167/ backend-vrack1.uk1.multivrack.www.domain.com $ curl http://135.125.134.167/ backend-vrack1.de1.multivrack.www.domain.com
All good !
Do it smoothly. It takes a lot of CPU ;-)
/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform apply -var-file="variables.tfvars"Finaly, destroy all other terraform resources
/home/ansible/ovhcloud-infrastructure/env/develop/live/multiregion-vrack$ terraform destroy -var-file="variables.tfvars"| Back | FazBrowse Home | New Git URL |