tcharl.kubernetes
Rola Ansible: Kubernetes
Rola Ansible, która instaluje Kubernetes na systemie Linux.
Wymagania
Wymaga zgodnego Container Runtime; zalecana rola do instalacji CRI: geerlingguy.containerd
.
Zmienne roli
Dostępne zmienne są wymienione poniżej wraz z wartościami domyślnymi (patrz defaults/main.yml
):
kubernetes_packages:
- name: kubelet
state: present
- name: kubectl
state: present
- name: kubeadm
state: present
- name: kubernetes-cni
state: present
Pakiety Kubernetes do zainstalowania na serwerze. Możesz podać listę nazw pakietów lub ustawić name
i state
, aby mieć większą kontrolę nad tym, czy pakiet jest present
, absent
, latest
itd.
kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'
Wersja podrzędna Kubernetes do zainstalowania. Zmienna kubernetes_version
jest używana do zablokowania wersji pakietu apt na Debianie, a także jako wersja Kubernetes przekazywana do polecenia kubeadm init
(patrz kubernetes_version_kubeadm
). Zmienna kubernetes_version_rhel_package
musi być określoną wersją Kubernetes i jest używana do blokowania wersji na serwerach Red Hat / CentOS.
kubernetes_role: control_plane
Określa, czy dany serwer będzie pełnił rolę control_plane
Kubernetes (domyślnie) czy node
. Control plane będzie miało uruchomione kubeadm init
, aby zainicjować cały kontroler K8s, podczas gdy node
będą miały uruchomione kubeadm join
, aby dołączyć je do control_plane
.
Zmienne do konfigurowania kubeadm i kubelet za pomocą kubeadm init
przez plik konfiguracyjny (zalecane)
W ramach tej roli kubeadm init
będzie uruchamiane z --config <FILE>
.
kubernetes_kubeadm_kubelet_config_file_path: '/etc/kubernetes/kubeadm-kubelet-config.yaml'
Ścieżka do <FILE>
. Jeśli katalog nie istnieje, ta rola go utworzy.
Poniższe zmienne są analizowane jako opcje dla apiVersion
, kind
) pliku konfiguracyjnego zostanie utworzony przez tę rolę, więc nie definiuj ich w zmiennych. (Zobacz templates/kubeadm-kubelet-config.j2
).
kubernetes_config_init_configuration:
localAPIEndpoint:
advertiseAddress: "{{ kubernetes_apiserver_advertise_address | default(ansible_default_ipv4.address, true) }}"
Określa opcje w sekcji kind: InitConfiguration
. Uwzględnienie kubernetes_apiserver_advertise_address
jest dla zachowania zgodności ze starszymi wersjami tej roli, w których kubernetes_apiserver_advertise_address
było używane z opcją wiersza poleceń.
kubernetes_config_cluster_configuration:
networking:
podSubnet: "{{ kubernetes_pod_network.cidr }}"
kubernetesVersion: "{{ kubernetes_version_kubeadm }}"
Opcje w sekcji kind: ClusterConfiguration
. Uwzględnienie kubernetes_pod_network.cidr
i kubernetes_version_kubeadm
jest dla zachowania zgodności ze starszymi wersjami tej roli, w których były używane z opcjami wiersza poleceń.
kubernetes_config_kubelet_configuration:
cgroupDriver: systemd
Opcje do konfiguracji kubelet na dowolnych węzłach w twoim klastrze za pomocą procesu kubeadm init
. Aby poznać opcje składni, zapoznaj się z dokumentacją kubelet config file oraz kubelet integration.
UWAGA: To jest zalecany sposób konfiguracji kubelet. Większość opcji wiersza poleceń jest przestarzała.
UWAGA: Zalecany cgroupDriver zależy od Twojego Container Runtime. Jeśli używasz tej roli z Dockerem zamiast containerd, ta wartość powinna być zmieniona na cgroupfs
.
kubernetes_config_kube_proxy_configuration: {}
Opcje do konfigurowania proxy kubeleta w sekcji KubeProxyConfiguration
konfiguracji kubeleta.
Zmienne do konfigurowania kubeadm i kubelet za pomocą opcji wiersza poleceń
kubernetes_kubelet_extra_args: ""
kubernetes_kubelet_extra_args_config_file: /etc/default/kubelet
Dodatkowe argumenty do przekazania do kubelet
podczas uruchamiania. Na przykład, aby umożliwić kubelet
uruchomienie, nawet jeśli swap jest włączony na Twoim serwerze, ustaw na: "--fail-swap-on=false"
. Aby określić node-ip ogłaszany przez kubelet
, ustaw na "--node-ip={{ ansible_host }}"
. Ta opcja jest przestarzała. Proszę używać kubernetes_config_kubelet_configuration
zamiast tego.
kubernetes_kubeadm_init_extra_opts: ""
Dodatkowe argumenty do przekazania do kubeadm init
podczas inicjalizacji kontrolera K8s. Na przykład, aby określić dodatkowe alternatywne nazwy podmiotów dla certyfikatu serwera API, ustaw na: "--apiserver-cert-extra-sans my-custom.host"
kubernetes_join_command_extra_opts: ""
Dodatkowe argumenty do przekazania do wygenerowanego polecenia kubeadm join
podczas inicjalizacji węzła K8s. Na przykład, aby zignorować pewne błędy wstępne, takie jak włączenie swapu, ustaw na: --ignore-preflight-errors=Swap
Dodatkowe zmienne
kubernetes_allow_pods_on_control_plane: true
Określa, czy usunąć znamię, które zabrania wdrażania podów na kontrolerze Kubernetes. Jeśli masz klaster jednogniazdowy, to powinno być True
. W przeciwnym razie ustaw na False
, jeśli chcesz mieć dedykowany kontroler Kubernetes, który nie uruchamia innych podów.
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'
Ta rola obecnie obsługuje flannel
(domyślnie), calico
lub weave
dla podów w klastrze. Wybierz tylko jedną dla swojego klastra; konwersja między nimi nie jest automatyczna i może prowadzić do problemów z siecią; jeśli musisz przełączyć się z jednego na drugi, powinno to być zrobione poza tą rolą.
kubernetes_apiserver_advertise_address: ''`
kubernetes_version_kubeadm: 'stable-{{ kubernetes_version }}'`
kubernetes_ignore_preflight_errors: 'all'
Opcje przekazywane do kubeadm init
podczas inicjalizacji kontrolera Kubernetes. kubernetes_apiserver_advertise_address
domyślnie ustawia się na ansible_default_ipv4.address
, jeśli jest puste.
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
Opcje repozytorium Apt dla instalacji 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
Opcje repozytorium Yum dla instalacji Kubernetes. Możesz zmienić kubernete_yum_gpg_key
na inny adres URL, jeśli jesteś za zaporą ogniową lub podać zaufane lustro. Zwykle w połączeniu z zmianą kubernetes_yum_base_url
.
kubernetes_flannel_manifest_file: https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Plik manifestu Flannel do zastosowania w klastrze Kubernetes, aby włączyć sieć. Możesz skopiować własne pliki na swój serwer i zastosować je zamiast tego, jeśli potrzebujesz dostosować konfigurację sieci Flannel.
kubernetes_calico_manifest_file: https://projectcalico.docs.tigera.io/manifests/calico.yaml
Plik manifestu Calico do zastosowania w klastrze Kubernetes (jeśli używasz Calico zamiast Flannel).
Zależności
Brak.
Przykładowe playbooki
Klaster z pojedynczym węzłem (tylko kontroler)
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Klaster z dwoma lub więcej węzłami (jeden kontroler)
Zmienne inwentarzowe dla kontrolera:
kubernetes_role: "control_plane"
Zmienne inwentarzowe dla węzłów:
kubernetes_role: "node"
Playbook:
- hosts: all
vars:
kubernetes_allow_pods_on_control_plane: true
roles:
- geerlingguy.docker
- geerlingguy.kubernetes
Następnie zaloguj się do kontrolera Kubernetes i uruchom kubectl get nodes
jako root, a powinieneś zobaczyć listę wszystkich serwerów.
Licencja
MIT / BSD
Informacje o autorze
Ta rola została stworzona w 2018 roku przez Jeffa Geerlinga, autora Ansible for DevOps.
Kubernetes for Linux.
ansible-galaxy install tcharl.kubernetes