INFOTHEMA

Auteur Sujet: [LJP-Infos] Fabriquation de notre nouvelle usine à VM ou plutôt conteneurs  (Lu 1799 fois)

Animateur

  • Administrator
  • Hero Member
  • *****
  • Messages: 7057
    • Voir le profil
[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/view

Ce 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
Membre de l'APRIL (www.april.org) / Membre du bureau Association "Debian Facile"  (https://debian-facile.org)