tcharl.kubernetes

Rol de Ansible: Kubernetes

CI

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 . Para entender su sintaxis, consulta kubelet-integration y kubeadm-config-file. El esqueleto (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.

Instalar
ansible-galaxy install tcharl.kubernetes
Licencia
mit
Descargas
407
Propietario
Osgiliath frameworks and all stuff from the Osgiliath corp!