Руководство по настройке кластера Kubernetes (K8s) с помощью Ansible

22 feb 2024 4 min di lettura
Руководство по настройке кластера Kubernetes (K8s) с помощью Ansible
Indice dei contenuti

Введение

Kubernetes стал идеальным решением для оркестрации контейнеров, позволяющим разработчикам легко развертывать, управлять и масштабировать контейнерные приложения. Однако настройка кластера Kubernetes может оказаться сложным процессом, включающим множество шагов и настроек. Именно здесь на помощь приходит Ansible, инструмент автоматизации с открытым исходным кодом. Автоматизируя процесс развертывания, Ansible может значительно упростить создание кластера Kubernetes.

В этом руководстве мы познакомим вас с процессом создания кластера Kubernetes с помощью Ansible. Предполагается, что все узлы кластера K8 работают под управлением операционной системы Ubuntu Linux.

Предварительные условия

Прежде чем мы углубимся в процесс установки, убедитесь, что у вас есть следующие предварительные условия:

  • Ansible — Ansible должен быть установлен на управляющей машине. На управляющей машине вы будете запускать сценарии Ansible, и она может быть вашей локальной машиной или сервером.
  • Целевые узлы: это машины, на которых будет установлен Kubernetes. Вам понадобится как минимум два узла: один для главного узла и один для рабочего узла. Убедитесь, что на этих узлах работает совместимый дистрибутив Linux.
  • Доступ по SSH: Ansible обменивается данными с целевыми узлами через SSH. Доступ по SSH должен быть настроен для всех целевых узлов с управляющей машины.

Шаг 1. Установка Ansible

Для начала настройте Ansible на своей управляющей машине. Процесс включает установку Ansible, которая зависит от операционной системы. Используйте следующие команды в зависимости от вашего дистрибутива:

sudo apt-get update
sudo apt-get install ansible

Шаг 2. Настройте файл инвентаризации

После установки Ansible приступите к настройке файла инвентаризации. Создайте файл с именем host.ini в своем рабочем каталоге, в котором будут перечислены все целевые узлы вместе с их IP-адресами. Для большей ясности разбейте их на группы, например, мастеров и рабочих. Вот пример:

[masters]
 master ansible_host=192.168.1.100

 [workers]
 worker1 ansible_host=192.168.1.101
 worker2 ansible_host=192.168.1.102

Шаг 3. Настройка кластера K8s Playbook

Эта книга поможет вам настроить кластер Kubernetes с использованием систем Ubuntu. Включает задачи по отключению брандмауэра, отключению подкачки, настройке параметров сети, добавлению репозитория Docker, установке Docker и его компонентов, настройке параметров среды выполнения контейнера, добавлению репозитория Kubernetes и установке компонентов Kubernetes (kubelet, kubeadm, kubectl). В частности, kubectl устанавливается только на узлы, идентифицированные как главные. Пособие демонстрирует комплексный подход к подготовке систем для Kubernetes с упором на необходимые сервисы, конфигурации безопасности и основные компоненты Kubernetes.

Создайте файл setup-playbook.yaml и добавьте следующий контент:

- name: Initialize master and worker nodes
 hosts: all
 tasks:

 - name: disable UFW firewall for labs
 service:
 name: ufw
 state: stopped
 enabled: false

 - name: Disable SWAP
 shell: |
 swapoff -a

 - name: Disable SWAP in fstab
 lineinfile:
 path: /etc/fstab
 regexp: '^.*swap.*$'
 line: '#\0'
 backrefs: yes

 - name: ensure net.bridge.bridge-nf-call-ip6tables is set to 1
 sysctl:
 name: net.bridge.bridge-nf-call-iptables
 value: '1'
 state: present
 reload: yes

 - name: Installation of apt-utils
 apt:
 name: apt-transport-https
 state: present
 update_cache: yes

 - name: Adding Docker GPG key
 ansible.builtin.apt_key:
 url: https://download.docker.com/linux/ubuntu/gpg
 state: present

 - name: Adding Docker Repository
 apt_repository:
 repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable
 state: present

 - name: Installation of Docker
 apt:
 name: "{{ item }}"
 state: present
 loop:
 - docker-ce
 - docker-ce-cli
 - containerd.io
 - docker-compose

 - name: Setting value of SystemdCgroup
 shell: |
 containerd config default | sudo tee /etc/containerd/config.toml | grep SystemdCgroup
 sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

 - name: Starting Service of Docker
 service:
 name: docker
 state: started
 enabled: yes

 - name: Add Kubernetes apt repository
 apt_repository:
 repo: deb https://apt.kubernetes.io/kubernetes-xenial main
 state: present

 - name: Install kubelet and kubeadm
 apt:
 name: "{{ item }}"
 state: present
 loop:
 - kubeadm
 - kubelet

 - name: start kubelet
 service:
 name: kubelet
 enabled: yes
 state: started

 - name: install kubectl
 apt:
 name: kubectl
 state: present
 when: "'masters' in group_names"

Запустите playbook, выполнив:

ansible-playbook -i hosts.ini setup-playbook.yml

Шаг 4. Настройка главного узла

Этот сборник сценариев Ansible предназначен для настройки главного узла кластера Kubernetes. Инициализируйте кластер Kubernetes с определенными сетевыми конфигурациями, создайте каталог .kube и скопируйте файл конфигурации kube в домашний каталог пользователя для управления кластером. Также установите сетевой плагин Calico для управления сетью модулей, гарантируя, что модули могут взаимодействовать друг с другом через узлы. Сборник сценариев автоматизирует процесс начальной настройки, упрощая развертывание кластера Kubernetes.

Создайте файл с именем master-playbook.yml и добавьте в него следующее содержимое:

- name: Configuration of master node
 hosts: masters
 tasks:
 - name: initialize K8S cluster
 shell: kubeadm init --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.100.5 --ignore-preflight-errors=all

 - name: create.kube directoryi and copy kube config file
 shell: "{{ item }}"
 loop:
 - mkdir -p $HOME/.kube
 - cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 - chown $(id -u):$(id -g) $HOME/.kube/config

 - name: install Pod network
 become: yes
 shell: kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml >> pod_network_setup.txt
 args:
 chdir: $HOME
 creates: pod_network_setup.txt

Запустите плейбук командой:

ansible-playbook -i hosts.ini master-playbook.yml

Шаг 5. Настройте сценарий рабочего узла.

Этот сборник сценариев используется для автоматизации процесса объединения узлов Kubernetes. Он работает на всех узлах, генерируя команду соединения на главном узле и распределяя ее по рабочим узлам. Первоначально он получает команду соединения с использованием токена kubeadm и сохраняет ее. Затем с помощью этой команды установите факт для использования на рабочих узлах. Наконец, рабочие узлы используют эту команду для присоединения к кластеру Kubernetes, минуя предполетные проверки. Этот сборник сценариев упрощает процесс расширения кластера за счет автоматизации процесса слияния узлов.

Создайте файл с именем worker-playbook.yml и добавьте в него следующее содержимое:

- name: Generating token on master node and token deployment to worker node
 hosts: all
 gather_facts: false
 tasks:
 - name: get join command
 shell: kubeadm token create --print-join-command
 register: join_command_raw
 when: "'masters' in group_names"

 - name: set join command
 set_fact:
 join_command: "{{ join_command_raw.stdout_lines[0] }}"
 when: "'masters' in group_names"

 - name: join cluster
 shell: "{{ hostvars['master'].join_command }} --ignore-preflight-errors all >> node_joined.txt"
 args:
 chdir: $HOME
 creates: node_joined.txt
 when: "'workers' in group_names"

Запустите плейбук командой:

ansible-playbook -i hosts.ini worker-playbook.yml

Шаг 5. Проверьте кластер

Запустив плейбуки, вы сможете убедиться, что ваш кластер Kubernetes настроен правильно.

На главном узле запустите:

kubectl get nodes

Вы должны увидеть все узлы в списке со статусом «Готово».

Заключение

Выполнив эти шаги, вы успешно настроили кластер Kubernetes с помощью Ansible. Этот метод предлагает масштабируемый и повторяемый процесс, упрощающий управление и автоматизацию развертывания кластеров Kubernetes. По мере того, как вы лучше знакомитесь с Ansible и Kubernetes, вы можете дополнительно настраивать свои сборники сценариев в соответствии со своими конкретными требованиями, например добавлять больше рабочих узлов или настраивать расширенные функции. Удачной оркестровки!

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.