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 через конфигурационный файл (рекомендуется)

С помощью этой роли, kubeadm init будет запущен с --config <FILE>.

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

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

Следующие переменные обрабатываются как параметры для <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 config file и kubelet integration.

ПРИМЕЧАНИЕ: Это рекомендуемый способ конфигурации 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 начать работу, даже если на сервере включен swap, установите это значение на: "--fail-swap-on=false". Или, чтобы указать 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. Например, чтобы игнорировать некоторые ошибки проверки перед началом, такие как включенный swap, установите это значение на: --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: "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/ /"

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

Параметры репозитория 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).

Зависимости

Нет.

Примеры playbook

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

- hosts: all

  vars:
    kubernetes_allow_pods_on_control_plane: true

  roles:
    - geerlingguy.docker
    - geerlingguy.kubernetes

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

Переменные инвентаризации управляющей плоскости:

kubernetes_role: "control_plane"

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

kubernetes_role: "node"

Playbook:

- 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 geerlingguy/ansible-role-kubernetes
Лицензия
mit
Загрузки
238406
Владелец
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns