tcharl.kubernetes

Rola Ansible: Kubernetes

CI

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 . Aby zrozumieć ich składnię, zobacz kubelet-integration oraz kubeadm-config-file. Szkielet (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.

Zainstaluj
ansible-galaxy install tcharl.kubernetes
Licencja
mit
Pobrania
407
Właściciel
Osgiliath frameworks and all stuff from the Osgiliath corp!