geerlingguy.kubernetes
Rol de Ansible: Kubernetes
Una Rol de Ansible que instala Kubernetes en Linux.
Requisitos
Requiere un Contenedor Runtime compatible; se recomienda el rol para instalación de CRI: geerlingguy.containerd
.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con sus valores predeterminados (ver defaults/main.yml
):
kubernetes_packages:
- name: kubelet
state: present
- name: kubectl
state: present
- name: kubeadm
state: present
- name: kubernetes-cni
state: present
Paquetes de Kubernetes que se instalarán en el servidor. Puedes proporcionar una lista de nombres de paquetes o establecer name
y state
para tener un mayor control sobre si el paquete está present
, absent
, latest
, etc.
kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'
La versión menor de Kubernetes a instalar. La kubernetes_version
se usa para fijar una versión de paquete apt en Debian, y como la versión de Kubernetes pasada al comando kubeadm init
(ver kubernetes_version_kubeadm
). La variable kubernetes_version_rhel_package
debe ser una versión específica de Kubernetes, y se usa para fijar la versión en servidores Red Hat / CentOS.
kubernetes_role: control_plane
Si el servidor en particular se servirá como un control_plane
de Kubernetes (predeterminado) o node
. El centro de control tendrá el comando kubeadm init
ejecutado para inicializar todo el plano de control de K8s, mientras que los node
tendrán el comando kubeadm join
ejecutado para unirse al control_plane
.
Variables para configurar kubeadm y kubelet con kubeadm init
a través de un archivo de configuración (recomendado)
Con este rol, kubeadm init
se ejecutará con --config <FILE>
.
kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'
Ruta para <FILE>
. Si el directorio no existe, este rol lo creará.
Las siguientes variables se analizan como opciones para apiVersion
, kind
) del archivo de configuración será creado por este rol, así que no los definas en las variables. (Ver templates/kubeadm-kubelet-config.j2
).
kubernetes_config_init_configuration:
localAPIEndpoint:
advertiseAddress: "{{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}"
Define las opciones bajo kind: InitConfiguration
. Incluir kubernetes_apiserver_advertise_address
aquí es para compatibilidad con versiones anteriores de este rol, donde se usaba con una opción de línea de comandos.
kubernetes_config_cluster_configuration:
networking:
podSubnet: "{{ kubernetes_pod_network.cidr }}"
kubernetesVersion: "{{ kubernetes_version_kubeadm }}"
Opciones bajo kind: ClusterConfiguration
. Incluir kubernetes_pod_network.cidr
y kubernetes_version_kubeadm
aquí es para compatibilidad con versiones anteriores de este rol, donde se usaban con opciones de línea de comandos.
kubernetes_config_kubelet_configuration:
cgroupDriver: systemd
Opciones para configurar kubelet en cualquier nodo de tu clúster a través del proceso kubeadm init
. Para las opciones de sintaxis, consulta la configuración de kubelet y la integración de kubelet documentación.
NOTA: Esta es la manera recomendada de configurar el kubelet. La mayoría de las opciones de línea de comandos están en desuso.
NOTA: El cgroupDriver
recomendado depende de tu Contenedor Runtime. Cuando utilices este rol con Docker en lugar de containerd, este valor debe cambiarse a cgroupfs
.
kubernetes_config_kube_proxy_configuration: {}
Opciones para configurar la configuración del proxy de kubelet en la sección KubeProxyConfiguration
de la configuración de kubelet.
Variables para configurar kubeadm y kubelet a través de opciones de línea de comandos
kubernetes_kubelet_extra_args: ""
kubernetes_kubelet_extra_args_config_file: /etc/default/kubelet
Argumentos adicionales para pasar a kubelet
durante el inicio. Por ejemplo, para permitir que kubelet
se inicie incluso si hay intercambio habilitado en tu servidor, establece esto a: "--fail-swap-on=false"
. O para especificar la ip del nodo publicitada por kubelet
, establece esto a "--node-ip={{ ansible_host }}"
. Esta opción está en desuso. Utiliza kubernetes_config_kubelet_configuration
en su lugar.
kubernetes_kubeadm_init_extra_opts: ""
Argumentos adicionales para pasar al kubeadm init
durante la inicialización del plano de control de K8s. Por ejemplo, para especificar nombres alternativos de sujeto adicionales para el certificado del servidor API, establece esto a: "--apiserver-cert-extra-sans my-custom.host"
kubernetes_join_command_extra_opts: ""
Argumentos adicionales para pasar al comando generado kubeadm join
durante la inicialización del nodo K8s. Por ejemplo, para ignorar ciertos errores de pre-vuelo como el intercambio habilitado, establece esto a: --ignore-preflight-errors=Swap
Variables Adicionales
kubernetes_allow_pods_on_control_plane: true
Si se debe eliminar la taint que impide que los pods se desplieguen en el plano de control de Kubernetes. Si tienes un clúster de un solo nodo, esto debería ser definitivamente True
. De lo contrario, establece en False
si deseas un plano de control de Kubernetes dedicado que no ejecute otros 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'
Este rol actualmente soporta flannel
(predeterminado), calico
o weave
para la red de pods del clúster. Elige solo uno para tu clúster; convertir entre ellos no se hace automáticamente y podría resultar en redes quebradas; si necesitas cambiar de uno a otro, debe hacerse fuera de este rol.
kubernetes_apiserver_advertise_address: ''`
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'`
kubernetes_ignore_preflight_errors: 'all'
Opciones pasadas a kubeadm init
al inicializar el plano de control de Kubernetes. La kubernetes_apiserver_advertise_address
tiene como valor predeterminado ansible_default_ipv4.address
si se deja vacío.
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/ /"
Opciones del repositorio Apt para la instalación 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
Opciones del repositorio Yum para la instalación de Kubernetes. Puedes cambiar kubernete_yum_gpg_key
a una url diferente si estás detrás de un cortafuegos o proporcionar un espejo confiable. Generalmente en combinación con cambiar la kubernetes_yum_base_url
también.
kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Archivo de manifiesto de Flannel para aplicar en el clúster de Kubernetes para habilitar la red. Puedes copiar tus propios archivos a tu servidor y aplicarlos en su lugar, si necesitas personalizar la configuración de red de Flannel.
kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml
Archivo de manifiesto de Calico para aplicar en el clúster de Kubernetes (si usas Calico en lugar de Flannel).
Dependencias
Ninguna.
Ejemplos de Playbooks
Clúster de un solo nodo (solo plano de control)
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Clúster de dos o más nodos (plano de control único)
Variables de inventario del plano de control:
kubernetes_role: "control_plane"
Variables de inventario de nodo(s):
kubernetes_role: "node"
Playbook:
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Luego, inicia sesión en el plano de control de Kubernetes y ejecuta kubectl get nodes
como root, y deberías ver una lista de todos los servidores.
Licencia
MIT / BSD
Información del Autor
Este rol fue creado en 2018 por Jeff Geerling, autor de Ansible for DevOps.
Kubernetes for Linux.
ansible-galaxy install geerlingguy.kubernetes