Развертывание ETCD Keeper с помощью Ansible
В прошлой статье рассмотрели ручную установку и запуск etcdkeeper в командной строке.
Автоматизируем этот процесс и развернем etcdkeeper с помощью Ansible, настроим автоматический запуск в виде службы, настроим авторизацию.
Предполагается, что уже установлен etcd сервер и настроены TLS сертификаты для работы с ним (см. прошлую статью)
На управляющем сервере (локальном компьютере) имеем следующую структуру файлов-директорий:
1 2 3 4 5 6 |
etcd-ansible/ ├── files/ ├── inventory/ │ └── hosts ansible.cfg playbook.yaml |
ansible.cfg:
Указываем путь к файлу инвентаря, повышаем привилегии.
1 2 3 4 5 6 7 |
[defaults] inventory = inventory/hosts host_key_checking = false [privilege_escalation] become = true |
inventory/hosts:
1 2 |
[etcdkeeper] etcd1 ansible_host=89.169.167.221 ansible_ssh_private_key_file="/home/dmitry/.ssh/id_ed25519" |
Список нод, на которых будут развернуты экземпляры etcdkeeper.
Предварительно должен быть настроен доступ по ssh с помощью ключей.
playbook.yaml — тут будут все задачи по развертыванию кластера.
Разберем его содержимое посекционно.
- Вводим с консоли пароль для пользователя etcd root:
123456- name: "Ask for credentials etcd root"pause:prompt: "Enter etcd root password: "echo: noregister: etcd_root_password - Создаем пользователя root:
12345678- name: Create user 'root' with TLS using curlshell: |curl --cacert /etc/etcd/ssl/ca.crt \--cert /etc/etcd/ssl/server.crt \--key /etc/etcd/ssl/server.key \-X POST https://{{ hostvars[inventory_hostname].ansible_host }}:2379/v3/auth/user/add \-d '{"name": "root", "password": "{{ etcd_root_password.user_input }}"}' - Создаем роль root:
12345678- name: Create 'root' role with TLS using curlshell: |curl --cacert /etc/etcd/ssl/ca.crt \--cert /etc/etcd/ssl/server.crt \--key /etc/etcd/ssl/server.key \-X POST https://{{ hostvars[inventory_hostname].ansible_host }}:2379/v3/auth/role/add \-d '{"name": "root"}' - Выдаем роль root пользователю root:
12345678- name: Grant 'root' role to 'root' user with TLS using curlshell: |curl --cacert /etc/etcd/ssl/ca.crt \--cert /etc/etcd/ssl/server.crt \--key /etc/etcd/ssl/server.key \-X POST https://{{ hostvars[inventory_hostname].ansible_host }}:2379/v3/auth/user/grant \-d '{"user": "root", "role": "root"}' - Включаем аутентификацию:
1234567- name: Enable authentication in etcd with TLS using curlshell: |curl --cacert /etc/etcd/ssl/ca.crt \--cert /etc/etcd/ssl/server.crt \--key /etc/etcd/ssl/server.key \-X POST https://{{ hostvars[inventory_hostname].ansible_host }}:2379/v3/auth/enable - Создаем директорию для бинарника etcdkeeper и сопутствующих файлов, скачиваем дистрибутив и распаковываем его:
123456789101112131415161718192021222324- name: "Create directory for etcdkeeper binaries"file:path: /opt/etcdkeeper/binstate: directoryowner: rootgroup: rootmode: 0700- name: "Download the tarball into the /tmp directory"get_url:url: https://github.com/evildecay/etcdkeeper/releases/download/v0.7.8/etcdkeeper-v0.7.8-linux_x86_64.tar.gzdest: /tmp/etcdkeeper.tar.gzowner: rootgroup: rootmode: 0600force: Truevalidate_certs: no- name: "Extract the contents of the tarball"unarchive:src: /tmp/etcdkeeper.tar.gzdest: /opt/etcdkeeper/bin/decrypt: Trueremote_src: True
1234567891011121314151617181920212223Example 7z archive unpack- name: "Download the zip into the /tmp directory"get_url:url: https://github.com/evildecay/etcdkeeper/releases/download/v0.7.8/etcdkeeper-v0.7.8-linux_x86_64.zipdest: /tmp/etcdkeeper.zipowner: rootgroup: rootmode: 0600force: yesvalidate_certs: no- name: "Ensure p7zip is installed"apt:name: p7zip-fullstate: present- name: Unpack the 7z archivecommand: "7z x -y /tmp/etcdkeeper.zip -o/opt/etcdkeeper/bin"args:chdir: /opt/etcdkeeper/binregister: unzip_output- name: Debug unzip outputdebug:var: unzip_output - Выставляем права на запуск, копируем файл запуска сервиса через systemd:
1234567891011121314151617181920212223- name: "Set permissions for etcdkeeper"file:path: /opt/etcdkeeper/bin/etcdkeeperstate: fileowner: rootgroup: rootmode: 0700- name: "Add /opt/etcdkeeper/bin/ to the $PATH environment variable"lineinfile:path: /etc/profileline: export PATH="$PATH:/opt/etcdkeeper/bin"state: presentcreate: Trueinsertafter: EOF- name: "Create a etcdkeeper service"copy:src: files/etcdkeeper.serviceremote_src: Falsedest: /etc/systemd/system/etcdkeeper.serviceowner: rootgroup: rootmode: 0644 - Стартуем сервис etcdkeeper:
123456789- name: "Stop the etcdkeeper service"command: systemctl stop etcdkeeper- name: "Enable the etcdkeeper service"command: systemctl enable etcdkeeper- name: "Start the etcdkeeper service"command: systemctl restart etcdkeeper
Recommended Posts
Плейбук Ansible по развертыванию haproxy
15.02.2024