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
Создаем простенькую 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
Возвращаемся в корень проекта и устанавливаем зависимости python
pip3 install --user -r requirements.txt
И выполняем деплой кластера:
ansible-playbook -i inventory/cluster/inventory.ini cluster.yml -b -v
В результате должна вернутся примерно такая табличка:
Ну и можно для верности зайти на любого из мастеров и посмотреть запущенные поды:
kubectl get pods --all-namespaces
Вам покажут примерно такую картину:
На этом установка закончена.
Полезные материалы по теме:
Отправить ответ