tcharl.kubernetes
Rol de Ansible: Kubernetes
Una Rol de Ansible que instala Kubernetes en Linux.
Requisitos
Se necesita un Runtime de Contenedor compatible; se recomienda el rol para la instalación de CRI: geerlingguy.containerd
.
Variables del Rol
Las variables disponibles se enumeran a continuación, junto con valores por defecto (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 van a instalar en el servidor. Puedes proporcionar una lista de nombres de paquetes o establecer name
y state
para tener más 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 variable kubernetes_version
se utiliza para fijar una versión del paquete apt en Debian, y como la versión de Kubernetes que se pasa 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 utiliza para fijar la versión en servidores Red Hat / CentOS.
kubernetes_role: control_plane
Indica si el servidor particular funcionará como control_plane
de Kubernetes (por defecto) o como node
. El plano de control tendrá kubeadm init
ejecutándose en él para inicializar todo el plano de control de K8s, mientras que los nodes
ejecutarán kubeadm join
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 interpretan como opciones para apiVersion
, kind
) del archivo de configuración será creado por este rol, así que no los definas dentro de 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 utilizaba 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.
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 opciones de sintaxis, consulta el archivo de configuración de kubelet y la documentación sobre integración de kubelet.
NOTA: Esta es la forma recomendada de configurar kubelet. La mayoría de las opciones de línea de comandos están obsoletas.
NOTA: El cgroupDriver
recomendado depende de tu Runtime de Contenedor. Cuando se utiliza 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
inicie incluso si hay swap habilitado en tu servidor, establece esto en: "--fail-swap-on=false"
. O para especificar la dirección IP del nodo que se anuncia por kubelet
, establece esto en "--node-ip={{ ansible_host }}"
. Esta opción está obsoleta. Utiliza kubernetes_config_kubelet_configuration
en su lugar.
kubernetes_kubeadm_init_extra_opts: ""
Argumentos adicionales para pasar a 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 en: "--apiserver-cert-extra-sans my-custom.host"
kubernetes_join_command_extra_opts: ""
Argumentos adicionales para pasar al comando kubeadm join
generado durante la inicialización del nodo K8s. Por ejemplo, para ignorar ciertos errores de preflight como el swap habilitado, establece esto en: --ignore-preflight-errors=Swap
Variables adicionales
kubernetes_allow_pods_on_control_plane: true
Indica si se debe eliminar la marca que impide que se desplieguen pods en el plano de control de Kubernetes. Si tienes un clúster de un solo nodo, esto debe ser definitivamente True
. De lo contrario, establece en False
si quieres 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
(por defecto), 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 una red rota; 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 dirección predeterminada kubernetes_apiserver_advertise_address
es ansible_default_ipv4.address
si se deja vacío.
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
Opciones del repositorio apt para la instalación 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
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 firewall o proporcionar un espejo confiable. Por lo general, se cambia 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 que se aplicará al 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 que se aplicará al 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 tcharl.kubernetes