ansible. role6 установка ceph кластера

Thank you for reading this post, don't forget to subscribe!

Дан­ная роль поз­во­лит уста­но­вить ceph кла­стер, но пред­ва­ри­тель­но необ­хо­ди­мо выпол­нить сле­ду­ю­щие действия:
На нодах где будут непо­сред­ствен­но хра­нить­ся дан­ные (масте­ра) создать lvm груп­пу и том c оди­на­ко­вы­ми име­на­ми на всех нодах:
vgcreate ceph /dev/sdb
lvcreate -L 5G -n ceph ceph
mkfs.ext4 -L ceph /dev/mapper/ceph-ceph

и задать хостнеймы
hostnamectl set-hostname ceph1
hostnamectl set-hostname ceph2
hostnamectl set-hostname ceph3

в моём слу­чае это 2 масте­ра ceph1 ceph2 и кли­ент ceph3

теперь пра­вим файл /etc/ansible/hosts
cat /etc/ansible/hosts
[ceph:children]
cephmaster
cephclient

[cephmaster]
192.168.1.170
192.168.1.171
[cephclient]
192.168.1.172

mkdir /etc/ansible/roles/ceph/tasks/
mkdir /etc/ansible/roles/ceph/templates/

В при­ве­дён­ном ниже плей­бу­ке (с него будем запус­кать весь этот ужас) ука­за­ны сле­ду­ю­щие переменные:
hosts: ceph  это имя кото­рое у нас ука­за­но в hosts
user_pass пароль поль­зо­ва­те­ля (он будет задан для систем­но­го поль­зо­ва­те­ля ceph)
userdir  дирек­то­рия с кото­рой будет запус­кать­ся уста­нов­ка в ней будут хра­нить­ся кон­фи­ги и лог уста­нов­ки, в кон­це обя­за­тель­но дол­жен сто­ять слэш /
vgname_lvname здесь зада­ём lvm груп­пу и имя тома (в моём слу­чае это ceph/ceph  зада­ём им через слеш '/'  но не через слэш ))))) )
так­же отме­тим что пред­ва­ри­тель­но дан­ные тач­ки долж­ны быть про­гна­ны ролью new-server она опи­сы­ва­лась в одной из ста­тей, там зада­вал­ся поль­зо­ва­тель ansible под кото­рым мы и будем работать
proxy - вклю­ча­ем или выклю­ча­ем исполь­зо­ва­ние прокси
http_proxy, https_proxy - адрес наше­го прок­си сервера
name_pool - имя пула
pg_num, pgp_num - коли­че­ство пг пгп  на один осд

 cat /etc/ansible/playbooks/roles_play/ceph.yml

[codesyntax lang="php"]

[/codesyntax]

репо­зи­то­рий:
cat /etc/ansible/roles/ceph/templates/ceph.repo

[codesyntax lang="php"]

[/codesyntax]

Спи­сок всей под­тя­ги­ва­е­мых плейбуков:

cat /etc/ansible/roles/ceph/tasks/main.yml

[codesyntax lang="php"]

[/codesyntax]

Плей­бук для добав­ле­ния стро­ки в кон­фиг с ука­за­ни­ем под­се­ти в рам­ках кото­рой будет рабо­тать ceph

cat /etc/ansible/roles/ceph/tasks/add-ceph-conf.yml

[codesyntax lang="php"]

[/codesyntax]

Добав­ле­ние мастер нод к мони­то­рин­гу (mon)
cat /etc/ansible/roles/ceph/tasks/add-node-to-monitoring.yml

[codesyntax lang="php"]

[/codesyntax]

Добав­ле­ние в файл /etc/hosts на всех нодах хост­ней­мы и ip что­бы рабо­тал резолв, так как при частом про­гоне дан­но­го плей­бу­ка дан­ные посто­ян­но добав­ля­лись, я зако­сты­лил и доба­вить 2 башев­ские команды(башизм в анси­б­ле это печаль­но), одна сохра­ня­ет уни­каль­ные стро­ки в отдель­ный файл /etc/hosts2,  вто­рая заме­ня­ет им /etc/hosts
cat /etc/ansible/roles/ceph/tasks/add-to-hosts.yml

[codesyntax lang="php"]

[/codesyntax]

Добав­ляю поль­зо­ва­те­ля, задаю ему пароль, груп­пу и гене­ри­рую ssh ключи
cat /etc/ansible/roles/ceph/tasks/addusers.yml

[codesyntax lang="php"]

[/codesyntax]

В дан­ном плей­бу­ке уста­нав­ли­ва­ет­ся ceph клиент,
chdir зада­ёт дирек­то­рию отку­да будет запус­кать­ся команда
become_user зада­ёт поль­зо­ва­те­ля от кото­ро­го будет запус­кать­ся команда
delegate_to зада­ёт адрес отку­да будет запу­ще­на коман­да, в нашем слу­чае это пере­мен­ная from_this_ip_will_install_ceph
with_items  зада­ёт груп­пу cephclient кото­рая ука­за­на у нас в фай­ле /etc/ansible/hosts
cat /etc/ansible/roles/ceph/tasks/ceph-client.yml

[codesyntax lang="php"]

[/codesyntax]

В дан­ном плей­бу­ке мы копи­ру­ем клю­чи и кон­фиг файлы
cat /etc/ansible/roles/ceph/tasks/copy-key-conf-file.yml

[codesyntax lang="php"]

[/codesyntax]

В дан­ном плей­бу­ке я копи­рую пуб­лич­ные клю­чи со всех нод к себе на анси­бл хост в дирек­то­рию с шаб­ло­на­ми templates, после чего копи­рую их к одной тач­ке с кото­рой про­из­во­дит­ся уста­нов­ка, она у нас зада­на в пере­мен­ной from_this_ip_will_install_ceph
Так­же я добав­ляю на основ­ную ноду с кото­рой про­из­во­дит­ся уста­нов­ка клю­чи к known_hosts, так как при пер­вом соеди­не­нии надо отве­тить yes и тут про­ис­хо­дит затык если это­го не сде­лать вруч­ную, или так как я прописал
пере­мен­ная from_this_ip_will_install_ceph  зада­ёт­ся фак­та­ми из инвен­то­ри фай­ла /etc/ansible/hosts из груп­пы cephmaster, пер­вый ip
cat /etc/ansible/roles/ceph/tasks/copy-ssh-key.yml

[codesyntax lang="php"]

[/codesyntax]

Здесь мы созда­ём кла­стер коман­да будет запус­кать толь­ко с одной ноды из пере­мен­ной from_this_ip_will_install_ceph
cat /etc/ansible/roles/ceph/tasks/create-ceph-cluster.yml

[codesyntax lang="php"]

[/codesyntax]

 

Созда­ём дирек­то­рию толь­ко на одной тач­ке, из неё мы будем про­из­во­дить уста­нов­ку кластера:
cat /etc/ansible/roles/ceph/tasks/create-home-dir.yml

[codesyntax lang="php"]

[/codesyntax]

Здесь мы уста­нав­ли­ва­ем на все узлы кластера
cat /etc/ansible/roles/ceph/tasks/install-ceph-cluster.yml

[codesyntax lang="php"]

[/codesyntax]

Здесь копи­ру­ем репо­зи­то­рий ceph из шаблона
cat /etc/ansible/roles/ceph/tasks/installcephrepo.yml

[codesyntax lang="php"]

[/codesyntax]

Здесь уста­нав­ли­ва­ем репо­зи­то­рий epel
cat /etc/ansible/roles/ceph/tasks/installepelrepo.yml

[codesyntax lang="php"]

[/codesyntax]

Тут ста­вим дефолт­ные пакеты:
cat /etc/ansible/roles/ceph/tasks/install-packpages.yml

[codesyntax lang="php"]

[/codesyntax]

Здесь ста­вим mgr на мастер ноды, запус­ка­ет­ся уста­нов­ка с одной ноды из пере­мен­ной from_this_ip_will_install_ceph
cat /etc/ansible/roles/ceph/tasks/mgr-create.yml

[codesyntax lang="php"]

[/codesyntax]

началь­ная настрой­ка сер­ве­ра мони­то­ра Ceph и уста­нов­ка мони­то­ров на дру­гие мастер ноды
cat /etc/ansible/roles/ceph/tasks/mon-initial.yml

[codesyntax lang="php"]

[/codesyntax]

Созда­ние и акти­ва­ция osd
cat /etc/ansible/roles/ceph/tasks/osd-create.yml

[codesyntax lang="php"]

[/codesyntax]

Уда­ле­ние репо­зи­то­ри­ев ceph.repo ceph-deploy.repo
cat /etc/ansible/roles/ceph/tasks/removecephrepo.yml

[codesyntax lang="php"]

[/codesyntax]

Пере­име­но­ва­ние репо­зи­то­ри­ев ceph.repo в ceph-deploy.repo
cat /etc/ansible/roles/ceph/tasks/renamerepo.yml

[codesyntax lang="php"]

[/codesyntax]

Добав­ля­ем proxy

cat /etc/ansible/roles/ceph/tasks/proxy-add.yml

[codesyntax lang="php"]

[/codesyntax]

Уда­ля­ем proxy

cat /etc/ansible/roles/ceph/tasks/proxy-delete.yml

[codesyntax lang="php"]

[/codesyntax]

созда­ём pool

cat /etc/ansible/roles/ceph/tasks/pool-create.yml

[codesyntax lang="php"]

[/codesyntax]

запус­ка­ем сер­ви­сы, пере­за­пус­ка­ем время(синхронизируем)
cat /etc/ansible/roles/ceph/tasks/start_and_install_services.yml

[codesyntax lang="php"]

[/codesyntax]

гото­во можем запускать:
ansible-playbook -u ansible /etc/ansible/playbooks/roles_play/ceph.yml

 

=================================================

Что­бы про­ве­рить рабо­ту через прок­си squid на пор­ту 3128 запус­ка­ем сле­ду­ю­щий скрипт на наших нодах, что­бы не было досту­па во внешку:

[codesyntax lang="bash"]

[/codesyntax]