[LJP-Infos] Fabriquation de notre nouvelle usine à VM ou plutôt conteneurs
Dans cette vidéo, dans un cluster Kubernetes, on va se fabriquer une machine à VMs.
C'est une chose maintenant acquise, les VMs on peut en avoir besoin pour tout un tas d'utilisations.
Une simple machine virtuelle peut être créée avec Virtualbox, Vmware player ou Vmware workstation et HyperV tout dépend aussi de l'environnement.
On est alors limité en CPU et surtout en machines, ça prend de la place, ça prend des ressources. Même si avec les clones liées on peut déjà aller bien loin.
Ici, à partir d'un cluster Kubernetes, on va se créer un système qui va proposer des machines virtuelles, qui ne consomment que quelques Mo de RAM à peine et presque (presque) aucune ressources.
Ici, je parle d'usine à machine virtuelles. Bien que ça soit des conteneurs, on va voir comment s'y connecter, tout ça pour différentes distributions, pour l'utilisateur distant, il ne fera pas la différence avec une VM.
Vous retrouverez le fichier ayant servi pour créer les machines ici:
https://drive.google.com/file/d/1J2Ky8PejKpo6F8BEojwjE3NvZTSpmWbv/viewCe fichier donne quelques indications sur la création d'un pod, avec quelques directives mises dans un fichier de script.
Il permet de créer un pod debian de test, il propose également quelques commandes pour le faire fonctionner, dupliquer les machines, se connecter, le supprimer...
Il a été typiquement fait pour la vidéo "On se fabrique notre nouvelle usine a vm ( ou plutot usine à conteneurs)" par Ljp-Infos.
Le fichier est disponible ici: https://drive.google.com/file/d/1J2Ky8PejKpo6F8BEojwjE3NvZTSpmWbv/view?usp=share_link
Ljp-Infos le 18/05/2023
# Créer le fichier de pod vide
# ############################
mkdir -p /root/yaml
cat << EOF > /root/yaml/debian.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: my-configmap
data:
entrypoint.sh: |-
#!/bin/bash
apt update
apt install htop openssh-server inetutils-ping sudo -y
# users and passwords
useradd -m -c "Sudo base account" -s /bin/bash loisel
useradd -m -c "Sudo base account" -s /bin/bash utilisateur
echo "loisel ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/loisel
echo "loisel:MyPassword" | chpasswd
echo "utilisateur:MyPassword" | chpasswd
echo "root:MyPassword" | chpasswd
# Démarre et configure le service ssh
sed -i 's/#Port 22/Port 22/g' /etc/ssh/sshd_config
sed -i 's/#AddressFamily any/AddressFamily any/g' /etc/ssh/sshd_config
sed -i 's/#ListenAddress 0.0.0.0/ListenAddress 0.0.0.0/g' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/g' /etc/ssh/sshd_config
sed -i 's/#PermitTunnel no/PermitTunnel yes/g' /etc/ssh/sshd_config
# Add ssh key...
mkdir -p /home/loisel/.ssh
echo "mettez_ici_votre_clef_publique_rsa_pour_votre_user" > /home/loisel/.ssh/authorized_keys
service ssh start
# On peut encore améliorer la config dans le pod...
cat << EOF >> /etc/bash.bashrc
#
alias susu="sudo su"
alias ll="ls -l"
#
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
EOF
---
apiVersion: v1
kind: Pod
metadata:
name: debian
labels:
app: debian
namespace: default # Optionnal
spec:
containers:
- name: debian
image: debian
command: ["/bin/bash", "-c"]
args: ["/bin/entrypoint.sh && sleep 31536000"]
volumeMounts:
- name: configmap-volume
mountPath: /bin/entrypoint.sh
readOnly: true
subPath: entrypoint.sh
volumes:
- name: configmap-volume
configMap:
defaultMode: 0700
name: my-configmap
restartPolicy: Always
# Scecific for LJP-Infos servers
dnsPolicy: "None"
dnsConfig:
nameservers:
- 192.168.1.26 # Dns perso
- 89.2.0.1 # Dns1 FAI
- 89.2.0.2 # Dns2 FAI
searches:
- loisel.loc
EOF
# Ajouter le pod
kubectl apply -f /root/yaml/debian.yaml
# Lister les pods (si le script est long il FAUT peut-être attendre un peu)
kubectl get pods -o wide
# Se connecter au pod on peut l'utiliser quand le pod est "running"
kubectl exec -it debian -- /bin/bash
# Supprimer le pod
kubectl delete -n default pod debian --force
# On configure le firewal pour accepter les connexions depuis les autres noeuds (à adapter)
firewall-cmd --add-source=172.16.0.0/16 --permanent && firewall-cmd --reload
# Et on peut SSH vers les pods en local
ssh utilisateur@ip_du_pod
# Pour du ssh depuis on poste distant vers un pod on ajoute la route qui passe par un des noeuds (à adapter)
route add 172.16.0.0/16 passerelle 192.168.1.248
# On ajoute "-p" a la commande pour rendre permanent
# Pour ce qui est des ressources qu'on voudra limiter, on rajoute à la définition du pod - dans la rubrique containair (on adapte!)
resources:
limits:
memory: 1Gi
cpu: 500m
requests:
memory: 256Mi
cpu: 500m
# Pour un scipt de créattion des vm (a adapter pour les besoins):
********************************************************************
#!/bin/bash
clear
# Test inputs / return info if needed
if [ $# -lt 2 ]
then
echo 'Usage: $0 <name_of_image> <name_of_pod>'
fi
case $1 in
debian )
cp /root/yaml/debian.yaml /root/yaml/temp_pod.yaml
sed -i "s/ name: debian/ name: $2/g" /root/yaml/temp_pod.yaml
sed -i "s/ - name: debian/ - name: $2/g" /root/yaml/temp_pod.yaml
;;
default )
Echo "No template for this name $1"
exit 1
;;
esac
# Create new pod
kubectl apply -f /root/yaml/temp_pod.yaml > /dev/null
sleep 10
kubectl get pod $2 -o wide
********************************************************************
# Bon allez (pour ceux qui auront le courage d'arriver ici)...
# Pour Centos, Alma, Rocky c'est comme ça qu'on démarre le ssh - remplacer "service sshd start" par:
openssl genrsa -out /etc/ssh/ssh_host_rsa_key 1024
openssl ecparam -genkey -name secp521r1 | openssl ec -out /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key -q
chmod 400 /etc/ssh/ssh_host_*
rm -f /var/run/nologin
/usr/sbin/sshd Le time code:
02:03 Mon environnement
04:17 Conteneur "classique"
10:55 La connexion SSH
14:51 Configurer le firewall, connexions distantes
22:01 Un mot sur le réseau - des machines accessibles partout
28:48 Limiter les ressources
33:43 Avoir plein de machines