diff --git a/.vscode/settings.json b/.vscode/settings.json index f36e43750f66aa7e9921645912501ac74e65203e..411d9c9492da10d3fb30dd875879257b00c92b8d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -18,5 +18,12 @@ "titleBar.inactiveBackground": "#32f0ff99", "titleBar.inactiveForeground": "#15202b99" }, - "peacock.color": "#32f0ff" + "peacock.color": "#32f0ff", + "cSpell.words": [ + "backoffice", + "ecolyo", + "mysqldump", + "selfdata", + "uroot" + ] } \ No newline at end of file diff --git a/k8s/README.md b/k8s/README.md index 480a6f6b25633c3aa0ad924aeaf45c15462a7332..f6902a73f4517663a23519650dd8803d1761a110 100644 --- a/k8s/README.md +++ b/k8s/README.md @@ -61,11 +61,12 @@ Configuration: - Demander la création des Persistent Volumes (PV) de façon à obtenir la configuration suivante (contacter un administrateur du cluster) : -| Name | Capacity | -| ------------------------------- | -------- | -| pvc-1-ns-selfdata-d01-syn-claim | 1 GiB | -| pvc-2-ns-selfdata-d01-syn-claim | 500 MiB | -| pvc-3-ns-selfdata-d01-syn-claim | 2 GiB | +| Nom | Capacité | Utilisé pour | +| ------------------------------- | -------- | ----------- | +| pvc-1-ns-selfdata-d01-syn-claim | 1 GiB | Meilisearch | +| pvc-2-ns-selfdata-d01-syn-claim | 500 MiB | Config serveur | +| pvc-3-ns-selfdata-d01-syn-claim | 2 GiB | BDD MySQL | +| pvc-4-ns-selfdata-d01-syn-claim | 1 GiB | Dumps MySQL | ## Création des déploiements @@ -134,3 +135,13 @@ Configuration: ## Initialiser la BDD MySQL - Suivre les étapes décrites dans le fichier [init.md](/dbinit/init.md) + +## Installer les cronjobs de dump + +- Depuis VS Code, créer un fichier mysql-dump-cronjob-hourly.yml +- Copier le contenu du fichier k8s/cronjobs/mysql-dump-cronjob-hourly.yml dedans +- Lancer `oc apply -f mysql-dump-cronjob-hourly.yml` +- Par défaut, le script conserve les 72 derniers dumps horaires. Vous pouvez définir le nombre de dump à conserver en changeant cette valeur après la commande `head` présente dans le script + + ```s -F *.sql.gz | head -n -72 | xargs -r rm``` +- Répéter l'opération pour **mysql-dump-cronjob-daily** et **mysql-dump-cronjob-weekly** diff --git a/k8s/cronjobs/mysql-dump-cronjob-daily.yml b/k8s/cronjobs/mysql-dump-cronjob-daily.yml new file mode 100644 index 0000000000000000000000000000000000000000..603012fcd71638718b53ea013bc420913c37bb74 --- /dev/null +++ b/k8s/cronjobs/mysql-dump-cronjob-daily.yml @@ -0,0 +1,50 @@ +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: mysql-dump-cronjob-daily + namespace: ns-selfdata-d01-syn +spec: + schedule: '@daily' + jobTemplate: + spec: + template: + spec: + volumes: + - name: pvc-4-ns-selfdata-d01-syn-claim + persistentVolumeClaim: + claimName: pvc-4-ns-selfdata-d01-syn-claim + containers: + - resources: {} + terminationMessagePath: /dev/termination-log + name: mysql-dump + env: + - name: MYSQL_DATABASE + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: name + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: password + - name: DATABASE_HOST + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: host + imagePullPolicy: IfNotPresent + volumeMounts: + - name: pvc-4-ns-selfdata-d01-syn-claim + mountPath: /dump + terminationMessagePolicy: File + image: 'mysql:5' + args: + - /bin/sh + - '-c' + - >- + mkdir -p /dump/daily; + cd /dump/daily; + mysqldump -h$(DATABASE_HOST) -uroot -p'$(MYSQL_ROOT_PASSWORD)' $(MYSQL_DATABASE) | gzip > $(date'+%Y-%m-%d_%H:%M:%S').sql.gz; + ls -F *.sql.gz | head -n -14 | xargs -r rm + restartPolicy: OnFailure diff --git a/k8s/cronjobs/mysql-dump-cronjob-hourly.yml b/k8s/cronjobs/mysql-dump-cronjob-hourly.yml new file mode 100644 index 0000000000000000000000000000000000000000..d16392586c8daf3ef32d95180c61eff4a4eebc00 --- /dev/null +++ b/k8s/cronjobs/mysql-dump-cronjob-hourly.yml @@ -0,0 +1,50 @@ +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: mysql-dump-cronjob-hourly + namespace: ns-selfdata-d01-syn +spec: + schedule: '@hourly' + jobTemplate: + spec: + template: + spec: + volumes: + - name: pvc-4-ns-selfdata-d01-syn-claim + persistentVolumeClaim: + claimName: pvc-4-ns-selfdata-d01-syn-claim + containers: + - resources: {} + terminationMessagePath: /dev/termination-log + name: mysql-dump + env: + - name: MYSQL_DATABASE + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: name + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: password + - name: DATABASE_HOST + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: host + imagePullPolicy: IfNotPresent + volumeMounts: + - name: pvc-4-ns-selfdata-d01-syn-claim + mountPath: /dump + terminationMessagePolicy: File + image: 'mysql:5' + args: + - /bin/sh + - '-c' + - >- + mkdir -p /dump/hourly; + cd /dump/hourly; + mysqldump -h$(DATABASE_HOST) -uroot -p'$(MYSQL_ROOT_PASSWORD)' $(MYSQL_DATABASE) | gzip > $(date'+%Y-%m-%d_%H:%M:%S').sql.gz; + ls -F *.sql.gz | head -n -72 | xargs -r rm + restartPolicy: OnFailure diff --git a/k8s/cronjobs/mysql-dump-cronjob-weekly.yml b/k8s/cronjobs/mysql-dump-cronjob-weekly.yml new file mode 100644 index 0000000000000000000000000000000000000000..052d7a0b91e6cfe59417893d5e04ab88362643fc --- /dev/null +++ b/k8s/cronjobs/mysql-dump-cronjob-weekly.yml @@ -0,0 +1,50 @@ +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: mysql-dump-cronjob-weekly + namespace: ns-selfdata-d01-syn +spec: + schedule: '@weekly' + jobTemplate: + spec: + template: + spec: + volumes: + - name: pvc-4-ns-selfdata-d01-syn-claim + persistentVolumeClaim: + claimName: pvc-4-ns-selfdata-d01-syn-claim + containers: + - resources: {} + terminationMessagePath: /dev/termination-log + name: mysql-dump + env: + - name: MYSQL_DATABASE + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: name + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: password + - name: DATABASE_HOST + valueFrom: + secretKeyRef: + name: ecolyo-agent-database + key: host + imagePullPolicy: IfNotPresent + volumeMounts: + - name: pvc-4-ns-selfdata-d01-syn-claim + mountPath: /dump + terminationMessagePolicy: File + image: 'mysql:5' + args: + - /bin/sh + - '-c' + - >- + mkdir -p /dump/weekly; + cd /dump/weekly; + mysqldump -h$(DATABASE_HOST) -uroot -p'$(MYSQL_ROOT_PASSWORD)' $(MYSQL_DATABASE) | gzip > $(date'+%Y-%m-%d_%H:%M:%S').sql.gz; + ls -F *.sql.gz | head -n -14 | xargs -r rm + restartPolicy: OnFailure