xanmanning.k3s

Rôle Ansible : k3s (v3.x)

Rôle Ansible pour installer K3S ("Kubernetes léger") en tant que serveur autonome ou cluster.

CI

Aide Demandée !

Salut ! :wave: @xanmanning cherche un nouveau mainteneur pour travailler sur ce rôle Ansible. Je n'ai plus autant de temps libre et je n'écris plus d'Ansible régulièrement pour mon travail. Si cela vous intéresse, contactez-moi.

Notes de Version

Veuillez consulter Releases et CHANGELOG.md.

Exigences

L'hôte sur lequel vous exécutez Ansible doit avoir les dépendances Python suivantes :

Vous pouvez installer les dépendances à l'aide du fichier requirements.txt dans ce dépôt : pip3 install -r requirements.txt.

Ce rôle a été testé sur les distributions Linux suivantes :

  • Alpine Linux
  • Amazon Linux 2
  • Archlinux
  • CentOS 8
  • Debian 11
  • Fedora 31
  • Fedora 32
  • Fedora 33
  • openSUSE Leap 15
  • RockyLinux 8
  • Ubuntu 20.04 LTS

:warning: Les versions v3 de ce rôle ne prennent en charge que k3s >= v1.19. Pour k3s < v1.19, veuillez envisager de mettre à jour ou d'utiliser les versions v1.x de ce rôle.

Avant de procéder à la mise à niveau, consultez le CHANGELOG pour les notifications de changements majeurs.

Variables du Rôle

Depuis K3s v1.19.1+k3s1, vous pouvez maintenant configurer K3s à l'aide d'un fichier de configuration plutôt que des variables d'environnement ou des arguments en ligne de commande. La version v2 de ce rôle utilise la méthode du fichier de configuration au lieu de peupler un fichier d'unité systemd avec des arguments en ligne de commande. Il peut y avoir des exceptions définies dans Global/Cluster Variables, mais vous configurerez principalement k3s via des fichiers de configuration en utilisant les variables k3s_server et k3s_agent.

Voir "Configuration du Serveur (Plan de Contrôle)" et "Configuration de l'Agent (Travailleur)" ci-dessous.

Variables Globales/Cluster

Voici les variables définies pour tous les hôtes afin d'assurer une cohérence environnementale. Ce sont généralement des configurations au niveau du cluster.

Variable Description Valeur par Défaut
k3s_state État de k3s : installé, démarré, arrêté, téléchargé, désinstallé, validé. installé
k3s_release_version Utiliser une version spécifique de k3s, par exemple v0.2.0. Spécifiez false pour stable. false
k3s_airgap Booléen pour activer les installations hors ligne false
k3s_config_file Emplacement du fichier de configuration k3s. /etc/rancher/k3s/config.yaml
k3s_build_cluster Lorsque plusieurs hôtes de lecture sont disponibles, tenter de créer un cluster. Lisez les notes ci-dessous. true
k3s_registration_address Adresse d'enregistrement fixe pour les nœuds. IP ou FQDN. NULL
k3s_github_url Définir l'URL GitHub pour installer k3s. https://github.com/k3s-io/k3s
k3s_api_url URL pour l'API des mises à jour de K3S. https://update.k3s.io
k3s_install_dir Répertoire d'installation pour k3s. /usr/local/bin
k3s_install_hard_links Installer en utilisant des liens durs plutôt que des liens symboliques. false
k3s_server_config_yaml_d_files Liste plate de modèles pour compléter la configuration k3s_server. []
k3s_agent_config_yaml_d_files Liste plate de modèles pour compléter la configuration k3s_agent. []
k3s_server_manifests_urls Liste d'URLs à déployer sur le plan de contrôle principal. Lisez les notes ci-dessous. []
k3s_server_manifests_templates Liste plate de modèles à déployer sur le plan de contrôle principal. []
k3s_server_pod_manifests_urls Liste d'URLs pour installer des manifestes de pods statiques sur le plan de contrôle. Lisez les notes ci-dessous. []
k3s_server_pod_manifests_templates Liste plate de modèles pour installer des manifestes de pods statiques sur le plan de contrôle. []
k3s_use_experimental Autoriser l'utilisation de fonctionnalités expérimentales dans k3s. false
k3s_use_unsupported_config Autoriser l'utilisation de configurations non prises en charge dans k3s. false
k3s_etcd_datastore Activer le datastore etcd intégré (lisez les notes ci-dessous). false
k3s_debug Activer la journalisation de débogage sur le service k3s. false
k3s_registries Contenu du fichier de configuration des registres. { mirrors: {}, configs:{} }

Configuration du Service K3S

Les variables ci-dessous modifient la manière et le moment où le fichier d'unité de service systemd pour K3S est exécuté. Utilisez cela avec prudence, veuillez vous référer à la documentation systemd pour plus d'informations.

Variable Description Valeur par Défaut
k3s_start_on_boot Démarrer k3s au démarrage. true
k3s_service_requires Liste des unités systemd requises pour l'unité de service k3s. []
k3s_service_wants Liste des unités systemd "souhaitées" pour k3s (moins strict que "requires"). [] *
k3s_service_before Démarrer k3s avant une liste définie d'unités systemd. []
k3s_service_after Démarrer k3s après une liste définie d'unités systemd. [] *
k3s_service_env_vars Dictionnaire des variables d'environnement à utiliser dans le fichier d'unité systemd. {}
k3s_service_env_file Emplacement sur l'hôte d'un fichier d'environnement à inclure. false **

* Le modèle d'unité systemd spécifie toujours network-online.target pour wants et after.

** Le fichier doit déjà exister sur l'hôte cible, ce rôle ne créera ni ne gérera le fichier. Vous pouvez gérer ce fichier en dehors du rôle avec des pré-tâches dans votre playbook Ansible.

Variables de Groupe/Hôte

Voici les variables qui sont définies pour des hôtes individuels ou des groupes d'hôtes. Typiquement, vous définiriez cela au niveau du groupe pour le plan de contrôle ou les nœuds de travail.

Variable Description Valeur par Défaut
k3s_control_node Spécifiez si un hôte (ou un groupe d'hôtes) fait partie du plan de contrôle. false (le rôle déléguera automatiquement un nœud)
k3s_server Configuration du serveur (plan de contrôle), voir les notes ci-dessous. {}
k3s_agent Configuration de l'agent (travailleur), voir les notes ci-dessous. {}

Configuration du Serveur (Plan de Contrôle)

Le plan de contrôle est configuré avec la variable de dictionnaire k3s_server. Veuillez vous référer à la documentation ci-dessous pour les options de configuration :

https://rancher.com/docs/k3s/latest/en/installation/install-options/server-config/

La variable de dictionnaire k3s_server contiendra des drapeaux des options ci-dessus (en supprimant le préfixe --). Voici un exemple :

k3s_server:
  datastore-endpoint: postgres://postgres:verybadpass@database:5432/postgres?sslmode=disable
  cluster-cidr: 172.20.0.0/16
  flannel-backend: 'none'  # Cela doit être entre guillemets
  disable:
    - traefik
    - coredns

Alternativement, vous pouvez créer un fichier .yaml et le lire dans la variable k3s_server comme dans l'exemple ci-dessous :

k3s_server: "{{ lookup('file', 'path/to/k3s_server.yml') | from_yaml }}"

Consultez la documentation pour un exemple de configuration.

Configuration de l'Agent (Travailleur)

Les agents sont configurés avec la variable de dictionnaire k3s_agent. Veuillez consulter la documentation ci-dessous pour les options de configuration :

https://rancher.com/docs/k3s/latest/en/installation/install-options/agent-config

La variable de dictionnaire k3s_agent contiendra des drapeaux des options ci-dessus (en retirant le préfixe --). Voici un exemple :

k3s_agent:
  with-node-id: true
  node-label:
    - "foo=bar"
    - "hello=world"

Alternativement, vous pouvez créer un fichier .yaml et le lire dans la variable k3s_agent comme dans l'exemple ci-dessous :

k3s_agent: "{{ lookup('file', 'path/to/k3s_agent.yml') | from_yaml }}"

Consultez la documentation pour un exemple de configuration.

Variables de Configuration du Contrôleur Ansible

Les variables ci-dessous sont utilisées pour modifier la manière dont le rôle s'exécute dans Ansible, en particulier concernant l'élévation de privilèges.

Variable Description Valeur par Défaut
k3s_skip_validation Ignorer toutes les tâches qui valident la configuration. false
k3s_skip_env_checks Ignorer toutes les tâches qui vérifient la configuration de l'environnement. false
k3s_skip_post_checks Ignorer toutes les tâches qui vérifient l'état après l'exécution. false
k3s_become Élève les privilèges d'utilisateur pour les tâches nécessitant des permissions root. false

Important à propos de Python

Depuis la version 3 de ce rôle, Python 3 est requis sur le système cible ainsi que sur le contrôleur Ansible. Cela garantit un comportement cohérent pour les tâches Ansible, car Python 2 n'est plus maintenu.

Si les systèmes cibles ont à la fois Python 2 et Python 3 installés, il est probable que Python 2 soit sélectionné par défaut. Pour vous assurer que Python 3 est utilisé sur un système cible avec les deux versions de Python, assurez-vous que ansible_python_interpreter est défini dans votre inventaire. Voici un exemple d'inventaire :

---

k3s_cluster:
  hosts:
    kube-0:
      ansible_user: ansible
      ansible_host: 10.10.9.2
      ansible_python_interpreter: /usr/bin/python3
    kube-1:
      ansible_user: ansible
      ansible_host: 10.10.9.3
      ansible_python_interpreter: /usr/bin/python3
    kube-2:
      ansible_user: ansible
      ansible_host: 10.10.9.4
      ansible_python_interpreter: /usr/bin/python3

Important à propos de k3s_release_version

Si vous ne définissez pas de k3s_release_version, la dernière version stable de k3s sera installée. Si vous développez contre une version spécifique de k3s, vous devez vous assurer que cela est défini dans votre configuration Ansible, par exemple :

k3s_release_version: v1.19.3+k3s1

Il est également possible d'installer des "canaux" spécifiques de K3s, voici quelques exemples pour k3s_release_version :

k3s_release_version: false             # par défaut 'stable'
k3s_release_version: stable            # dernière version 'stable'
k3s_release_version: testing           # dernière version 'testing'
k3s_release_version: v1.19             # dernière version 'v1.19'
k3s_release_version: v1.19.3+k3s3      # version spécifique

# Commit spécifique
# ATTENTION - à utiliser uniquement pour les tests - doit comporter 40 caractères
k3s_release_version: 48ed47c4a3e420fa71c18b2ec97f13dc0659778b

Si vous utilisez le system-upgrade-controller, vous devrez utiliser des liens durs plutôt que des liens symboliques, car le contrôleur ne pourra pas suivre les liens symboliques. Cette option a été ajoutée mais n'est pas activée par défaut pour éviter de casser les installations existantes.

Pour activer l'utilisation de liens durs, assurez-vous que k3s_install_hard_links est défini sur true.

k3s_install_hard_links: true

Le résultat de cela peut être vu en exécutant ce qui suit dans k3s_install_dir :

ls -larthi | grep -E 'k3s|ctr|ctl' | grep -vE ".sh$" | sort

Liens symboliques :

[root@node1 bin]# ls -larthi | grep -E 'k3s|ctr|ctl' | grep -vE ".sh$" | sort
3277823 -rwxr-xr-x 1 root root  52M Jul 25 12:50 k3s-v1.18.4+k3s1
3279565 lrwxrwxrwx 1 root root   31 Jul 25 12:52 k3s -> /usr/local/bin/k3s-v1.18.6+k3s1
3279644 -rwxr-xr-x 1 root root  51M Jul 25 12:52 k3s-v1.18.6+k3s1
3280079 lrwxrwxrwx 1 root root   31 Jul 25 12:52 ctr -> /usr/local/bin/k3s-v1.18.6+k3s1
3280080 lrwxrwxrwx 1 root root   31 Jul 25 12:52 crictl -> /usr/local/bin/k3s-v1.18.6+k3s1
3280081 lrwxrwxrwx 1 root root   31 Jul 25 12:52 kubectl -> /usr/local/bin/k3s-v1.18.6+k3s1

Liens durs :

[root@node1 bin]# ls -larthi | grep -E 'k3s|ctr|ctl' | grep -vE ".sh$" | sort
3277823 -rwxr-xr-x 1 root root  52M Jul 25 12:50 k3s-v1.18.4+k3s1
3279644 -rwxr-xr-x 5 root root  51M Jul 25 12:52 crictl
3279644 -rwxr-xr-x 5 root root  51M Jul 25 12:52 ctr
3279644 -rwxr-xr-x 5 root root  51M Jul 25 12:52 k3s
3279644 -rwxr-xr-x 5 root root  51M Jul 25 12:52 k3s-v1.18.6+k3s1
3279644 -rwxr-xr-x 5 root root  51M Jul 25 12:52 kubectl

Important à propos de k3s_build_cluster

Si vous définissez k3s_build_cluster sur false, ce rôle installera chaque hôte de jeu comme un nœud autonome. Un exemple d'une telle situation serait lors de la création d'un grand nombre de dispositifs IoT autonomes exécutant K3s. Voici un exemple hypothétique où nous devons déployer 25 appareils Raspberry Pi, chacun agissant comme un système autonome et non en tant que cluster de 25 nœuds. Pour cela, nous utiliserions un playbook similaire à celui-ci :

- hosts: k3s_nodes  # par ex. 25 RPi définis dans notre inventaire.
  vars:
    k3s_build_cluster: false
  roles:
     - xanmanning.k3s

Important à propos de k3s_control_node et haute disponibilité (HA)

Par défaut, seul un hôte sera défini comme nœud de contrôle par Ansible. Si vous ne définissez pas un hôte comme nœud de contrôle, ce rôle déléguera automatiquement le premier hôte de jeu comme nœud de contrôle. Ceci n'est pas adapté à un environnement de production.

Si plusieurs hôtes ont k3s_control_node défini sur true, vous devez également définir datastore-endpoint dans k3s_server comme chaîne de connexion à une base de données MySQL ou PostgreSQL, ou un cluster Etcd externe, sinon le play échouera.

Si vous utilisez TLS, le CA, le certificat et la clé doivent déjà être disponibles sur les hôtes de jeu.

Voir : Haute disponibilité avec une base de données externe

Il est également possible, bien que non pris en charge, d'exécuter un seul nœud de contrôle K3s avec un datastore-endpoint défini. Comme cela n'est pas une configuration habituellement prise en charge, vous devrez définir k3s_use_unsupported_config sur true.

Depuis K3s v1.19.1, il est possible d'utiliser un Etcd intégré comme base de données de backend, ce qui se fait en définissant k3s_etcd_datastore sur true. La meilleure pratique pour Etcd est de définir au moins 3 membres pour garantir qu'un quorum soit établi. De plus, un nombre impair est recommandé pour assurer une majorité en cas de partitionnement du réseau. Si vous souhaitez utiliser 2 membres ou un nombre pair de membres, veuillez définir k3s_use_unsupported_config sur true.

Important à propos de k3s_server_manifests_urls et k3s_server_pod_manifests_urls

Pour déployer des manifestes de serveur et des manifestes de pods de serveur à partir d'URL, vous devez spécifier un url et éventuellement un filename (si aucun n'est fourni, le nom de base est utilisé). Voici un exemple de déploiement de l'opérateur Tigera pour Calico et kube-vip.

---

k3s_server_manifests_urls:
  - url: https://docs.projectcalico.org/archive/v3.19/manifests/tigera-operator.yaml
    filename: tigera-operator.yaml

k3s_server_pod_manifests_urls:
  - url: https://raw.githubusercontent.com/kube-vip/kube-vip/main/example/deploy/0.1.4.yaml
    filename: kube-vip.yaml

Important à propos de k3s_airgap

Lors du déploiement de k3s dans un environnement isolé, vous devez fournir le binaire k3s dans ./files/. Le binaire ne sera pas téléchargé depuis GitHub et ne sera donc pas vérifié à l'aide de la somme sha256 fournie, ni capable de vérifier la version que vous exécutez. Tous les risques et responsabilités qui en découlent sont sous la responsabilité de l'utilisateur dans ce scénario.

Dépendances

Pas de dépendances sur d'autres rôles.

Exemples de Playbooks

Exemple de playbook, un seul nœud de contrôle exécutant la version de test de k3s :

- hosts: k3s_nodes
  vars:
    k3s_release_version: testing
  roles:
     - role: xanmanning.k3s

Exemple de playbook, haute disponibilité avec base de données PostgreSQL exécutant la dernière version stable :

- hosts: k3s_nodes
  vars:
    k3s_registration_address: loadbalancer  # Typiquement un équilibreur de charge.
    k3s_server:
      datastore-endpoint: "postgres://postgres:verybadpass@database:5432/postgres?sslmode=disable"
  pre_tasks:
    - name: Définir chaque nœud comme nœud de contrôle
      ansible.builtin.set_fact:
        k3s_control_node: true
      when: inventory_hostname in ['node2', 'node3']
  roles:
    - role: xanmanning.k3s

Licence

BSD 3-clauses

Contributeurs

Les contributions de la communauté sont les bienvenues, mais veuillez lire les directives de contribution avant de le faire, cela aidera à rendre les choses aussi simples que possible.

De plus, veuillez consulter la superbe liste des contributeurs.

Informations sur l'Auteur

Xan Manning

À propos du projet

Ansible role for installing k3s as either a standalone server or HA cluster

Installer
ansible-galaxy install xanmanning.k3s
Licence
bsd-3-clause
Téléchargements
1.1M
Propriétaire
Deep in the lab...