====== Kubernetes ====== Kubernetes est un orchestrateur de conteneur souvent utilisé avec docker. Vous devez aujourd'hui créer un cluster kubernetes en utilisant l'instaleur {{https://github.com/rancher/rke/|RKE (Rancher Kubernetes Engine)}}. RKE est un instaleur qui utilise docker pour contenir les différents composant de Kubernetes. Il est donc nécessaire de disposer de machines où docker est installé et fonctionnel. =====Préparation===== Dans le projet openstack Cloud, créez 3 machines : * basées sur l'instantané de volume ''snap-docker-ready'' * avec le flavor ''small'' Nous allons suivre {{https://rancher.com/an-introduction-to-rke/|ce tutoriel}} L'une des machines utilisées sera le master assumant les rôles de //control-pane// et //etcd// et les 2 autres seront des //workers//. Modifiez ces machines pour que l'utilisateur ''ubuntu'' soit utilisateur de docker (c'est à dire dans le groupe ''docker''). Vérifiez bien le fonctionnement et la possibilité de télécharger quelquechose avec la commande ''docker search''. La version de docker utilisée doit être compatible avec RKE, si ce n'est pas le cas rke vous préviendra lors du lancement du cluster. Il faudra alors modifier celle qui est installée sur les machines avec les commandes // Pour mettre a jour la base des paquets apt-get update // pour voir les versions disponibles de docker apt-cache madison docker-engine // pour installer la bonne version de docker apt-get install docker-engine= Ensuite, chaque machine doit avoir un moyen de se connecter par ssh sur les autres. Pour cela : * Créez une paire de clefs ssh sur le //master// (commande ''ssh-keygen'') et placez les à la position par défaut dans le fichier ''.ssh/id_rsa'' et ''.ssh/id_rsa.pub''. Ne mettez pas de mot de passe. * Copiez la clef secrète sur les autres machines dans le même répertoire * Ajoutez la clef au fichier des clefs autorisées (''.ssh/authorized_keys''). Attention de conserver les clefs déjà présentes (celles qui vous permettent de vous connecter à ces serveurs). =====Installation de RKE===== Installez RKE depuis le dépot : {{https://github.com/rancher/rke/releases/}}. Attention de bien choisir une version stable. Ce site propose les version de la plus récente à la plus ancienne, les premières version proposées sont souvent des //Release Candidate// ''RC''. LE fichier récupéré est un simple fichier exécutable. Utilisez le avec la commande : ./rke config Cette commande est un script interactif qui pose des questions pour créer le fichier de configuration du cluster. Créer un cluster sur vos 3 machines, la première devant assurer le rôle de ''controle-pane'' et celui de ''etcd'', les deux autres seront ''worker''. Il est possible de modifier le fichier après sa création. Ne recommencez pas tout à chaque erreur. Attention, dans la plupart des cas, il faut utiliser les réponses par défaut. Cette commande crée le fichier de configuration du cluster ''cluster.yml''. =====Installation de kubernetes ===== L'installation se lance simplement avec la commande ./rke up depuis le répertoire où se trouve le fichier ''cluster.yml''. Si tout se passe bien, la commande se termine par ... INFO[0075] [addons] User addon deployed successfully.. INFO[0075] Finished building Kubernetes cluster successfully Le cluster est maintenant en place. Il faut un logiciel client pour le piloter. Installez le package ''kubectl'' comme indiqué {{https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl|ici}}. La génération du cluster à créé un fichier de description ''kube_config_cluster.yml''. C'est un fichier qui permet à ''kubectl'' de contacter le cluster. Vous pouvez soit copier ce fichier sous le nom ''~/.kube/config'' soit ajouter ''%%--kubeconfig nomdufichier%%'' à chaque commande. Vous pouvez tester le cluster avec un premier pod (l'exemple est pris {{http://www.projectatomic.io/docs/gettingstarted/|ici}}. Créer un fichier de description test_www.yml : apiVersion: v1 kind: Pod metadata: name: www spec: containers: - name: nginx image: nginx ports: - containerPort: 80 hostPort: 8080 Et utiliser les commandes : // pour créer le pod kubectl create -f kube-nginx.yml // pour voir les pods éxistant kubectl get pods // pour voir les détails d'un pod kubectl describe pod Testez le service et supprimer le ensuite. =====Création d'un ensemble de service===== Tel que créé précédemment, le serveur web n'est accessible que depuis le noeud qui instancie le conteneur. Ce n'est pas souhaitable. Vous allez créer un service nginx identique, mais via un service de déploiement. Pour cela regarder [[https://kubernetes.io/docs/tasks/run-application/run-stateless-application-deployment/|la documentation ici]] Si vous avez suivit cette documentation, le conteneur n'expose plus de port sur le noeud hote. Il faut alors ajouter un service de type ''NodePort'' qui va écouter sur un port de tous les noeud du cluster et transmettre les requetes au conteneur. Pour cela regarder la [[https://kubernetes.io/docs/concepts/services-networking/service/|documentation ici]]