Différences entre versions de « Deployer un cluster Kubernetes avec CoreOS »

De Ikoula Wiki
Jump to navigation Jump to search
 
(53 versions intermédiaires par 8 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
Cette procédure décrit comment déployer rapidement et simplement un cluster [http://kubernetes.io/ Kubernetes] multi-nodes avec 3 instances CoreOS. Kubernetes fonctionnent en mode client - serveur, le client Kubernete est nommé "Kubernetes minion" et le serveur "Kubernetes master". L'instance Kubernete Master est l'instance qui va orchestrer de manière centralisée les instances Kubernetes Minions. Dans notre exemple, une instance CoreOS jouera la rôle de master Kubernetes et les deux autres instances joueront le rôle de node Kubernetes (minion).
+
<span data-link_translate_fr_title="Deployer un cluster Kubernetes avec CoreOS (Dépréciée) "  data-link_translate_fr_url="Deployer un cluster Kubernetes avec CoreOS"></span>[[:fr:Deployer un cluster Kubernetes avec CoreOS]][[fr:Deployer un cluster Kubernetes avec CoreOS]]
 +
<span data-link_translate_he_title="לפרוס את אשכול Kubernetes עם CoreOS"  data-link_translate_he_url="%D7%9C%D7%A4%D7%A8%D7%95%D7%A1+%D7%90%D7%AA+%D7%90%D7%A9%D7%9B%D7%95%D7%9C+Kubernetes+%D7%A2%D7%9D+CoreOS"></span>[[:he:לפרוס את אשכול Kubernetes עם CoreOS]][[he:לפרוס את אשכול Kubernetes עם CoreOS]]
 +
<span data-link_translate_ro_title="Implementaţi un cluster Kubernetes cu CoreOS"  data-link_translate_ro_url="Implementa%C5%A3i+un+cluster+Kubernetes+cu+CoreOS"></span>[[:ro:Implementaţi un cluster Kubernetes cu CoreOS]][[ro:Implementaţi un cluster Kubernetes cu CoreOS]]
 +
<span data-link_translate_ru_title="Развертывание кластера Kubernetes с CoreOS"  data-link_translate_ru_url="%D0%A0%D0%B0%D0%B7%D0%B2%D0%B5%D1%80%D1%82%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0+Kubernetes+%D1%81+CoreOS"></span>[[:ru:Развертывание кластера Kubernetes с CoreOS]][[ru:Развертывание кластера Kubernetes с CoreOS]]
 +
<span data-link_translate_pl_title="Wdróż klaster Kubernetes z CoreOS"  data-link_translate_pl_url="Wdr%C3%B3%C5%BC+klaster+Kubernetes+z+CoreOS"></span>[[:pl:Wdróż klaster Kubernetes z CoreOS]][[pl:Wdróż klaster Kubernetes z CoreOS]]
 +
<span data-link_translate_ja_title="クラスター コア Os と Kubernetes を展開します。"  data-link_translate_ja_url="%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%83%BC+%E3%82%B3%E3%82%A2+Os+%E3%81%A8+Kubernetes+%E3%82%92%E5%B1%95%E9%96%8B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82"></span>[[:ja:クラスター コア Os と Kubernetes を展開します。]][[ja:クラスター コア Os と Kubernetes を展開します。]]
 +
<span data-link_translate_ar_title="نشر مجموعة كوبيرنيتيس مع CoreOS"  data-link_translate_ar_url="%D9%86%D8%B4%D8%B1+%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A9+%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D9%8A%D8%AA%D9%8A%D8%B3+%D9%85%D8%B9+CoreOS"></span>[[:ar:نشر مجموعة كوبيرنيتيس مع CoreOS]][[ar:نشر مجموعة كوبيرنيتيس مع CoreOS]]
 +
<span data-link_translate_zh_title="部署群集与 CoreOS Kubernetes"  data-link_translate_zh_url="%E9%83%A8%E7%BD%B2%E7%BE%A4%E9%9B%86%E4%B8%8E+CoreOS+Kubernetes"></span>[[:zh:部署群集与 CoreOS Kubernetes]][[zh:部署群集与 CoreOS Kubernetes]]
 +
<span data-link_translate_de_title="Bereitstellen eines Clusters Kubernetes mit CoreOS" data-link_translate_de_url="Bereitstellen+eines+Clusters+Kubernetes+mit+CoreOS"></span>[[:de:Bereitstellen eines Clusters Kubernetes mit CoreOS]][[de:Bereitstellen eines Clusters Kubernetes mit CoreOS]]
 +
<span data-link_translate_nl_title="Implementeer een cluster Kubernetes met CoreOS"  data-link_translate_nl_url="Implementeer+een+cluster+Kubernetes+met+CoreOS"></span>[[:nl:Implementeer een cluster Kubernetes met CoreOS]][[nl:Implementeer een cluster Kubernetes met CoreOS]]
 +
<span data-link_translate_it_title="Distribuire un cluster Kubernetes con CoreOS"  data-link_translate_it_url="Distribuire+un+cluster+Kubernetes+con+CoreOS"></span>[[:it:Distribuire un cluster Kubernetes con CoreOS]][[it:Distribuire un cluster Kubernetes con CoreOS]]
 +
<span data-link_translate_pt_title="Implantar um cluster Kubernetes com CoreOS"  data-link_translate_pt_url="Implantar+um+cluster+Kubernetes+com+CoreOS"></span>[[:pt:Implantar um cluster Kubernetes com CoreOS]][[pt:Implantar um cluster Kubernetes com CoreOS]]
 +
<span data-link_translate_es_title="Implementar un clúster Kubernetes con CoreOS"  data-link_translate_es_url="Implementar+un+cl%C3%BAster+Kubernetes+con+CoreOS"></span>[[:es:Implementar un clúster Kubernetes con CoreOS]][[es:Implementar un clúster Kubernetes con CoreOS]]
 +
<span data-link_translate_en_title="Deploy a cluster Kubernetes with CoreOS (Deprecated)"  data-link_translate_en_url="Deploy+a+cluster+Kubernetes+with+CoreOS"></span>[[:en:Deploy a cluster Kubernetes with CoreOS]][[en:Deploy a cluster Kubernetes with CoreOS]]
  
 +
{{#seo:
 +
|title=Déployer un cluster Kubernetes avec CoreOS
 +
|title_mode=append
 +
|keywords=these,are,your,keywords
 +
|description=Découvrez dans cet article comment déployer un cluster Kubernetes avec CoreOS
 +
|image=Uploaded_file.png
 +
|image_alt=Wiki Logo
 +
}}
  
Kubernetes est un système d'orchestration open source crée par Google permettant la gestion d'application conteneurisées avec Docker sur un cluster de plusieurs hôtes (3 VM CoreOS dans notre exemple). Il permet notamment le déploiement, la maintenance et la scalabilité d'applications. Pour en savoir plus vous pouvez vous rendre sur [https://github.com/GoogleCloudPlatform/kubernetes/ le github Kubernetes]
 
  
 +
<!--T:1-->
 +
'''Cette procédure est maintenant dépréciée du fait qu'elle s'appuie sur fleet qui n'est plus maintenu par CoreOS, veuillez suivre la procédure disponible ici https://fr-wiki.ikoula.com/fr/Deployer_un_cluster_Kubernetes'''
  
Nous partons du principe que vos 3 instances CoreOS sont déjà déployées, qu''''elles peuvent communiquer entre elles''' et que vous y êtes connectés en ssh avec l'utilisateur core.
+
Cette procédure décrit comment déployer rapidement et simplement un cluster [http://kubernetes.io/ Kubernetes] multi-nodes avec trois instances CoreOS. [https://www.ikoula.com/fr/cloud-public/oneclick/kubernetes Kubernetes] fonctionnent en mode client - {{Template:Serveur}}, le client Kubernetes est nommé "Kubernetes minion" et le {{Template:Serveur}} "Kubernetes master". L'instance Kubernetes Master est l'instance qui va orchestrer de manière centralisée les instances Kubernetes Minions. Dans notre exemple, une instance CoreOS jouera la rôle de master Kubernetes et les deux autres instances joueront le rôle de node Kubernetes (minion).
  
  
Si cela n'est pas déjà fait, mettez à jour vos instances CoreOS afin qu'elles soient à minima en version CoreOS 653.0.0 et inclues Etcd2 (voir notre FAQ  [https://ikoula.wiki/help/Mettre_a_jour_CoreOS_manuellement Mettre à jour CoreOS manuellement]). Dans notre cas toutes nos instances sont en CoreOS stable 681.2.0.
+
<!--T:2-->
 +
==Kubernetes==
 +
Kubernetes est un système d'orchestration Open Source crée par Google permettant la gestion d'application conteneurisées avec Docker sur un cluster de plusieurs hôtes (trois VM CoreOS dans notre exemple). Il permet notamment le déploiement, la maintenance et la scalabilité d'applications. Pour en savoir plus, vous pouvez vous rendre sur [https://github.com/GoogleCloudPlatform/kubernetes/ le github Kubernetes].
  
  
 +
<!--T:3-->
 +
==Déroulé==
 +
Nous partons du principe que vos trois instances CoreOS sont déjà déployées, qu''''elles peuvent communiquer entre elles''' et que vous y êtes connectés en SSH avec l'utilisateur core.
 +
 +
 +
<!--T:4-->
 +
Si cela n'est pas déjà fait, mettez à jour vos instances CoreOS afin qu'elles soient à minima en version CoreOS 653.0.0 et incluent Etcd2 (voir notre FAQ  [https://ikoula.wiki/help/Mettre_a_jour_CoreOS_manuellement Mettre à jour CoreOS manuellement]). Dans notre cas toutes nos instances sont en CoreOS stable 681.2.0.
 +
 +
 +
<!--T:5-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ cat /etc/lsb-release
 
$ cat /etc/lsb-release
Ligne 20 : Ligne 54 :
  
  
Nous devons également faire en sorte que toutes nos instances CoreOS ont un ID de machine différent pour le bon fonctionnement en context cluster. Pour se faire il suffit de supprimer le fichier /etc/machine-id et de redémarrer chacune de vos instances CoreOS  soit :  
+
<!--T:6-->
 +
Nous devons également faire en sorte que toutes nos instances CoreOS aient un ID de machine différent pour le bon fonctionnement en context cluster. Pour se faire il suffit de supprimer le fichier /etc/machine-id et de redémarrer chacune de vos instances CoreOS  soit :  
  
  
 +
<!--T:7-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
$ sudo rm -f /etc/machine-id && sudo reboot
 
$ sudo rm -f /etc/machine-id && sudo reboot
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
Cela permet également la mise à jour de la version de CoreOS.
  
== '''Configuration de l'instance Kubernetes Master :''' ==
+
=== Configuration de l'instance Kubernetes Master === <!--T:8-->
  
  
Ecraser le fichier cloud-config.yml par défaut par celui de notre configuration Kubernetes Master en effectuant les commandes suivantes ('''uniquement sur l'instance qui jouera le rôle master et dans le même ordre d'exécution que celui ci-dessous''') :
+
<!--T:9-->
 +
Ecraser le fichier {{Template:Cloud}}-config.yml par défaut par celui de notre configuration Kubernetes Master en effectuant les commandes suivantes ('''uniquement sur l'instance qui jouera le rôle master et dans le même ordre d'exécution que celui ci-dessous''') :
  
  
 +
<!--T:10-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
core@Kube-MASTER ~ $ sudo wget -O /usr/share/oem/cloud-config.yml http://mirror02.ikoula.com/priv/coreos/kubernetes-master.yaml
+
core@Kube-MASTER ~ $ sudo wget -O /usr/share/oem/cloud-config.yml ftp://mirror02.ikoula.com/coreos/kubernetes-master.yaml
--2015-06-22 15:55:48--  http://mirror02.ikoula.com/priv/coreos/kubernetes-master.yaml
 
Resolving mirror02.ikoula.com... 80.93.X.X, 2a00:c70:1:80:93:81:178:1
 
Connecting to mirror02.ikoula.com|80.93.X.X|:80... connected.
 
HTTP request sent, awaiting response... 200 OK
 
Length: 8913 (8.7K) [text/plain]
 
Saving to: '/usr/share/oem/cloud-config.yml'
 
 
 
/usr/share/oem/cloud-config.yml              100%[===================================================================================================>]  8.70K  --.-KB/s  in 0s
 
 
 
2015-06-22 15:55:48 (148 MB/s) - '/usr/share/oem/cloud-config.yml' saved [8913/8913]
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  
 +
<!--T:13-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ export `cat /etc/environment`
 
core@Kube-MASTER ~ $ export `cat /etc/environment`
Ligne 54 : Ligne 84 :
  
  
 +
<!--T:14-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ sudo sed -i 's#PRIVATE_IP#'$COREOS_PRIVATE_IPV4'#g' /usr/share/oem/cloud-config.yml
 
core@Kube-MASTER ~ $ sudo sed -i 's#PRIVATE_IP#'$COREOS_PRIVATE_IPV4'#g' /usr/share/oem/cloud-config.yml
Ligne 59 : Ligne 90 :
  
  
 +
<!--T:15-->
 
On redémarre notre instance afin que sa configuration soit effective :
 
On redémarre notre instance afin que sa configuration soit effective :
  
  
 +
<!--T:16-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ sudo reboot
 
core@Kube-MASTER ~ $ sudo reboot
Ligne 67 : Ligne 100 :
  
  
 +
<!--T:17-->
 
On vérifie que notre instance s'est bien initialisée :
 
On vérifie que notre instance s'est bien initialisée :
  
  
 +
<!--T:18-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ sudo fleetctl list-machines
 
core@Kube-MASTER ~ $ sudo fleetctl list-machines
Ligne 76 : Ligne 111 :
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
 +
<!--T:19-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ sudo etcdctl ls --recursive
 
core@Kube-MASTER ~ $ sudo etcdctl ls --recursive
Ligne 107 : Ligne 144 :
  
  
On peut également voir les services/ports en écoute (on y retrouve les composants serveur/master Kubernetes):
+
<!--T:20-->
 +
On peut également voir les services / ports en écoute (on y retrouve les composants {{Template:Serveur}}/master Kubernetes):
  
  
 +
<!--T:21-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ sudo netstat -taupen | grep LISTEN
 
core@Kube-MASTER ~ $ sudo netstat -taupen | grep LISTEN
Ligne 128 : Ligne 167 :
  
  
== '''Configuration des instances Kubernetes Minions :''' ==
+
===Configuration des instances Kubernetes Minions=== <!--T:22-->
  
  
Ecraser le fichier cloud-config.yml par défaut par celui de notre configuration Kubernetes Minion en effectuant les commandes suivantes sur l'ensemble de vos instance qui joueront le rôle de Kubernetes Minion ('''uniquement sur les instances qui joueront le rôle node/minion et dans le même ordre d'exécution que celui ci-dessous''') :
+
<!--T:23-->
 +
Écraser le fichier {{Template:Cloud}}-config.yml par défaut par celui de notre configuration Kubernetes Minion en effectuant les commandes suivantes sur l'ensemble de vos instance qui joueront le rôle de Kubernetes Minion ('''uniquement sur les instances qui joueront le rôle node/minion et dans le même ordre d'exécution que celui ci-dessous''') :
  
  
 +
<!--T:24-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
core@Kube-MINION1 ~ $ sudo wget -O /usr/share/oem/cloud-config.yml http://mirror02.ikoula.com/priv/coreos/kubernetes-minion.yaml
+
core@Kube-MINION1 ~ $ sudo wget -O /usr/share/oem/cloud-config.yml ftp://mirror02.ikoula.com/coreos/kubernetes-minion.yaml
--2015-06-22 16:39:26--  http://mirror02.ikoula.com/priv/coreos/kubernetes-minion.yaml
 
Resolving mirror02.ikoula.com... 80.93.X.X, 2a00:c70:1:80:93:81:178:1
 
Connecting to mirror02.ikoula.com|80.93.X.X|:80... connected.
 
HTTP request sent, awaiting response... 200 OK
 
Length: 5210 (5.1K) [text/plain]
 
Saving to: '/usr/share/oem/cloud-config.yml'
 
 
 
/usr/share/oem/cloud-config.yml              100%[===================================================================================================>]  5.09K  --.-KB/s  in 0s
 
 
 
2015-06-22 16:39:26 (428 MB/s) - '/usr/share/oem/cloud-config.yml' saved [5210/5210]
 
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  
 +
<!--T:27-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MINION1 ~ $ export `cat /etc/environment`
 
core@Kube-MINION1 ~ $ export `cat /etc/environment`
Ligne 154 : Ligne 186 :
  
  
Attention il faut adapter l'adresse ip privée de votre instance kubernete master dans la commande ci-dessous ('''remplacez 10.1.1.138 par l'ip privée de votre instance kubernetes master''') la commande ci-dessous :
+
<!--T:28-->
 +
Attention il faut adapter l'adresse IP privée de votre instance kubernetes master dans la commande ci-dessous ('''remplacez 10.1.1.138 par l'ip privée de votre instance kubernetes master''') la commande ci-dessous :
  
  
 +
<!--T:29-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MINION1 ~ $ sudo sed -i 's#MASTER_PRIVATE_IP#10.1.1.138#g' /usr/share/oem/cloud-config.yml
 
core@Kube-MINION1 ~ $ sudo sed -i 's#MASTER_PRIVATE_IP#10.1.1.138#g' /usr/share/oem/cloud-config.yml
Ligne 162 : Ligne 196 :
  
  
 +
<!--T:30-->
 
Enfin une fois que vous avez effectuez ces commandes à l'identique sur chacune de vos instances/nodes kubernetes minion, redémarrez celles-ci afin que leur configuration soient effectives et quelles joignent le cluster.
 
Enfin une fois que vous avez effectuez ces commandes à l'identique sur chacune de vos instances/nodes kubernetes minion, redémarrez celles-ci afin que leur configuration soient effectives et quelles joignent le cluster.
  
  
 +
<!--T:31-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MINION1 ~ $ sudo reboot
 
core@Kube-MINION1 ~ $ sudo reboot
Ligne 170 : Ligne 206 :
  
  
Nous vérifions que nos 2 instances kubernetes minion ont bien rejoind notre cluster (la commande ci-dessous peut être exécuté sur n'importe laquelle de vos instances membre de votre cluster) :
+
<!--T:32-->
 +
Nous vérifions que nos deux instances kubernetes minion ont bien rejoint notre cluster (la commande ci-dessous peut être exécutée sur n'importe laquelle de vos instances membre de votre cluster) :
  
  
 +
<!--T:33-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MASTER ~ $ sudo fleetctl list-machines
 
core@Kube-MASTER ~ $ sudo fleetctl list-machines
Ligne 182 : Ligne 220 :
  
  
 +
<!--T:34-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MINION1 ~ $ sudo etcdctl ls --recursive
 
core@Kube-MINION1 ~ $ sudo etcdctl ls --recursive
Ligne 224 : Ligne 263 :
  
  
 +
<!--T:35-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MINION2 ~ $ sudo etcdctl ls --recursive
 
core@Kube-MINION2 ~ $ sudo etcdctl ls --recursive
Ligne 266 : Ligne 306 :
  
  
 +
<!--T:36-->
 
Sur nos instances Kubernetes Minion voici les services/ports en écoute (dont le service Kubelet par lequel l'échange d'informations se fait avec le Kubernetes master) :
 
Sur nos instances Kubernetes Minion voici les services/ports en écoute (dont le service Kubelet par lequel l'échange d'informations se fait avec le Kubernetes master) :
  
  
 +
<!--T:37-->
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
core@Kube-MINION1 ~ $ sudo netstat -taupen | grep LISTEN
 
core@Kube-MINION1 ~ $ sudo netstat -taupen | grep LISTEN
Ligne 283 : Ligne 325 :
 
tcp6      0      0 :::2379                :::*                    LISTEN      232        16105      617/etcd2
 
tcp6      0      0 :::2379                :::*                    LISTEN      232        16105      617/etcd2
 
tcp6      0      0 :::5355                :::*                    LISTEN      245        14845      500/systemd-resolve
 
tcp6      0      0 :::5355                :::*                    LISTEN      245        14845      500/systemd-resolve
 +
</syntaxhighlight>
 +
 +
==Vérification de la communication avec l'API du Kubernetes Master== <!--T:38-->
 +
 +
 +
<!--T:39-->
 +
'''La Kubernetes UI :'''
 +
 +
<!--T:40-->
 +
Pour accéder au dashboard Kubernetes, il vous faut autoriser les connexions au port 8080 (Kubernetes master API server) et effectuer une redirection de port si besoin (zone avancée) vers le port 8080 de votre instance Kubernetes master. Ensuite, il vous suffit d'accéder à l'URL http://''adresse_ip_publique_instance_kubernetes_master'':8080/static/app/#/dashboard/ dans votre navigateur :
 +
 +
 +
<!--T:41-->
 +
[[File:Kubernetes-UI.png]]
 +
 +
 +
<!--T:42-->
 +
Depuis ce dashboard, il vous est entre autre possible d'afficher des informations sur vos nodes (Kubernetes Minion). Pour cela, vous pouvez cliquez sur "Views" :
 +
 +
 +
<!--T:43-->
 +
[[File:Kubernetes-UI-2.png]]
 +
 +
 +
<!--T:44-->
 +
Cliquez sur "Nodes" :
 +
 +
 +
<!--T:45-->
 +
[[File:Kubernetes-UI-3.png]]
 +
 +
 +
<!--T:46-->
 +
La liste de vos nodes Kubernetes minion apparait :
 +
 +
 +
<!--T:47-->
 +
[[File:Kubernetes-UI-4.png]]
 +
 +
 +
<!--T:48-->
 +
Cliquez sur l'un d'eux pour afficher les informations relatives à ce node (version de Docker, système, KubeProxy et Kubelet,etc.) :
 +
 +
 +
<!--T:49-->
 +
[[File:Kubernetes-UI-5.png]]
 +
 +
 +
<!--T:50-->
 +
'''Kubernetes CLI :'''
 +
 +
 +
<!--T:51-->
 +
Vous pouvez également utiliser l'outil [https://cloud.google.com/container-engine/docs/kubectl/ Kubectl] depuis votre instance Kubernetes master. Pour se faire, vous devez installer cette utilitaire comme suit :
 +
 +
 +
<!--T:52-->
 +
Une fois connecté en ssh sur votre instance Kubernetes master saisissez les commandes suivantes :
 +
 +
 +
<!--T:53-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ sudo wget -O /opt/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v0.17.0/bin/linux/amd64/kubectl
 +
--2015-06-23 11:39:09--  https://storage.googleapis.com/kubernetes-release/release/v0.17.0/bin/linux/amd64/kubectl
 +
Resolving storage.googleapis.com... 64.233.166.128, 2a00:1450:400c:c09::80
 +
Connecting to storage.googleapis.com|64.233.166.128|:443... connected.
 +
HTTP request sent, awaiting response... 200 OK
 +
Length: 20077224 (19M) [application/octet-stream]
 +
Saving to: '/opt/bin/kubectl'
 +
 +
<!--T:54-->
 +
/opt/bin/kubectl                              100%[===================================================================================================>]  19.15M  1.18MB/s  in 16s
 +
 +
<!--T:55-->
 +
2015-06-23 11:39:26 (1.18 MB/s) - '/opt/bin/kubectl' saved [20077224/20077224]
 
</syntaxhighlight>
 
</syntaxhighlight>
  
  
Enfin gardez à l'esprit que Kubernetes est toujours en statut de [https://github.com/googlecloudplatform/kubernetes#kubernetes-is-in-pre-production-beta "pre-production beta"]
+
<!--T:56-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ sudo chmod 755 /opt/bin/kubectl
 +
</syntaxhighlight>
 +
 
 +
 
 +
<!--T:57-->
 +
Test de la bonne communication avec votre API Kubernetes :
  
  
 +
<!--T:58-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl get node
 +
NAME        LABELS                              STATUS
 +
10.1.1.215  kubernetes.io/hostname=10.1.1.215  Ready
 +
10.1.1.83    kubernetes.io/hostname=10.1.1.83    Ready
 +
</syntaxhighlight>
 +
 +
 +
<!--T:59-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl cluster-info
 +
Kubernetes master is running at http://localhost:8080
 +
</syntaxhighlight>
 +
 +
 +
<!--T:60-->
 +
Nous pouvons ainsi déployer un premier container Nginx dans notre cluster :
 +
 +
 +
<!--T:61-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl run-container nginx --image=nginx
 +
CONTROLLER  CONTAINER(S)  IMAGE(S)  SELECTOR              REPLICAS
 +
nginx        nginx          nginx      run-container=nginx  1
 +
</syntaxhighlight>
 +
 +
 +
 +
<!--T:62-->
 +
On peut ensuite vérifier sur lequel de nos nodes minions ce container s'est déployé et exécuté ainsi que le nom du pod et l'ip qui lui a était affecté :
 +
 +
 +
<!--T:63-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl get pods
 +
POD          IP            CONTAINER(S)  IMAGE(S)  HOST                    LABELS                STATUS    CREATED    MESSAGE
 +
nginx-zia71  10.244.38.2                            10.1.1.215/10.1.1.215  run-container=nginx  Running  3 minutes
 +
                            nginx          nginx                                                    Running  1 minutes
 +
</syntaxhighlight>
 +
 +
 +
<!--T:64-->
 +
Nous retrouvons ces mêmes informations via le dashboard de la Kubernete UI en allant dans "Views" puis "Pods" :
 +
 +
 +
<!--T:65-->
 +
[[File:Kubernetes-UI-6.png]]
 +
 +
 +
<!--T:66-->
 +
Nous pouvons voir l'IP de l'host sur lequel, ce container s'est déployé, avec le nom du Pod et son adresse IP :
 +
 +
 +
<!--T:67-->
 +
[[File:Kubernetes-UI-7.png]]
 +
 +
 +
<!--T:68-->
 +
En cliquant dessus on obtient des informations plus détaillées sur notre Pod :
 +
 +
 +
<!--T:69-->
 +
[[File:Kubernetes-UI-8.png]]
 +
 +
 +
<!--T:70-->
 +
Nous pouvons stopper notre container simplement :
 +
 +
 +
<!--T:71-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl stop rc nginx
 +
replicationcontrollers/nginx
 +
</syntaxhighlight>
 +
 +
 +
<!--T:72-->
 +
Nous pouvons également déployer notre container avec deux replicas :
 +
 +
 +
<!--T:73-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl run-container nginx --image=nginx --replicas=2
 +
CONTROLLER  CONTAINER(S)  IMAGE(S)  SELECTOR              REPLICAS
 +
nginx        nginx          nginx      run-container=nginx  2
 +
</syntaxhighlight>
 +
 +
 +
<!--T:74-->
 +
<syntaxhighlight lang="bash">
 +
core@Kube-MASTER ~ $ kubectl get pods
 +
POD          IP            CONTAINER(S)  IMAGE(S)  HOST                    LABELS                STATUS    CREATED          MESSAGE
 +
nginx-7gen5  10.244.38.3                            10.1.1.215/10.1.1.215  run-container=nginx  Running  About a minute
 +
                            nginx          nginx                                                    Running  39 seconds
 +
nginx-w4xue  10.244.23.3                            10.1.1.83/10.1.1.83    run-container=nginx  Running  About a minute
 +
                            nginx          nginx                                                    Running  About a minute
 +
</syntaxhighlight>
 +
 +
 +
<!--T:75-->
 +
[[File:Kubernetes-UI-9.png]]
 +
 +
 +
 +
<!--T:76-->
 
Pour plus d'informations sur l'architecture, les différents composants et le fonctionnement d'un cluster Kubernetes, nous vous invitons à prendre connaissance de la documentation officielle [https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/design/architecture.md "Kubernetes architecture"] :
 
Pour plus d'informations sur l'architecture, les différents composants et le fonctionnement d'un cluster Kubernetes, nous vous invitons à prendre connaissance de la documentation officielle [https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/design/architecture.md "Kubernetes architecture"] :
  
  
 
+
<!--T:77-->
 
[[category:cloudstack]]
 
[[category:cloudstack]]
 
[[category:cloud public]]
 
[[category:cloud public]]
 
[[category:cloud privé]]
 
[[category:cloud privé]]
 +
[[category:Docker]]
 +
[[category:CoreOS]]
 +
[[category:Cloud]]
 +
<br />
 +
<comments />

Version actuelle datée du 20 septembre 2021 à 15:35

fr:Deployer un cluster Kubernetes avec CoreOS he:לפרוס את אשכול Kubernetes עם CoreOS ro:Implementaţi un cluster Kubernetes cu CoreOS ru:Развертывание кластера Kubernetes с CoreOS pl:Wdróż klaster Kubernetes z CoreOS ja:クラスター コア Os と Kubernetes を展開します。 ar:نشر مجموعة كوبيرنيتيس مع CoreOS zh:部署群集与 CoreOS Kubernetes de:Bereitstellen eines Clusters Kubernetes mit CoreOS nl:Implementeer een cluster Kubernetes met CoreOS it:Distribuire un cluster Kubernetes con CoreOS pt:Implantar um cluster Kubernetes com CoreOS es:Implementar un clúster Kubernetes con CoreOS en:Deploy a cluster Kubernetes with CoreOS


Cette procédure est maintenant dépréciée du fait qu'elle s'appuie sur fleet qui n'est plus maintenu par CoreOS, veuillez suivre la procédure disponible ici https://fr-wiki.ikoula.com/fr/Deployer_un_cluster_Kubernetes

Cette procédure décrit comment déployer rapidement et simplement un cluster Kubernetes multi-nodes avec trois instances CoreOS. Kubernetes fonctionnent en mode client - serveur, le client Kubernetes est nommé "Kubernetes minion" et le serveur "Kubernetes master". L'instance Kubernetes Master est l'instance qui va orchestrer de manière centralisée les instances Kubernetes Minions. Dans notre exemple, une instance CoreOS jouera la rôle de master Kubernetes et les deux autres instances joueront le rôle de node Kubernetes (minion).


Kubernetes

Kubernetes est un système d'orchestration Open Source crée par Google permettant la gestion d'application conteneurisées avec Docker sur un cluster de plusieurs hôtes (trois VM CoreOS dans notre exemple). Il permet notamment le déploiement, la maintenance et la scalabilité d'applications. Pour en savoir plus, vous pouvez vous rendre sur le github Kubernetes.


Déroulé

Nous partons du principe que vos trois instances CoreOS sont déjà déployées, qu'elles peuvent communiquer entre elles et que vous y êtes connectés en SSH avec l'utilisateur core.


Si cela n'est pas déjà fait, mettez à jour vos instances CoreOS afin qu'elles soient à minima en version CoreOS 653.0.0 et incluent Etcd2 (voir notre FAQ Mettre à jour CoreOS manuellement). Dans notre cas toutes nos instances sont en CoreOS stable 681.2.0.


$ cat /etc/lsb-release
DISTRIB_ID=CoreOS
DISTRIB_RELEASE=681.2.0
DISTRIB_CODENAME="Red Dog"
DISTRIB_DESCRIPTION="CoreOS 681.2.0"


Nous devons également faire en sorte que toutes nos instances CoreOS aient un ID de machine différent pour le bon fonctionnement en context cluster. Pour se faire il suffit de supprimer le fichier /etc/machine-id et de redémarrer chacune de vos instances CoreOS soit :


$ sudo rm -f /etc/machine-id && sudo reboot

Cela permet également la mise à jour de la version de CoreOS.

Configuration de l'instance Kubernetes Master

Ecraser le fichier cloud-config.yml par défaut par celui de notre configuration Kubernetes Master en effectuant les commandes suivantes (uniquement sur l'instance qui jouera le rôle master et dans le même ordre d'exécution que celui ci-dessous) :


core@Kube-MASTER ~ $ sudo wget -O /usr/share/oem/cloud-config.yml ftp://mirror02.ikoula.com/coreos/kubernetes-master.yaml


core@Kube-MASTER ~ $ export `cat /etc/environment`


core@Kube-MASTER ~ $ sudo sed -i 's#PRIVATE_IP#'$COREOS_PRIVATE_IPV4'#g' /usr/share/oem/cloud-config.yml


On redémarre notre instance afin que sa configuration soit effective :


core@Kube-MASTER ~ $ sudo reboot


On vérifie que notre instance s'est bien initialisée :


core@Kube-MASTER ~ $ sudo fleetctl list-machines
MACHINE         IP              METADATA
aee19a88...     10.1.1.138      role=master


core@Kube-MASTER ~ $ sudo etcdctl ls --recursive
/coreos.com
/coreos.com/updateengine
/coreos.com/updateengine/rebootlock
/coreos.com/updateengine/rebootlock/semaphore
/coreos.com/network
/coreos.com/network/config
/coreos.com/network/subnets
/coreos.com/network/subnets/10.244.69.0-24
/registry
/registry/ranges
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/namespaces
/registry/namespaces/default
/registry/services
/registry/services/endpoints
/registry/services/endpoints/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/default/kubernetes-ro
/registry/services/specs
/registry/services/specs/default
/registry/services/specs/default/kubernetes
/registry/services/specs/default/kubernetes-ro
/registry/serviceaccounts
/registry/serviceaccounts/default
/registry/serviceaccounts/default/default


On peut également voir les services / ports en écoute (on y retrouve les composants serveur/master Kubernetes):


core@Kube-MASTER ~ $ sudo netstat -taupen | grep LISTEN
tcp        0      0 10.1.1.138:7001         0.0.0.0:*               LISTEN      232        16319      634/etcd2
tcp        0      0 10.1.1.138:7080         0.0.0.0:*               LISTEN      0          19392      1047/kube-apiserver
tcp        0      0 0.0.0.0:5000            0.0.0.0:*               LISTEN      0          19142      973/python
tcp        0      0 127.0.0.1:10251         0.0.0.0:*               LISTEN      0          20047      1075/kube-scheduler
tcp        0      0 10.1.1.138:6443         0.0.0.0:*               LISTEN      0          19406      1047/kube-apiserver
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      245        14794      502/systemd-resolve
tcp        0      0 127.0.0.1:10252         0.0.0.0:*               LISTEN      0          19653      1058/kube-controlle
tcp        0      0 10.1.1.138:2380         0.0.0.0:*               LISTEN      232        16313      634/etcd2
tcp6       0      0 :::8080                 :::*                    LISTEN      0          19390      1047/kube-apiserver
tcp6       0      0 :::22                   :::*                    LISTEN      0          13647      1/systemd
tcp6       0      0 :::4001                 :::*                    LISTEN      232        16321      634/etcd2
tcp6       0      0 :::2379                 :::*                    LISTEN      232        16320      634/etcd2
tcp6       0      0 :::5355                 :::*                    LISTEN      245        14796      502/systemd-resolve


Configuration des instances Kubernetes Minions

Écraser le fichier cloud-config.yml par défaut par celui de notre configuration Kubernetes Minion en effectuant les commandes suivantes sur l'ensemble de vos instance qui joueront le rôle de Kubernetes Minion (uniquement sur les instances qui joueront le rôle node/minion et dans le même ordre d'exécution que celui ci-dessous) :


core@Kube-MINION1 ~ $ sudo wget -O /usr/share/oem/cloud-config.yml ftp://mirror02.ikoula.com/coreos/kubernetes-minion.yaml


core@Kube-MINION1 ~ $ export `cat /etc/environment`


Attention il faut adapter l'adresse IP privée de votre instance kubernetes master dans la commande ci-dessous (remplacez 10.1.1.138 par l'ip privée de votre instance kubernetes master) la commande ci-dessous :


core@Kube-MINION1 ~ $ sudo sed -i 's#MASTER_PRIVATE_IP#10.1.1.138#g' /usr/share/oem/cloud-config.yml


Enfin une fois que vous avez effectuez ces commandes à l'identique sur chacune de vos instances/nodes kubernetes minion, redémarrez celles-ci afin que leur configuration soient effectives et quelles joignent le cluster.


core@Kube-MINION1 ~ $ sudo reboot


Nous vérifions que nos deux instances kubernetes minion ont bien rejoint notre cluster (la commande ci-dessous peut être exécutée sur n'importe laquelle de vos instances membre de votre cluster) :


core@Kube-MASTER ~ $ sudo fleetctl list-machines
MACHINE         IP              METADATA
5097f972...     10.1.1.215      role=node
aee19a88...     10.1.1.138      role=master
fe86214c...     10.1.1.83       role=node


core@Kube-MINION1 ~ $ sudo etcdctl ls --recursive
/coreos.com
/coreos.com/updateengine
/coreos.com/updateengine/rebootlock
/coreos.com/updateengine/rebootlock/semaphore
/coreos.com/network
/coreos.com/network/config
/coreos.com/network/subnets
/coreos.com/network/subnets/10.244.69.0-24
/coreos.com/network/subnets/10.244.38.0-24
/coreos.com/network/subnets/10.244.23.0-24
/registry
/registry/ranges
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/namespaces
/registry/namespaces/default
/registry/services
/registry/services/specs
/registry/services/specs/default
/registry/services/specs/default/kubernetes
/registry/services/specs/default/kubernetes-ro
/registry/services/endpoints
/registry/services/endpoints/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/default/kubernetes-ro
/registry/serviceaccounts
/registry/serviceaccounts/default
/registry/serviceaccounts/default/default
/registry/events
/registry/events/default
/registry/events/default/10.1.1.215.13ea16c9c70924f4
/registry/events/default/10.1.1.83.13ea16f74bd4de1c
/registry/events/default/10.1.1.83.13ea16f77a4e7ab2
/registry/events/default/10.1.1.215.13ea16c991a4ee57
/registry/minions
/registry/minions/10.1.1.215
/registry/minions/10.1.1.83


core@Kube-MINION2 ~ $ sudo etcdctl ls --recursive
/coreos.com
/coreos.com/updateengine
/coreos.com/updateengine/rebootlock
/coreos.com/updateengine/rebootlock/semaphore
/coreos.com/network
/coreos.com/network/config
/coreos.com/network/subnets
/coreos.com/network/subnets/10.244.69.0-24
/coreos.com/network/subnets/10.244.38.0-24
/coreos.com/network/subnets/10.244.23.0-24
/registry
/registry/ranges
/registry/ranges/serviceips
/registry/ranges/servicenodeports
/registry/namespaces
/registry/namespaces/default
/registry/services
/registry/services/specs
/registry/services/specs/default
/registry/services/specs/default/kubernetes
/registry/services/specs/default/kubernetes-ro
/registry/services/endpoints
/registry/services/endpoints/default
/registry/services/endpoints/default/kubernetes
/registry/services/endpoints/default/kubernetes-ro
/registry/serviceaccounts
/registry/serviceaccounts/default
/registry/serviceaccounts/default/default
/registry/events
/registry/events/default
/registry/events/default/10.1.1.83.13ea16f77a4e7ab2
/registry/events/default/10.1.1.215.13ea16c991a4ee57
/registry/events/default/10.1.1.215.13ea16c9c70924f4
/registry/events/default/10.1.1.83.13ea16f74bd4de1c
/registry/minions
/registry/minions/10.1.1.215
/registry/minions/10.1.1.83


Sur nos instances Kubernetes Minion voici les services/ports en écoute (dont le service Kubelet par lequel l'échange d'informations se fait avec le Kubernetes master) :


core@Kube-MINION1 ~ $ sudo netstat -taupen | grep LISTEN
tcp        0      0 127.0.0.1:10249         0.0.0.0:*               LISTEN      0          18280      849/kube-proxy
tcp        0      0 0.0.0.0:5355            0.0.0.0:*               LISTEN      245        14843      500/systemd-resolve
tcp6       0      0 :::49005                :::*                    LISTEN      0          18284      849/kube-proxy
tcp6       0      0 :::10255                :::*                    LISTEN      0          19213      1025/kubelet
tcp6       0      0 :::47666                :::*                    LISTEN      0          18309      849/kube-proxy
tcp6       0      0 :::22                   :::*                    LISTEN      0          13669      1/systemd
tcp6       0      0 :::4001                 :::*                    LISTEN      232        16106      617/etcd2
tcp6       0      0 :::4194                 :::*                    LISTEN      0          19096      1025/kubelet
tcp6       0      0 :::10248                :::*                    LISTEN      0          19210      1025/kubelet
tcp6       0      0 :::10250                :::*                    LISTEN      0          19305      1025/kubelet
tcp6       0      0 :::2379                 :::*                    LISTEN      232        16105      617/etcd2
tcp6       0      0 :::5355                 :::*                    LISTEN      245        14845      500/systemd-resolve

Vérification de la communication avec l'API du Kubernetes Master

La Kubernetes UI :

Pour accéder au dashboard Kubernetes, il vous faut autoriser les connexions au port 8080 (Kubernetes master API server) et effectuer une redirection de port si besoin (zone avancée) vers le port 8080 de votre instance Kubernetes master. Ensuite, il vous suffit d'accéder à l'URL http://adresse_ip_publique_instance_kubernetes_master:8080/static/app/#/dashboard/ dans votre navigateur :


Kubernetes-UI.png


Depuis ce dashboard, il vous est entre autre possible d'afficher des informations sur vos nodes (Kubernetes Minion). Pour cela, vous pouvez cliquez sur "Views" :


Kubernetes-UI-2.png


Cliquez sur "Nodes" :


Kubernetes-UI-3.png


La liste de vos nodes Kubernetes minion apparait :


Kubernetes-UI-4.png


Cliquez sur l'un d'eux pour afficher les informations relatives à ce node (version de Docker, système, KubeProxy et Kubelet,etc.) :


Kubernetes-UI-5.png


Kubernetes CLI :


Vous pouvez également utiliser l'outil Kubectl depuis votre instance Kubernetes master. Pour se faire, vous devez installer cette utilitaire comme suit :


Une fois connecté en ssh sur votre instance Kubernetes master saisissez les commandes suivantes :


core@Kube-MASTER ~ $ sudo wget -O /opt/bin/kubectl https://storage.googleapis.com/kubernetes-release/release/v0.17.0/bin/linux/amd64/kubectl
--2015-06-23 11:39:09--  https://storage.googleapis.com/kubernetes-release/release/v0.17.0/bin/linux/amd64/kubectl
Resolving storage.googleapis.com... 64.233.166.128, 2a00:1450:400c:c09::80
Connecting to storage.googleapis.com|64.233.166.128|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 20077224 (19M) [application/octet-stream]
Saving to: '/opt/bin/kubectl'

<!--T:54-->
/opt/bin/kubectl                              100%[===================================================================================================>]  19.15M  1.18MB/s   in 16s

<!--T:55-->
2015-06-23 11:39:26 (1.18 MB/s) - '/opt/bin/kubectl' saved [20077224/20077224]


core@Kube-MASTER ~ $ sudo chmod 755 /opt/bin/kubectl


Test de la bonne communication avec votre API Kubernetes :


core@Kube-MASTER ~ $ kubectl get node
NAME         LABELS                              STATUS
10.1.1.215   kubernetes.io/hostname=10.1.1.215   Ready
10.1.1.83    kubernetes.io/hostname=10.1.1.83    Ready


core@Kube-MASTER ~ $ kubectl cluster-info
Kubernetes master is running at http://localhost:8080


Nous pouvons ainsi déployer un premier container Nginx dans notre cluster :


core@Kube-MASTER ~ $ kubectl run-container nginx --image=nginx
CONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR              REPLICAS
nginx        nginx          nginx      run-container=nginx   1


On peut ensuite vérifier sur lequel de nos nodes minions ce container s'est déployé et exécuté ainsi que le nom du pod et l'ip qui lui a était affecté :


core@Kube-MASTER ~ $ kubectl get pods
POD           IP            CONTAINER(S)   IMAGE(S)   HOST                    LABELS                STATUS    CREATED     MESSAGE
nginx-zia71   10.244.38.2                             10.1.1.215/10.1.1.215   run-container=nginx   Running   3 minutes
                            nginx          nginx                                                    Running   1 minutes


Nous retrouvons ces mêmes informations via le dashboard de la Kubernete UI en allant dans "Views" puis "Pods" :


Kubernetes-UI-6.png


Nous pouvons voir l'IP de l'host sur lequel, ce container s'est déployé, avec le nom du Pod et son adresse IP :


Kubernetes-UI-7.png


En cliquant dessus on obtient des informations plus détaillées sur notre Pod :


Kubernetes-UI-8.png


Nous pouvons stopper notre container simplement :


core@Kube-MASTER ~ $ kubectl stop rc nginx
replicationcontrollers/nginx


Nous pouvons également déployer notre container avec deux replicas :


core@Kube-MASTER ~ $ kubectl run-container nginx --image=nginx --replicas=2
CONTROLLER   CONTAINER(S)   IMAGE(S)   SELECTOR              REPLICAS
nginx        nginx          nginx      run-container=nginx   2


core@Kube-MASTER ~ $ kubectl get pods
POD           IP            CONTAINER(S)   IMAGE(S)   HOST                    LABELS                STATUS    CREATED          MESSAGE
nginx-7gen5   10.244.38.3                             10.1.1.215/10.1.1.215   run-container=nginx   Running   About a minute
                            nginx          nginx                                                    Running   39 seconds
nginx-w4xue   10.244.23.3                             10.1.1.83/10.1.1.83     run-container=nginx   Running   About a minute
                            nginx          nginx                                                    Running   About a minute


Kubernetes-UI-9.png


Pour plus d'informations sur l'architecture, les différents composants et le fonctionnement d'un cluster Kubernetes, nous vous invitons à prendre connaissance de la documentation officielle "Kubernetes architecture" :


Vous n'êtes pas autorisé à publier de commentaire.