kubernetes
Ansible Роль: Kubernetes
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>
. Если каталог не существует, эта роль создаст его.
Следующие переменные обрабатываются как параметры для 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.
Kubernetes for Linux.
ansible-galaxy install OsgiliathEnterprise/ansible-role-kubernetes