{"id":1453,"date":"2019-11-21T11:36:19","date_gmt":"2019-11-21T16:36:19","guid":{"rendered":"http:\/\/www.hoplawego.com\/blog\/?p=1453"},"modified":"2020-12-14T11:46:41","modified_gmt":"2020-12-14T16:46:41","slug":"installer-kubernetes-sur-centos-7","status":"publish","type":"post","link":"https:\/\/www.hoplawego.com\/blog\/installer-kubernetes-sur-centos-7\/","title":{"rendered":"Installer Kubernetes sur Centos 7"},"content":{"rendered":"\n<p>On sait tous que les containers et leur orchestration sont l&rsquo;avenir et que l&rsquo;avenir c&rsquo;est maintenant.<br>\nUne fois qu&rsquo;on prend \u00e7a en consid\u00e9ration, on se doit de se mettre les mains dedans.<\/p>\n\n\n\n<p>Bon, dans cet article, je n\u2019expliquerai pas ce que sont les containers, Docker, Kubernetes, etc. Je le ferai plus tard et potentiellement, y\u2019a de bien meilleures sources d\u2019informations pour apprendre l\u00e0-dessus.<\/p>\n\n\n\n<p>Par contre, si vous voulez amener les containers en production sur vos environnements \u00ab on premise \u00bb, voici une proc\u00e9dure assez simple qui vous permettra d\u2019avoir un environnement clust\u00e9ris\u00e9 de trois n\u0153uds Kubernetes.<\/p>\n\n\n\n<p>On commence :<\/p>\n\n\n\n<p>J\u2019ai trois serveurs : <\/p>\n\n\n\n<p><em>172.16.165.138    k8-01 (master)<br>172.16.165.142    k8-02 (node worker)<br>172.16.165.141    k8-03 (node worker)<\/em><\/p>\n\n\n\n<p>L\u2019important est d\u2019avoir la plus petite empreinte possible, alors j\u2019utilise CentOS 7 minimal. J\u2019installe basique en cr\u00e9ant un user (docker) qui est admin, donc qui peut faire sudo.<\/p>\n\n\n\n<p>Au premier demarrage, je lance une mise a jour :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>yum -y update<\/em><\/pre>\n\n\n\n<p>ensuite pour faciliter les choses, j\u2019installe ifconfig et puisque j\u2019utiliserai NFS<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>yum -y install net-tools nfs-utils<\/em><\/pre>\n\n\n\n<p>Les prochaines \u00e9tapes doivent \u00eatre suivie dans le bon ordre :<\/p>\n\n\n\n<p>On doit d\u00e9sactiver le swap sur la machine. Pour ce faire, commenter le swap dans fstab<\/p>\n\n\n\n<p>Mettre un # devant la ligne de swap<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>vi \/etc\/fstab\n#\/dev\/mapper\/centos-swap swap            swap    defaults        0 0<\/em><\/pre>\n\n\n\n<p>Modifier le fichier \/etc\/hosts avec toutes les infos des serveurs du futur cluster<\/p>\n\n\n\n<p>Ajouter \u00e0 la fin du fichier les infos de vos machines :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>vi \/etc\/hosts\n172.16.165.138    k8-01\n172.16.165.142    k8-02\n172.16.165.141    k8-03<\/em><\/pre>\n\n\n\n<p>Ensuite, on doit d\u00e9sactiver selinux et le firewall. Personnellement, j\u2019aime bien cr\u00e9er les bonnes r\u00e8gles avant de le d\u00e9sactiver pour que si le service se r\u00e9active malencontreusement, au moins les services ne cesseront pas de fonctionner.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>exec bash\nsetenforce 0\nsed -i --follow-symlinks 's\/SELINUX=enforcing\/SELINUX=disabled\/g' \/etc\/sysconfig\/selinux<\/em>\n\n<em>firewall-cmd --permanent --add-port=6443\/tcp\nfirewall-cmd --permanent --add-port=2379-2380\/tcp\nfirewall-cmd --permanent --add-port=10250\/tcp\nfirewall-cmd --permanent --add-port=10251\/tcp\nfirewall-cmd --permanent --add-port=10252\/tcp\nfirewall-cmd --permanent --add-port=10255\/tcp\nfirewall-cmd --reload\nsystemctl disable firewalld\nsystemctl stop firewalld<\/em><\/pre>\n\n\n\n<p>Maintenant, on doit activer le bridge-netfilter pour permettre les fonctions comme la mascarade transparente et plein d\u2019autres utilis\u00e9es par Kubernetes et Docker<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>modprobe br_netfilter\necho '1' &gt; \/proc\/sys\/net\/bridge\/bridge-nf-call-iptables<\/em><\/pre>\n\n\n\n<p>et ajouter les lignes suivantes a la fin du fichier :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>vi \/etc\/sysctl.d\/99-kubernetes-cri.conf\nnet.bridge.bridge-nf-call-iptables  = 1\nnet.ipv4.ip_forward                 = 1\nnet.bridge.bridge-nf-call-ip6tables = 1<\/em><\/pre>\n\n\n\n<p>Pour installer les packages n\u00e9cessaires, on doit maintenant ajouter le bon repository :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>vi \/etc\/yum.repos.d\/kubernetes.repo\n[kubernetes]\nname=Kubernetes\nbaseurl=https:\/\/packages.cloud.google.com\/yum\/repos\/kubernetes-el7-x86_64\nenabled=1\ngpgcheck=1\nrepo_gpgcheck=1\ngpgkey=https:\/\/packages.cloud.google.com\/yum\/doc\/yum-key.gpg\nhttps:\/\/packages.cloud.google.com\/yum\/doc\/rpm-package-key.gpg<\/em><\/pre>\n\n\n\n<p>A ce point-ci, on en profite pour red\u00e9marrer le syst\u00e8me au complet.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>shutdown -r now<\/em><\/pre>\n\n\n\n<p><strong><em><span style=\"text-decoration: underline;\">Sur le noeud maitre.<\/span><\/em><\/strong><\/p>\n\n\n\n<p>On est maintenant pr\u00eat \u00e0 installer Docker et Kubernetes \ud83d\ude42<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>yum install kubeadm docker -y --nogpgcheck\nsystemctl restart docker<\/em>\n<em>systemctl enable docker\nsystemctl restart kubelet<\/em>\n<em>systemctl enable kubelet<\/em>\n\nou: \n\n<em>systemctl restart docker &amp;&amp; systemctl enable docker &amp;&amp; systemctl restart kubelet &amp;&amp; systemctl enable kubelet<\/em>\n\n<em>kubeadm init<\/em><\/pre>\n\n\n\n<p>Une fois que ca sera fini, il y aura une commande a prendre en note pour joindre les node workers au master. Il faut la noter puisqu&rsquo;elle contient le token du master.<\/p>\n\n\n\n<p>par exemple:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>Your Kubernetes control-plane has initialized successfully!\n To start using your cluster, you need to run the following as a regular user:\n mkdir -p $HOME\/.kube\n sudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\n sudo chown $(id -u):$(id -g) $HOME\/.kube\/config\n You should now deploy a pod network to the cluster.\n Run \"kubectl apply -f [podnetwork].yaml\" with one of the options listed at:\n   https:\/\/kubernetes.io\/docs\/concepts\/cluster-administration\/addons\/\n Then you can join any number of worker nodes by running the following on each as root:\n kubeadm join 172.16.165.138:6443 --token 25hz70.00xleinm8rdnmrky --discovery-token-ca-cert-hash sha256:1ef544a86756aaef721ecc87ddbf96bb6ebde8219ffee3b4753a9f17d1328dc2<\/em><\/pre>\n\n\n\n<p>Il faut maintenant lancer les commandes pour cr\u00e9er la config :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>mkdir -p $HOME\/.kube\nsudo cp -i \/etc\/kubernetes\/admin.conf $HOME\/.kube\/config\nsudo chown $(id -u):$(id -g) $HOME\/.kube\/config<\/em><\/pre>\n\n\n\n<p>Si on lance:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>kubectl get nodes\nkubectl get pods \u2013all-namespaces<\/em><\/pre>\n\n\n\n<p>On devrait voir la configuration avec un \u00ab Not Ready \u00bb et des statuts \u00ab Pending \u00bb<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"608\" height=\"186\" src=\"http:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-1.png\" alt=\"\" class=\"wp-image-1474\" srcset=\"https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-1.png 608w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-1-300x92.png 300w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-1-150x46.png 150w\" sizes=\"auto, (max-width: 608px) 100vw, 608px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"369\" height=\"58\" src=\"http:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-2.png\" alt=\"\" class=\"wp-image-1475\" srcset=\"https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-2.png 369w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-2-300x47.png 300w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-2-150x24.png 150w\" sizes=\"auto, (max-width: 369px) 100vw, 369px\" \/><\/figure>\n\n\n\n<p>La r\u00e9seautique n\u2019est donc pas configur\u00e9e.<\/p>\n\n\n\n<p>Sur le master toujours on doit maintenant la creer pour que les worker nodes puissent communiquer entre eux.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>export kubever=$(kubectl version | base64 | tr -d '\\n')\nkubectl apply -f \"https:\/\/cloud.weave.works\/k8s\/net?k8s-version=$kubever\"<\/em><\/pre>\n\n\n\n<p>Attendons 2 ou 3 minutes.<\/p>\n\n\n\n<p>Si on lance \u00e0 nouveau les commandes suivantes, on verra que tout est maintenant Running et Ready<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><em>kubectl get nodes<\/em><\/code><em>\n<\/em><code><em>kubectl get pods \u2013all-namespaces<\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"617\" height=\"230\" src=\"http:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-3.png\" alt=\"\" class=\"wp-image-1476\" srcset=\"https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-3.png 617w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-3-300x112.png 300w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-3-150x56.png 150w\" sizes=\"auto, (max-width: 617px) 100vw, 617px\" \/><\/figure>\n\n\n\n<p>Le master est donc maintenant pr\u00eat \u00e0 recevoir les worker nodes dans son cluster.<\/p>\n\n\n\n<p><strong>Sur chacun des worker nodes.<\/strong><\/p>\n\n\n\n<p>M\u00eame installation de base de CentOS 7.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><em>Compte Root<\/em><\/code>\n<code><em>Compte docker qui est administrateur et sudo D\u00e9sactiver le swap<\/em><\/code><em>\nModifier le host file\nMettre a jour la machine\nInstaller les outils ifconfig et nfs\nD\u00e9sactiver le firewall et configurer le br_netfilter\nConfigurer le repo\nRed\u00e9marrer<\/em><\/pre>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>yum install kubeadm docker -y --nogpgcheck\nsystemctl restart docker<\/em>\n<em>systemctl enable docker<\/em><\/pre>\n\n\n\n<p>Une fois que docker est active on peut joindre les n\u0153uds au cluster avec la commande qu\u2019on a copi\u00e9 du master :<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>kubeadm join 172.16.165.138:6443 --token 25hz70.00xleinm8rdnmrky --discovery-token-ca-cert-hash sha256:1ef544a86756aaef721ecc87ddbf96bb6ebde8219ffee3b4753a9f17d1328dc2\n<\/em><\/pre>\n\n\n\n<p>apr\u00e8s quelques minutes, on lance les commandes sur le master et les trois n\u0153uds sont Ready<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code><em>kubectl get nodes<\/em><\/code><em>\n<\/em><code><em>kubectl get pods \u2013all-namespaces<\/em><\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"305\" height=\"185\" src=\"http:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-5.png\" alt=\"\" class=\"wp-image-1478\" srcset=\"https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-5.png 305w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-5-300x182.png 300w, https:\/\/www.hoplawego.com\/blog\/wp-content\/uploads\/2019\/11\/image-5-150x91.png 150w\" sizes=\"auto, (max-width: 305px) 100vw, 305px\" \/><\/figure>\n\n\n\n<p>Voila. Vous pouvez maintenant aller en prod et tout casser \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On sait tous que les containers et leur orchestration sont l&rsquo;avenir et que l&rsquo;avenir c&rsquo;est maintenant. Une fois qu&rsquo;on prend \u00e7a en consid\u00e9ration, on se doit de se mettre les mains dedans. Bon, dans cet article, je n\u2019expliquerai pas ce que sont les containers, Docker, Kubernetes, etc. Je le ferai plus tard et potentiellement, y\u2019a &hellip; <\/p>\n","protected":false},"author":1,"featured_media":1452,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,2],"tags":[],"class_list":["post-1453","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux-et-bsd","category-t-i","grid-sizer"],"_links":{"self":[{"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/posts\/1453","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/comments?post=1453"}],"version-history":[{"count":20,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/posts\/1453\/revisions"}],"predecessor-version":[{"id":1487,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/posts\/1453\/revisions\/1487"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/media\/1452"}],"wp:attachment":[{"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/media?parent=1453"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/categories?post=1453"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hoplawego.com\/blog\/wp-json\/wp\/v2\/tags?post=1453"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}