Installer Kubernetes sur Centos 7

On sait tous que les containers et leur orchestration sont l’avenir et que l’avenir c’est maintenant.
Une fois qu’on prend ça en considération, on se doit de se mettre les mains dedans.

Bon, dans cet article, je n’expliquerai pas ce que sont les containers, Docker, Kubernetes, etc. Je le ferai plus tard et potentiellement, y’a de bien meilleures sources d’informations pour apprendre là-dessus.

Par contre, si vous voulez amener les containers en production sur vos environnements « on premise », voici une procédure assez simple qui vous permettra d’avoir un environnement clustérisé de trois nœuds Kubernetes.

On commence :

J’ai trois serveurs :

172.16.165.138 k8-01 (master)
172.16.165.142 k8-02 (node worker)
172.16.165.141 k8-03 (node worker)

L’important est d’avoir la plus petite empreinte possible, alors j’utilise CentOS 7 minimal. J’installe basique en créant un user (docker) qui est admin, donc qui peut faire sudo.

Au premier demarrage, je lance une mise a jour :

yum -y update

ensuite pour faciliter les choses, j’installe ifconfig et puisque j’utiliserai NFS

yum -y install net-tools nfs-utils

Les prochaines étapes doivent être suivie dans le bon ordre :

On doit désactiver le swap sur la machine. Pour ce faire, commenter le swap dans fstab

Mettre un # devant la ligne de swap

vi /etc/fstab
#/dev/mapper/centos-swap swap            swap    defaults        0 0

Modifier le fichier /etc/hosts avec toutes les infos des serveurs du futur cluster

Ajouter à la fin du fichier les infos de vos machines :

vi /etc/hosts
172.16.165.138    k8-01
172.16.165.142    k8-02
172.16.165.141    k8-03

Ensuite, on doit désactiver selinux et le firewall. Personnellement, j’aime bien créer les bonnes règles avant de le désactiver pour que si le service se réactive malencontreusement, au moins les services ne cesseront pas de fonctionner.

exec bash
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
systemctl disable firewalld
systemctl stop firewalld

Maintenant, on doit activer le bridge-netfilter pour permettre les fonctions comme la mascarade transparente et plein d’autres utilisées par Kubernetes et Docker

modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

et ajouter les lignes suivantes a la fin du fichier :

vi /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1

Pour installer les packages nécessaires, on doit maintenant ajouter le bon repository :

vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg

A ce point-ci, on en profite pour redémarrer le système au complet.

shutdown -r now

Sur le noeud maitre.

On est maintenant prêt à installer Docker et Kubernetes 🙂

yum install kubeadm docker -y --nogpgcheck
systemctl restart docker
systemctl enable docker
systemctl restart kubelet
systemctl enable kubelet

ou: 

systemctl restart docker && systemctl enable docker && systemctl restart kubelet && systemctl enable kubelet

kubeadm init

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’elle contient le token du master.

par exemple:

Your Kubernetes control-plane has initialized successfully!
 To start using your cluster, you need to run the following as a regular user:
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config
 You should now deploy a pod network to the cluster.
 Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
   https://kubernetes.io/docs/concepts/cluster-administration/addons/
 Then you can join any number of worker nodes by running the following on each as root:
 kubeadm join 172.16.165.138:6443 --token 25hz70.00xleinm8rdnmrky --discovery-token-ca-cert-hash sha256:1ef544a86756aaef721ecc87ddbf96bb6ebde8219ffee3b4753a9f17d1328dc2

Il faut maintenant lancer les commandes pour créer la config :

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Si on lance:

kubectl get nodes
kubectl get pods –all-namespaces

On devrait voir la configuration avec un « Not Ready » et des statuts « Pending »

La réseautique n’est donc pas configurée.

Sur le master toujours on doit maintenant la creer pour que les worker nodes puissent communiquer entre eux.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Attendons 2 ou 3 minutes.

Si on lance à nouveau les commandes suivantes, on verra que tout est maintenant Running et Ready

kubectl get nodes
kubectl get pods –all-namespaces

Le master est donc maintenant prêt à recevoir les worker nodes dans son cluster.

Sur chacun des worker nodes.

Même installation de base de CentOS 7.

Compte Root
Compte docker qui est administrateur et sudo Désactiver le swap
Modifier le host file
Mettre a jour la machine
Installer les outils ifconfig et nfs
Désactiver le firewall et configurer le br_netfilter
Configurer le repo
Redémarrer
yum install kubeadm docker -y --nogpgcheck
systemctl restart docker
systemctl enable docker

Une fois que docker est active on peut joindre les nœuds au cluster avec la commande qu’on a copié du master :

kubeadm join 172.16.165.138:6443 --token 25hz70.00xleinm8rdnmrky --discovery-token-ca-cert-hash sha256:1ef544a86756aaef721ecc87ddbf96bb6ebde8219ffee3b4753a9f17d1328dc2

après quelques minutes, on lance les commandes sur le master et les trois nœuds sont Ready

kubectl get nodes
kubectl get pods –all-namespaces

Voila. Vous pouvez maintenant aller en prod et tout casser 🙂

À propos malabelle

Je suis spécialiste VMware, Linux et Microsoft depuis plus de 20 ans. Je travaille comme architecte à mon compte chez stockage.io. Mon temps est rempli principalement par ma super job, des jams de musique (je suis bassiste), des voyages et ma famille. J'écris de temps en temps sur des magazines en ligne et j'adore faire de la rénovation.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *