geerlingguy.kubernetes
Rôle Ansible : Kubernetes
Un rôle Ansible qui installe Kubernetes sur Linux.
Exigences
Nécessite un Runtime de Conteneur compatible ; rôle recommandé pour l'installation de CRI : geerlingguy.containerd.
Variables du rôle
Les variables disponibles sont listées ci-dessous, avec des valeurs par défaut (voir defaults/main.yml) :
kubernetes_packages:
- name: kubelet
state: present
- name: kubectl
state: present
- name: kubeadm
state: present
- name: kubernetes-cni
state: present
Paquets Kubernetes à installer sur le serveur. Vous pouvez fournir une liste de noms de paquets ou définir name et state pour avoir plus de contrôle sur la présence, l'absence, la dernière version, etc.
kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'
La version mineure de Kubernetes à installer. La variable kubernetes_version est utilisée pour fixer une version de paquet apt sur Debian et pour passer la version de Kubernetes à la commande kubeadm init (voir kubernetes_version_kubeadm). La variable kubernetes_version_rhel_package doit être une version spécifique de Kubernetes et est utilisée pour fixer la version sur les serveurs Red Hat / CentOS.
kubernetes_role: control_plane
Indique si ce serveur servira de control_plane Kubernetes (par défaut) ou de node. Le plan de contrôle exécutera kubeadm init pour initialiser l'ensemble du plan de contrôle K8s, tandis que les nodes exécuteront kubeadm join pour les joindre au control_plane.
Variables pour configurer kubeadm et kubelet avec kubeadm init via un fichier de configuration (recommandé)
Avec ce rôle, kubeadm init sera exécuté avec --config <FICHIER>.
kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'
Chemin pour <FICHIER>. Si le répertoire n'existe pas, ce rôle le créera.
Les variables suivantes sont analysées comme options pour apiVersion, kind) du fichier de configuration sera créé par ce rôle, il ne faut donc pas les définir dans les variables. (Voir templates/kubeadm-kubelet-config.j2).
kubernetes_config_init_configuration:
localAPIEndpoint:
advertiseAddress: "{{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}"
Définit les options sous kind: InitConfiguration. L'inclusion de kubernetes_apiserver_advertise_address ici est pour la compatibilité avec les anciennes versions de ce rôle, où il était utilisé avec une option de ligne de commande.
kubernetes_config_cluster_configuration:
networking:
podSubnet: "{{ kubernetes_pod_network.cidr }}"
kubernetesVersion: "{{ kubernetes_version_kubeadm }}"
Options sous kind: ClusterConfiguration. L'inclusion de kubernetes_pod_network.cidr et kubernetes_version_kubeadm ici est pour la compatibilité avec les anciennes versions de ce rôle, où elles étaient utilisées avec des options de ligne de commande.
kubernetes_config_kubelet_configuration:
cgroupDriver: systemd
Options pour configurer kubelet sur n'importe quel nœud de votre cluster via le processus kubeadm init. Pour les options de syntaxe, lire la fiche de configuration kubelet et la documentation intégration kubelet.
REMARQUE : C'est la méthode recommandée pour la configuration de kubelet. La plupart des options en ligne de commande sont obsolètes.
REMARQUE : Le cgroupDriver recommandé dépend de votre Runtime de Conteneur. Lorsque ce rôle est utilisé avec Docker au lieu de containerd, cette valeur doit être changée en cgroupfs.
kubernetes_config_kube_proxy_configuration: {}
Options pour configurer la configuration du proxy kubelet dans la section KubeProxyConfiguration de la configuration kubelet.
Variables pour configurer kubeadm et kubelet via des options de ligne de commande
kubernetes_kubelet_extra_args: ""
kubernetes_kubelet_extra_args_config_file: /etc/default/kubelet
Arguments supplémentaires à passer à kubelet lors du démarrage. Par exemple, pour permettre à kubelet de démarrer même si le swap est activé sur votre serveur, définissez ceci à : "--fail-swap-on=false". Ou pour spécifier l'IP du nœud annoncée par kubelet, définissez ceci à "--node-ip={{ ansible_host }}". Cette option est obsolète. Veuillez utiliser kubernetes_config_kubelet_configuration à la place.
kubernetes_kubeadm_init_extra_opts: ""
Arguments supplémentaires à passer à kubeadm init lors de l'initialisation du plan de contrôle K8s. Par exemple, pour spécifier des noms alternatifs supplémentaires pour le certificat du serveur API, définissez ceci à : "--apiserver-cert-extra-sans my-custom.host"
kubernetes_join_command_extra_opts: ""
Arguments supplémentaires à passer à la commande kubeadm join générée lors de l'initialisation du nœud K8s. Par exemple, pour ignorer certaines erreurs de prévol comme le swap étant activé, définissez ceci à : --ignore-preflight-errors=Swap
Variables supplémentaires
kubernetes_allow_pods_on_control_plane: true
Indique s'il faut supprimer la dénomination qui empêche les pods d'être déployés sur le plan de contrôle Kubernetes. Si vous avez un cluster à nœud unique, cela doit être True. Sinon, réglez sur False si vous souhaitez un plan de contrôle Kubernetes dédié qui n'exécute pas d'autres pods.
kubernetes_pod_network:
# Flannel CNI.
cni: 'flannel'
cidr: '10.244.0.0/16'
#
# Calico CNI.
# cni: 'calico'
# cidr: '192.168.0.0/16'
#
# Weave CNI.
# cni: 'weave'
# cidr: '192.168.0.0/16'
Ce rôle prend actuellement en charge flannel (par défaut), calico ou weave pour le réseau pod du cluster. Choisissez-en un seul pour votre cluster ; la conversion entre eux n'est pas faite automatiquement et pourrait entraîner des problèmes de réseau ; si vous devez passer de l'un à l'autre, cela doit être fait en dehors de ce rôle.
kubernetes_apiserver_advertise_address: ''
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
kubernetes_ignore_preflight_errors: 'all'
Options passées à kubeadm init lors de l'initialisation du plan de contrôle Kubernetes. L'adresse par défaut kubernetes_apiserver_advertise_address est ansible_default_ipv4.address si elle est laissée vide.
kubernetes_apt_release_channel: "stable"
kubernetes_apt_keyring_file: "/etc/apt/keyrings/kubernetes-apt-keyring.asc"
kubernetes_apt_repository: "deb [signed-by={{ kubernetes_apt_keyring_file }}] https://pkgs.k8s.io/core:/{{ kubernetes_apt_release_channel }}:/v{{ kubernetes_version }}/deb/ /"
Options de dépôt Apt pour l'installation de Kubernetes.
kubernetes_yum_base_url: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version }}/rpm/"
kubernetes_yum_gpg_key: "https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_version }}/rpm/repodata/repomd.xml.key"
kubernetes_yum_gpg_check: true
kubernetes_yum_repo_gpg_check: true
Options de dépôt Yum pour l'installation de Kubernetes. Vous pouvez changer kubernetes_yum_gpg_key pour une autre URL si vous êtes derrière un pare-feu ou fournir un miroir de confiance. Habituellement en combinaison avec le changement de kubernetes_yum_base_url également.
kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Fichier manifeste Flannel à appliquer au cluster Kubernetes pour activer le réseau. Vous pouvez copier vos propres fichiers sur votre serveur et les appliquer à la place, si vous devez personnaliser la configuration du réseau Flannel.
kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml
Fichier manifeste Calico à appliquer au cluster Kubernetes (en utilisant Calico au lieu de Flannel).
Dépendances
Aucune.
Exemples de Playbooks
Cluster à un seul nœud (contrôle uniquement)
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Cluster à deux nœuds ou plus (un seul plan de contrôle)
Variables d'inventaire du plan de contrôle :
kubernetes_role: "control_plane"
Variables d'inventaire des nœuds :
kubernetes_role: "node"
Playbook :
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Ensuite, connectez-vous au plan de contrôle Kubernetes et exécutez kubectl get nodes en tant que root, et vous devriez voir une liste de tous les serveurs.
Licence
MIT / BSD
Informations sur l'auteur
Ce rôle a été créé en 2018 par Jeff Geerling, auteur d'Ansible for DevOps.
Kubernetes for Linux.
ansible-galaxy install geerlingguy.kubernetes