geerlingguy.kubernetes

Rol de Ansible: Kubernetes

CI

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 . 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 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.

Instalar
ansible-galaxy install geerlingguy.kubernetes
Licencia
mit
Descargas
252.3k
Propietario
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns