Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gforien/eks-with-ec2
Provisionner manuellement un cluster K8S avec Terraform sur des instances EC2
https://github.com/gforien/eks-with-ec2
aws aws-ec2 k8s k8s-cluster kubernetes kubernetes-cluster terraform
Last synced: 6 days ago
JSON representation
Provisionner manuellement un cluster K8S avec Terraform sur des instances EC2
- Host: GitHub
- URL: https://github.com/gforien/eks-with-ec2
- Owner: gforien
- Created: 2021-12-18T23:38:11.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2021-12-20T17:17:40.000Z (about 3 years ago)
- Last Synced: 2025-01-24T18:17:28.790Z (8 days ago)
- Topics: aws, aws-ec2, k8s, k8s-cluster, kubernetes, kubernetes-cluster, terraform
- Language: HCL
- Homepage:
- Size: 15.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# eks-with-ec2
## Étapes
- [x] recréer une instance EC2 complète (40 min)
- [x] **test:** voir l'ensemble des ressources provisionnées dans la console AWS
- [x] améliorations (+ 30 min)
- [x] extraire `KEYNAME` dans une variable d'environnement
- [x] récupérer l'ip publique dans une output value
- [x] récupérer le DNS public dans une output value
Voir ces pages documentation Hashicorp sur [les instances](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/instance#public_dns)
et sur [les VPC](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/vpc#enable_dns_hostnames)
- [x] augmenter le nombre d'instances avec `count`
- [x] **test:** se connecter en SSH aux multiples instances avec leur DNS
- [x] installer docker
- [x] utiliser `newgrp` pour éviter de se déconnecter après l'installation
Voir [cette réponse sur StackOverflow](https://stackoverflow.com/a/49565797/6402299)
- [x] **test:** lancer un container → `docker run -d hello-world`
- [x] installer k8s
- [x] utiliser des instances Ubuntu plutôt que Amazon Linux (#1)
- [x] exposer les ports
- [x] **tests:** en tant qu'utilisateur standard (!= root)
- [x] `docker ps -a`
- [x] `kubeadm version`
- [x] `service kubelet status`
- [x] `kubectl version`
- [x] créer le cluster depuis le master node
- [x] sur quelle adresse IP le master écoute-t-il ?
- IP publique ? on pourrait avec
```sh
$ public_ip=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)
$ kubeadm init --apiserver-advertise-address="$public_ip"
```
- IP privée ? Plus sécurisé, et ça ne devrait pas poser de problème car nos VM
sont toutes dans le même VPC.
- [x] **tests:**
- [x] Vérifier la configuration créée `sudo ls -l /etc/kubernetes/admin.conf`
- [x] différencier le master et les worker dans `main.tf`
- [ ] rejoindre le cluster depuis les worker nodes
- [x] Tests de connectivité
- [x] vérifier le firewall `sudo ufw status → inactive`
- [x] ajouter manuellement une règle `All ICMPv4` et ping entre les différentes VM
- [x] vérifier que les VM peuvent se pinger sur leur IP publique/privée
- [x] avoir un token prédéterminé pour pouvoir faire `kubeadm join --token=XXX`
Voir l'issue [#9](https://github.com/gforien/eks-with-ec2/issues/9)
- [ ] quelle stratégie pour que les workers rejoignent le master ?
Voir l'issue [#10](https://github.com/gforien/eks-with-ec2/issues/10)
- [ ] accéder au cluster depuis l'extérieur
Voir l'issue [#7](https://github.com/gforien/eks-with-ec2/issues/7)
- [ ] comment sécuriser ce point d'entrée avec un certificat ?## Notes
- Nécessite une clé SSH pré-existante pour se connecter
- Nécessite une variable d'environnement `TF_VAR_AWS_KEYNAME`
(`$env:TF_VAR_AWS_KEYNAME` avec Windows Powershell)
```powershell
$env:TF_VAR_AWS_KEYNAME = 'XXXXXXXX'
terraform apply -var token=$(.\Get-K8sToken.ps1)
```###### Gabriel Forien
INSA Lyon