geerlingguy.kubernetes

Rola Ansible: Kubernetes

CI

Rola Ansible do instalacji Kubernetes na systemie Linux.

Wymagania

Wymaga kompatybilnego Container Runtime; zalecana rola do instalacji CRI: geerlingguy.containerd.

Zmienne roli

Dostępne zmienne są wymienione poniżej, wraz z wartościami domyślnymi (zobacz 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 itp.

kubernetes_version: '1.25'
kubernetes_version_rhel_package: '1.25.1'

Wersja minorowa Kubernetes, którą chcesz zainstalować. Prosta kubernetes_version jest używana do pinowania wersji pakietu apt na Debianie oraz jako wersja Kubernetes przekazywana do polecenia kubeadm init (zobacz kubernetes_version_kubeadm). Zmienna kubernetes_version_rhel_package musi być konkretną wersją Kubernetes i służy do pinowania wersji na serwerach Red Hat / CentOS.

kubernetes_role: control_plane

Określa, czy dany serwer ma pełnić rolę control_plane (domyślnie) czy node. Na kontrolnym węźle zostanie uruchomione kubeadm init, aby zainicjować cały kontrolny węzeł K8s, natomiast node będzie mieć uruchomione kubeadm join, aby dołączyć je do control_plane.

Zmienne do konfiguracji kubeadm i kubelet przez kubeadm init za pomocą pliku konfiguracyjnego (zalecane)

Ta rola uruchomi kubeadm init 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 do . Aby zrozumieć 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) }}"

Definiuje opcje pod kind: InitConfiguration. Umieszczenie kubernetes_apiserver_advertise_address tutaj jest dla zachowania zgodności ze starszymi wersjami tej roli, gdzie kubernetes_apiserver_advertise_address było używane z opcją linii poleceń.

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

Opcje pod kind: ClusterConfiguration. Umieszczenie kubernetes_pod_network.cidr i kubernetes_version_kubeadm tutaj jest dla zachowania zgodności ze starszymi wersjami tej roli, gdzie były używane z opcjami linii poleceń.

kubernetes_config_kubelet_configuration:
  cgroupDriver: systemd

Opcje do konfiguracji kubelet na dowolnych węzłach w klastrze przez proces kubeadm init. Aby uzyskać składnię opcji, przeczytaj dokumentację kubelet config file i kubelet integration.

UWAGA: To sposób rekomendowany do konfiguracji kubelet. Większość opcji linii poleceń jest przestarzała.

UWAGA: Rekomendowany cgroupDriver zależy od Twojego Container Runtime. Korzystając z tej roli z Dockerem zamiast containerd, należy zmienić tę wartość na cgroupfs.

kubernetes_config_kube_proxy_configuration: {}

Opcje do konfiguracji proxy kubeleta w sekcji KubeProxyConfiguration pliku konfiguracyjnego kubeleta.

Zmienne do konfiguracji kubeadm i kubelet przez opcje linii 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 pozwolić na uruchomienie kubelet, nawet jeśli swap jest włączony na serwerze, ustaw to na: "--fail-swap-on=false". Lub aby określić adres IP węzła promowany przez kubelet, ustaw to na "--node-ip={{ ansible_host }}". Ta opcja jest przestarzała. Proszę użyć kubernetes_config_kubelet_configuration zamiast tego.

kubernetes_kubeadm_init_extra_opts: ""

Dodatkowe argumenty do przekazania do kubeadm init podczas inicjalizacji kontrolnego węzła K8s. Na przykład, aby określić dodatkowe Subject Alternative Names dla certyfikatu serwera API, ustaw to 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łów K8s. Na przykład, aby zignorować niektóre błędy wstępne, takie jak włączony swap, ustaw to na: --ignore-preflight-errors=Swap

Dodatkowe zmienne

kubernetes_allow_pods_on_control_plane: true

Określa, czy usunąć oznaczenie, które zabrania wdrażania podów na kontrolnym węźle Kubernetes. Jeśli masz klaster z pojedynczym węzłem, to powinno być ustawione na True. W przeciwnym razie, ustaw na False, jeśli chcesz mieć dedykowany kontrolny węzeł 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 wspiera flannel (domyślnie), calico lub weave dla sieci podów klastra. Wybierz tylko jedną dla swojego klastra; konwersja między nimi nie jest wykonywana automatycznie i może prowadzić do uszkodzenia 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 przekazane do kubeadm init podczas inicjalizacji kontrolnego węzła Kubernetes. kubernetes_apiserver_advertise_address domyślnie przyjmuje wartość ansible_default_ipv4.address, jeśli pozostawisz ją pustą.

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/ /"

Opcje repozytoriów Apt dla instalacji 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

Opcje repozytoriów 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. Zazwyczaj w kombinacji ze 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 w celu włączenia sieci. Możesz skopiować własne pliki na serwer i zastosować je zamiast tego, jeśli musisz 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 kontrolny węzeł)

- 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 kontrolny węzeł)

Zmienne inwentaryzacyjne dla kontrolnego węzła:

kubernetes_role: "control_plane"

Zmienne inwentaryzacyjne 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ę na kontrolny węzeł Kubernetes i uruchom jako root kubectl get nodes, 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 geerlingguy.kubernetes
Licencja
mit
Pobrania
252.3k
Właściciel
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns