Aller au contenu principal

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