Кластер Kubernetes с помощью Kubespray

Kubernetes logo
Kubernetes logo

Kubespray — это набор ansible скриптов для установки Kubernetes. С его помощью можно легко и быстро развернуть свой отказоустойчивый кластер.

Далее будет описан базовый вариант развёртывания.

Статья предполагает что вы на базовом уровне умеете пользоваться ansible и администрировать Linux.

Для начала готовим виртуальные машины для нашего кластера.

Нам потребуется 5 виртуальных машин 3 из которых будут мастер нодами и 2 воркер ноды.

Для мастер нод я использую конфигурацию

  • 2 VCPU
  • 4 Gb RAM
  • 50Gb SSD
  • Ubuntu 22.04

Для воркеров:

  • 4 VCPU
  • 8 Gb RAM
  • 70 Gb SSD
  • Ubuntu 22.04

После того как вы создали виртуальные машины, добавляем информацию об их ip адресах в /etc/hosts каждой машины. Можно выполнить руками, а можно с помощью простенького ansible playbook, не забудьте сменить ip адреса на свои:

---
- hosts: all
  become: true
  tasks:
    - name: Update /etc/hosts
      blockinfile:
        path: /etc/hosts
        create: yes
        block: |
          10.72.73.2 master01
          10.72.73.3 master02
          10.72.73.4 master03
          10.72.73.5 worker01
          10.72.73.6 worker02
add-etc-hosts.yml

Создаем простенькую ansible inventory, просто перечислив список хостов в одной группе и применяем плейбук к ней.

ansible-playbook -i inv.yam add-etc-hosts.yml

Можно проверить на любой из машин, теперь в /etc/hosts должны появится записи об остальных серверах.

Так же на все машины должен быть раскинут ваш публичный ssh — ключ, между машинами не должно быть файрволлов или иных ограничений.

Клонируем репозиторий kuberspray

git clone https://github.com/kubernetes-incubator/kubespray.git

Переходим внутрь склонированного репозитория и начинаем подготовку. Для начала готовим inventory

Копируем пример и меняем имя:

cp -rfp inventory/sample/ inventory/cluster

Редактируем inventory/cluster/inventory.ini привдим к виду:

# ## Configure 'ip' variable to bind kubernetes services on a
# ## different ip than the default iface
# ## We should set etcd_member_name for etcd cluster. The node that is not a etcd member do not need to set the value, or can set the empty string value.
[all]
master01 ansible_host=10.72.73.2 ip=10.72.73.2
master02 ansible_host=10.72.73.3 ip=10.72.73.3
master03 ansible_host=10.72.73.4 ip=10.72.73.4
worker01 ansible_host=10.72.73.5 ip=10.72.73.5
worker02 ansible_host=10.72.73.6 ip=10.72.73.6

# ## configure a bastion host if your nodes are not directly reachable
# [bastion]
# bastion ansible_host=x.x.x.x ansible_user=some_user

[kube_control_plane]
master01
master02
master03

[etcd]
master01
master02
master03

[kube_node]
worker01
worker02

[calico_rr]

[k8s_cluster:children]
kube_control_plane
kube_node
calico_rr
inventory/cluster/inventory.ini

Возвращаемся в корень проекта и устанавливаем зависимости python

pip3 install --user -r requirements.txt
/kubespray/requirements.txt

И выполняем деплой кластера:

ansible-playbook -i inventory/cluster/inventory.ini cluster.yml -b -v

В результате должна вернутся примерно такая табличка:

Ну и можно для верности зайти на любого из мастеров и посмотреть запущенные поды:

kubectl get pods --all-namespaces

Вам покажут примерно такую картину:

На этом установка закончена.

Полезные материалы по теме:

Оставьте первый комментарий

Отправить ответ

Ваш e-mail не будет опубликован.


*