Skip to main content

Protodeploy

1. Introduction​

The installation of the infrastructure, from server onboarding to application deployment, is managed by our Protobox framework. Protobox is a stateful framework designed based on Ansible. It is a tool that allows the deployment of infrastructures based on an architecture schema defined in the main inventory.

2. Development of Protobox​

This is a project initiated in 2019. Today, it has reached a certain level of maturity and will soon be public and OpenSource.

3. Usage​

The first step in setting up the schema is the declaration of the logical units of the infrastructure.

 -----------
| EXAMPLE |
-----------
all:
hosts:
...
supervisor-2:
arch: x86_64
os: ubuntu_22.04
model: nuc
ansible_host: 192.168.1.7
roles:
- supervisor
networks_interfaces:
box-network:
dhcp: false
network_manager: netplan
ip: 192.168.1.7
ether: 88:ae:dd:xx:xx:xx
gateways:
- to: default
via: 192.168.1.254
private-gateway:
dhcp: false
network_manager: netplan
ip: 192.168.0.37
ether: 00:0e:c6:xx:xx:xx

master-1:
arch: x86_64
os: ubuntu_22.04
model: nuc
ansible_host: 192.168.1.21
ip: 192.168.1.21
access_ip: 192.168.1.21
roles:
- master
networks_interfaces:
box-network:
dhcp: false
network_manager: netplan
ip: 192.168.1.21
ether: 1c:69:7a:xx:xx:xx
gateways:
- to: default
via: 192.168.1.254
...

In addition to its ability to deploy infrastructures, Protobox allows various operations such as:

  • Network configuration
-----------
| EXAMPLE |
-----------
supervisor-2:
arch: x86_64
os: ubuntu_22.04
model: nuc
ansible_host: 192.168.1.7
roles:
- supervisor
networks_interfaces:
box-network: <------- box-deploy interface
dhcp: false
network_manager: netplan
ip: 192.168.1.7
ether: 88:ae:dd:xx:xx:xx
gateways:
- to: default
via: 192.168.1.254
private-gateway: <------- private-gateway interface
dhcp: false
network_manager: netplan
ip: 192.168.0.37
ether: 00:0e:c6:xx:xx:xx
  • Installing a LoadBalancer under a FloatingIP
-----------
| EXAMPLE |
-----------
kube_master:
vars:
vips:
- name: box-network
master: master-1
interface: box-network
virtual_router_id: 3
vip: "{{ loadbalancer_apiserver.address }}"
hosts:
master-1:
box-network:
priority: 200
state: MASTER
master-2:
box-network:
priority: 100
state: BACKUP
master-3:
box-network:
priority: 50
state: BACKUP
  • Deploying Elasticsearch and Kibana in the Kubernetes cluster
-----------
| EXAMPLE |
-----------
elasticsearch:
vars:
eck:
version: 8.5.2
namespace: elastic-system
app_templates:
- name: local-storage
- name: eck-crds
- name: eck-operator
- name: eck-es
- name: kibana
# - name: eck-local-storage
hosts:
webserver-1:
role: kubectl
master-1:
role: master
volumes:
- name: elasticsearch-masters-1
size: 10Gi
master-2:
role: master
volumes:
- name: elasticsearch-masters-2
size: 10Gi
master-3:
role: master
volumes:
- name: elasticsearch-masters-3
size: 10Gi
gateway-1:
role: data
volumes:
- name: elasticsearch-data-1
size: 50Gi
gateway-2:
role: data
volumes:
- name: elasticsearch-data-2
size: 50Gi
kibana:
hosts:
gateway-1:

4. Roles​

This architecture schema is interpreted and processed by various roles including:

RolesGroupRuntime
factory/jenkinsCI/CDsystemd / docker-compose
factory/gitlabCI/CDsystemd / docker-compose
DNSMASQNetworksystemd
network-setupNetworknetplan
DockerDockersystemd
docker-composeDockerExecutable
Docker RegistryDockersystemd / docker-compose
Gateway (HAProxy/Nginx)Networksystemd / docker-compose
KeepAlivedNetworksystemd
GlusterFSVolumesystemd
set-hostnameOSlinux
monitoring/consulMonitoringsystemd / docker-compose
monitoring/prometheusMonitoringdocker-compose
monitoring/grafanaMonitoringdocker-compose
monitoring/kioskMonitoringwayland/xserver/chromium-headless
monitoring/nodeexporterMonitoringsystemd
kubernetes/cluster-setupKubernetesKubernetes
kubernetes/cniKubernetesKubernetes
kubernetes/dashboardKubernetesKubernetes
kubernetes/deploy-appKubernetesKubernetes
kubernetes/kubectl-setupKubernetesKubernetes
kubernetes/kubesprayKubernetesKubernetes
kubernetes/kustomize-installKubernetesKubernetes
kubernetes/loadbalancerKubernetesKubernetes
kubernetes/registryKubernetesKubernetes
ldapAuthsystemd / docker-compose