Introduction

Dans cet article nous allons voir comment provisionner un cluster simple Kubernetes via AWS EKS.
Nous verrons dans un prochain article comment mettre en place l’autoscaling et comment faire pour que les nouvelles instances automatiquement crées soient des instances Spot.

Pré-requis

  • Compte AWS
  • Utilisateur Admin (Policy AdministratorAccess dans IAM)

Installation via Cloud9

  1. Créer un nouveau workspace dans Cloud9 <nom_de_votre_projet>
  2. Depuis Cloud9, via le terminal générer une clé SSH
1
ssh-keygen
  1. Uploader sa clé dans la région EC2
1
aws ec2 import-key-pair --key-name "<nom_de_votre_clé>" --public-key-material file://~/.ssh/id_rsa.pub
  1. Installer les outils Kubernetes
  • Créer le répertoire ~/.kube par défaut pour stocker la configuration kubectl

  • Installer kubectl

1
2
sudo curl --silent --location -o /usr/local/bin/kubectl "https://amazon-eks.s3-us-west-2.amazonaws.com/1.11.5/2018-12-06/bin/linux/amd64/kubectl"
sudo chmod +x /usr/local/bin/kubectl
  • Installer AWS IAM Authenticator
1
2
go get -u -v github.com/kubernetes-sigs/aws-iam-authenticator/cmd/aws-iam-authenticator
sudo mv ~/go/bin/aws-iam-authenticator /usr/local/bin/aws-iam-authenticator
  • Vérifier les binaires
1
2
kubectl version --short --client
aws-iam-authenticator help
  • Installer JQ
1
sudo yum -y install jq
  1. Créer un rôle IAM pour le workspace Cloud9
  1. Attacher le rôle IAM à votre workspace
  • Cliquer sur le lien suivant pour identifier votre instance Cloud9 EC2: https://console.aws.amazon.com/ec2/v2/home?#Instances:tag:Name=aws-cloud9-<nom_de_votre_projet>*;sort=desc:launchTime

  • Selectionner votre instance et cliquer sur Actions / Instance Settings / Attach/Replace IAM Role

  • Sélectionner <nom_de_votre_projet>-admin dans la drop down IAM Role et cliquer sur Apply.

  1. Mettre à jour les préférences IAM du workspace
  • Retourner dans votre workspace Cloud0 et lancer l’onglet préférences en cliquant en haut à droite sur la roue crantée.

  • Sélectionner AWS SETTINGS

  • Décocher AWS managed temporary credentials

  • Fermer l’onglet des préférences

  1. Pour être certain que des credentials n’ont pas déjà été mis en place, exécuter la commande suivante:
1
rm -vf ${HOME}/.aws/credentials
  1. Configurer l’AWS cli avec la région actuelle:
1
2
3
4
export AWS_REGION=$(curl -s 169.254.169.254/latest/dynamic/instance-identity/document | jq -r '.region')
echo "export AWS_REGION=${AWS_REGION}" >> ~/.bash_profile
aws configure set default.region ${AWS_REGION}
aws configure get default.region
  1. Valider le rôle IAM
1
2
INSTANCE_PROFILE_NAME=`basename $(aws ec2 describe-instances --filters Name=tag:Name,Values=aws-cloud9-${C9_PROJECT}-${C9_PID} | jq -r '.Reservations[0].Instances[0].IamInstanceProfile.Arn' | awk -F "/" "{print $2}")`
aws iam get-instance-profile --instance-profile-name $INSTANCE_PROFILE_NAME --query "InstanceProfile.Roles[0].RoleName" --output text

En sortie on doit obtenir ceci:

1
<nom_de_votre_projet>-admin

Comparer le résultat de cette commande avec celle-ci:

1
aws sts get-caller-identity

Si l’ARN contient le rôle name comme ci-dessous, tout est bien configuré:

1
2
3
4
5
{
"Account": "123456789012",
"UserId": "AROA1SAMPLEAWSIAMROLE:i-01234567890abcdef",
"Arn": "arn:aws:sts::123456789012:assumed-role/<nom_de_votre_projet>-admin/i-01234567890abcdef"
}
  1. Installer le binaire eksctl:
1
2
3
curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp

sudo mv -v /tmp/eksctl /usr/local/bin

Et vérifier que l’installation est bonne via:

1
eksctl version
  1. Création du cluster
1
eksctl create cluster --name=<nom_de_votre_projet>-eksctl --nodes=3 --node-ami=auto --region=${AWS_REGION}

Vérifier le bon fonctionnement du cluster

1
kubectl get nodes

Déployer le dashboard k8s officiel

1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
  1. Accéder au dashboard
1
kubectl proxy --port=8080 --address='0.0.0.0' --disable-filter=true &
  • Dans Cloud9, cliquer sur Tools / Preview / Preview Running Application. Positionnezvous à la fin de l’URL et ajoutez:
    /api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

  • Ouvrer un nouvel onglet et entrer la commande suivante pour obtenir un token:

1
aws-iam-authenticator token -i <nom_de_votre_projet>-eksctl --token-only
  • Enfin cliquer sur Sign In.