# Fiche Techniques DevOps Initialisation
(10/08/2020 - 11/08/2020)

## Sommaire
## Tâches
### Obligatoires
- [x] Créer le cluster (Duplication).
- [x] Configurer kubectl pour accéder au cluster (kubeconfig)
- [x] Créer branche Github
- [ ] Modifier les variables d'environnement.
- [x] Créer une nouvelle DB, modifier la clef api, créer un système de backup.
- [x] Créer un bucket sur aws et changer la config pour désactiver la suppression auto des documents.
- [x] Créer les nouveaux certificats.
- [ ] Créer les nouvelles clefs api (Docusign, Stripe, AWS).
- [x] Lancer le déploiement
- [x] Exposer le déploiement
- [x] Mettre en place Ingress-Nginx
- [x] Créer les entrées DNS
- [x] Mettre en place Grafana.
- [x] Migrer la bdd sur la dernière migration
### Optionnelles
- [ ] Créer un système de sécu pour éviter de rollback sans faire gaffe.
- [ ] Réduire bdd test
- [ ] Ajouter une restriction d'accès IP à CloudSQL

- [ ] Ajouter une restriction role à l'accès bdd
- [ ] Ajouter au script de déploiement un avertissement à l'utilisateur sur l'environnement cible.
## Tips and Tricks
- **Configurer kubectl sur un nouveau cluster**
> Pour configurer l'utilisation d'un nouveau cluster existant par kubectl il faut utiliser la commande `gcloud container clusters get-credentials <CLUSTER-NAME>`
- **Emplacement informations**
>S'il y a un doute sur la localisation d'info normalement situé dans le docker-compose, il se peut qu'il se situe dans le déploiement.
>
- **Exposer le déploiement**
> `kubectl expose deployment hellia.app.prod --type="LoadBalancer" --name="hellia--app--prod"`
>
- **Déployer le nginx pour router la bonne url pour au bon container**
> `kubectl apply -f https://github.com/kubernetes/ingress-nginx/deploy/static/provider/cloud/deploy.yaml`
> [Source](https://https://kubernetes.github.io/ingress-nginx/deploy/#gce-gke)
> appliquer le ingress.yaml (dans le namespace default)
> [Tuto](https://kubernetes.io/docs/concepts/services-networking/ingress/#name-based-virtual-hosting)
> Vérifier que ça fonctionne avec curl `curl -H "Host: app.hellia.fr" <EXTERNAL-IP-INGRESS-CONTROLLER-SERVICE>`
- **Ajouter les entrées DNS**
> Utiliser l'ip externe du Ingress controller
>
- **Installation de cert-manager
> [Tuto](https://cert-manager.io/docs/installation/kubernetes/)
> Il faut déployer les resources liès à cert-manager : `kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.16.1/cert-manager.yaml`
> Troubleshoot :
> C'est probabalement du à une installation incomplète. Il faut supprimer les resources créée : ` kubectl delete -f https://github.com/jetstack/cert-manager/releases/download/v0.16.1/cert-manager.yaml`
> [Source](https://github.com/jetstack/cert-manager/issues/2053)
> Et redéployer les resources