tcharl.kubernetes
Rôle Ansible : Kubernetes
Un rôle Ansible qui installe Kubernetes sur Linux.
Exigences
Nécessite un Container Runtime compatible ; le rôle recommandé pour l'installation de CRI est : geerlingguy.containerd
.
Variables du Rôle
Les variables disponibles sont listées ci-dessous, avec leurs 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
Ces packages Kubernetes doivent être installés sur le serveur. Vous pouvez fournir une liste de noms de paquets, ou définir name
et state
pour avoir un contrôle plus précis sur l'état du paquet, qu'il soit présent
, absent
, latest
, 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 verrouiller une version de paquet apt sur Debian, et comme version de Kubernetes passée dans 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 verrouiller la version sur les serveurs Red Hat / CentOS.
kubernetes_role: control_plane
Indique si le serveur spécifique servira de control_plane
Kubernetes (par défaut) ou de node
. Le control plane exécutera kubeadm init
pour initialiser l'ensemble du control plane K8s, tandis que les nodes
exécuteront kubeadm join
pour se connecter 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 <FILE>
.
kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'
Chemin pour <FILE>
. Si le répertoire n'existe pas, ce rôle le créera.
Les variables suivantes sont interprétées comme des options pour apiVersion
, kind
) du fichier de configuration sera créé par ce rôle, donc ne les définissez pas 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
. Inclure kubernetes_apiserver_advertise_address
ici est pour la compatibilité avec les versions antérieures de ce rôle, où kubernetes_apiserver_advertise_address
é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
. Inclure kubernetes_pod_network.cidr
et kubernetes_version_kubeadm
ici est pour la compatibilité avec les versions antérieures 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, consultez le fichier de configuration kubelet et la documentation sur l'intégration de kubelet.
REMARQUE : C'est la manière recommandée de configurer kubelet. La plupart des options en ligne de commande sont obsolètes.
REMARQUE : Le cgroupDriver recommandé dépend de votre Container Runtime. Lorsque vous utilisez ce rôle avec Docker au lieu de containerd, cette valeur doit être changée en cgroupfs
.
kubernetes_config_kube_proxy_configuration: {}
Options pour configurer la configuration de proxy de kubelet dans la section KubeProxyConfiguration
de la configuration de kubelet.
Variables pour configurer kubeadm et kubelet via des options en 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, réglez ceci sur : "--fail-swap-on=false"
. Ou pour spécifier l'IP du nœud annoncée par kubelet
, réglez ceci sur "--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 Subject Alternative Names supplémentaires pour le certificat du serveur API, réglez ceci sur : "--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é-vérification comme le swap étant activé, réglez ceci sur : --ignore-preflight-errors=Swap
Variables supplémentaires
kubernetes_allow_pods_on_control_plane: true
Indique s'il faut supprimer la taint qui empêche le déploiement des pods 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 ne tourne aucun autre pod.
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 des pods du cluster. Choisissez-en un seul pour votre cluster ; la conversion entre eux n'est pas faite automatiquement et peut entraîner des problèmes de réseau ; si vous devez changer d'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. La valeur kubernetes_apiserver_advertise_address
par défaut est ansible_default_ipv4.address
si elle est laissée vide.
kubernetes_apt_release_channel: main
kubernetes_apt_repository: "deb http://apt.kubernetes.io/ kubernetes-xenial {{ kubernetes_apt_release_channel }}"
kubernetes_apt_ignore_key_error: false
Options du dépôt Apt pour l'installation de Kubernetes.
kubernetes_yum_arch: x86_64
kubernetes_yum_base_url: "https://packages.cloud.google.com/yum/repos/kubernetes-el7-{{ kubernetes_yum_arch }}"
kubernetes_yum_gpg_key:
- https://packages.cloud.google.com/yum/doc/yum-key.gpg
- https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
kubernetes_yum_gpg_check: true
kubernetes_yum_repo_gpg_check: true
Options du dépôt Yum pour l'installation de Kubernetes. Vous pouvez changer kubernete_yum_gpg_key
vers une autre URL si vous êtes derrière un pare-feu ou fournir un miroir de confiance. Cela se fait généralement en combinaison avec un changement de kubernetes_yum_base_url
.
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 réseau de Flannel.
kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml
Fichier manifeste Calico à appliquer au cluster Kubernetes (si vous utilisez Calico au lieu de Flannel).
Dépendances
Aucune.
Exemples de Playbooks
Cluster à nœud unique (contrôle unique)
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Cluster à deux nœuds ou plus (plan de contrôle unique)
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 de Ansible for DevOps.
Kubernetes for Linux.
ansible-galaxy install tcharl.kubernetes