kubernetes

Ansible Роль: Kubernetes

CI

Ansible роль, которая устанавливает Kubernetes на Linux.

Требования

Необходим совместимый Container Runtime; рекомендуется использовать роль для установки CRI: geerlingguy.containerd.

Переменные роли

Доступные переменные перечислены ниже, с их значениями по умолчанию (см. defaults/main.yml):

kubernetes_packages:
  - name: kubelet
    state: present
  - name: kubectl
    state: present
  - name: kubeadm
    state: present
  - name: kubernetes-cni
    state: present

Пакеты Kubernetes, которые будут установлены на сервере. Вы можете указать список имен пакетов или задать name и state, чтобы иметь больше контроля над состоянием пакета (present, absent, latest и т. д.).

kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'

Минорная версия Kubernetes, которую нужно установить. Обычная kubernetes_version используется для закрепления версии пакета apt на Debian и как версия Kubernetes, передаваемая в команду kubeadm init (см. kubernetes_version_kubeadm). Переменная kubernetes_version_rhel_package должна быть конкретным релизом Kubernetes и используется для закрепления версии на серверах Red Hat / CentOS.

kubernetes_role: control_plane

Указывает, будет ли данный сервер выступать в роли control_plane (по умолчанию) или node. На контрольной плоскости будет выполнен kubeadm init для инициализации всей контрольной плоскости K8s, в то время как на node будет выполнен kubeadm join, чтобы присоединить их к control_plane.

Переменные для настройки kubeadm и kubelet через файл конфигурации (рекомендуется)

С этой ролью будет выполнен kubeadm init с --config <FILE>.

kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'

Путь к <FILE>. Если каталог не существует, эта роль создаст его.

Следующие переменные обрабатываются как параметры для . Чтобы понять синтаксис, см. kubelet-integration и kubeadm-config-file. Скелет (apiVersion, kind) конфигурационного файла будет создан этой ролью, поэтому не определяйте их в переменных. (См. templates/kubeadm-kubelet-config.j2).

kubernetes_config_init_configuration:
  localAPIEndpoint:
    advertiseAddress: "{{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}"

Определяет параметры в разделе kind: InitConfiguration. Включение kubernetes_apiserver_advertise_address здесь сделано для обратной совместимости с более старыми версиями этой роли, где kubernetes_apiserver_advertise_address использовался с параметром командной строки.

kubernetes_config_cluster_configuration:
  networking:
    podSubnet: "{{ kubernetes_pod_network.cidr }}"
  kubernetesVersion: "{{ kubernetes_version_kubeadm }}"

Параметры в разделе kind: ClusterConfiguration. Включение kubernetes_pod_network.cidr и kubernetes_version_kubeadm здесь сделано для обратной совместимости с более старыми версиями этой роли, где они использовались с параметрами командной строки.

kubernetes_config_kubelet_configuration:
  cgroupDriver: systemd

Параметры для настройки kubelet на любых узлах в вашем кластере через процесс kubeadm init. Для получения синтаксиса параметров прочтите файл конфигурации kubelet и документацию по интеграции kubelet.

ПРИМЕЧАНИЕ: Это рекомендуемый способ настройки конфигурации kubelet. Большинство параметров командной строки устарели.

ПРИМЕЧАНИЕ: Рекомендуемый cgroupDriver зависит от вашего Container Runtime. При использовании этой роли с Docker вместо containerd это значение должно быть изменено на cgroupfs.

kubernetes_config_kube_proxy_configuration: {}

Параметры для настройки конфигурации прокси kubelet в разделе KubeProxyConfiguration конфигурации kubelet.

Переменные для настройки kubeadm и kubelet с помощью параметров командной строки

kubernetes_kubelet_extra_args: ""
kubernetes_kubelet_extra_args_config_file: /etc/default/kubelet

Дополнительные параметры для передачи kubelet во время запуска. Например, чтобы разрешить kubelet запускаться даже если включен своп на вашем сервере, установите это в: "--fail-swap-on=false". Или, чтобы указать node-ip, который будет рекламироваться kubelet, установите это в "--node-ip={{ ansible_host }}". Этот параметр устарел. Пожалуйста, используйте kubernetes_config_kubelet_configuration вместо этого.

kubernetes_kubeadm_init_extra_opts: ""

Дополнительные параметры для передачи в kubeadm init во время инициализации контрольной плоскости K8s. Например, чтобы указать дополнительные альтернативные имена для сертификата API сервера, установите это в: "--apiserver-cert-extra-sans my-custom.host".

kubernetes_join_command_extra_opts: ""

Дополнительные параметры для передачи в сгенерированную команду kubeadm join во время инициализации узла K8s. Например, чтобы игнорировать определенные ошибки предварительной проверки, такие как включенный своп, установите это в: --ignore-preflight-errors=Swap.

Дополнительные переменные

kubernetes_allow_pods_on_control_plane: true

Указывает, следует ли удалять отметку, которая запрещает развертывание подов на контрольной плоскости Kubernetes. Если у вас кластер с одним узлом, это должно быть True. В противном случае установите False, если вы хотите, чтобы контрольная плоскость Kubernetes была выделенной и не запускала другие поды.

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'

Эта роль в настоящее время поддерживает flannel (по умолчанию), calico или weave для сетевой под-сети кластера. Выбирайте только один из них для вашего кластера; переход между ними не выполняется автоматически и может привести к поломке сети; если вам нужно переключиться с одного на другой, это должно быть сделано вне этой роли.

kubernetes_apiserver_advertise_address: ''
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'
kubernetes_ignore_preflight_errors: 'all'

Параметры, передаваемые в kubeadm init при инициализации контрольной плоскости Kubernetes. kubernetes_apiserver_advertise_address по умолчанию переходит к ansible_default_ipv4.address, если оставлено пустым.

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

Параметры репозитория Apt для установки 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

Параметры репозитория Yum для установки Kubernetes. Вы можете изменить kubernete_yum_gpg_key на другой URL, если вы за фаерволом, или предоставить надежное зеркало. Обычно это делается в сочетании с изменением kubernetes_yum_base_url.

kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Файл манифеста Flannel для применения к кластеру Kubernetes для включения сети. Вы можете скопировать свои файлы на сервер и применить их вместо этого, если вам необходимо настроить конфигурацию сети Flannel.

kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml

Файл манифеста Calico для применения к кластеру Kubernetes (если используется Calico вместо Flannel).

Зависимости

Нет.

Примеры плейбуков

Одноузловой кластер (только контрольная плоскость)

- hosts: all

  vars:
    kubernetes_allow_pods_on_control_plane: true

  roles:
    - geerlingguy.docker
    - geerlingguy.kubernetes

Два или более узлов (одна контрольная плоскость)

Переменные инвентаря для контрольной плоскости:

kubernetes_role: "control_plane"

Переменные инвентаря для узлов:

kubernetes_role: "node"

Плейбук:

- hosts: all

  vars:
    kubernetes_allow_pods_on_control_plane: true

  roles:
    - geerlingguy.docker
    - geerlingguy.kubernetes

Затем, войдите в контрольную плоскость Kubernetes и выполните kubectl get nodes от имени root, вы должны увидеть список всех серверов.

Лицензия

MIT / BSD

Информация об авторе

Эта роль была создана в 2018 году Джеффом Гирлингом, автором Ansible for DevOps.

Установить
ansible-galaxy install OsgiliathEnterprise/ansible-role-kubernetes
Лицензия
mit
Загрузки
385
Владелец
Osgiliath frameworks and all stuff from the Osgiliath corp!