tcharl.kubernetes

Rôle Ansible : Kubernetes

CI

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 . Pour comprendre sa syntaxe, voir kubelet-integration et kubeadm-config-file. Le squelette (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.

Installer
ansible-galaxy install tcharl.kubernetes
Licence
mit
Téléchargements
407
Propriétaire
Osgiliath frameworks and all stuff from the Osgiliath corp!