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 🙂