Mengubah pengaturan global pada server perintah lokal di infrastruktur menggunakan Gitlab CI dan Ansible [Concept]



Artikel ini menjelaskan kemampuan / ide / konsep mengubah pengaturan global pada server perintah lokal dalam infrastruktur besar menggunakan Gitlab CI dan Ansible.


Katakanlah Anda memiliki 20 tim pengembangan dan 1 tim admin / DevOps. Bagaimana cara mengubah kata sandi admin di semua server? Bagaimana cara menambahkan sertifikat root Perusahaan ke semua server? Dll


Masalah apa yang dipecahkan?


Situasi khas:
Ada administrator / DevOps global.
Ada pengaturan global (NTP, DNS, Proxy, dll.)
Ada tim pengembangan lokal: TeamA, TeamB, TeamC, TeamD, dll.
Ada pengembang yang hanya bisa pergi ke server tim mereka.
Bagaimana cara menambah / memperbarui administrator global, pengaturan global?



Tugas ini diperumit oleh kenyataan bahwa pengaturan global disimpan secara terpisah dari pengaturan perintah lokal di repositori pribadi.


Jika Anda memiliki beberapa server di seluruh perusahaan, maka Anda dapat memulai Ansible dalam mode sederhana - mulai memperbarui administrator global dan pengaturan global pada semua server sekaligus.


Untuk instalasi besar, perusahaan biasanya menggunakan Wayang, Chef.


Konsep


Untuk mengubah pengaturan global pada server perintah lokal dalam infrastruktur besar, saya mengusulkan mekanisme submitule git.


Repositori dengan pengaturan lokal menggunakan submit git dengan pengaturan global.


Di bawah ini adalah diagram skematis menghubungkan repositori pribadi dengan pengaturan global ke repositori perintah lokal.



Anda dapat menggunakan konsep memperbarui pengaturan global menggunakan git submodule dalam infrastruktur dengan Puppet, Chef, Salt, tetapi artikel tersebut memberikan contoh dengan Ansible.


Misalnya, instal tomcat, mysql, nginx dan terapkan pengaturan global pada mereka dalam tim yang disebut tim.


Ada grup umum di gitlab yang berisi pengaturan umum.


Dalam grup umum ada proyek basis-bootstrap yang berisi administrator, pengaturan sysctl, dll.


Biasanya di perusahaan ada beberapa departemen pengembangan - lebih sering mereka dipanggil tim.


Di gitlab, buat grup tim (Anda akan memiliki nama tim sendiri).


Dalam kelompok tim kami membuat proyek: aplikasi, database, loadbalancer.


Tangkapan layar dari base-bootstrap, aplikasi, database, loadbalancer:



Repositori basis-bootstrap disertakan sebagai submodule git dalam aplikasi, basis data, repositori loadbalancer.


Setiap kali aplikasi, database, loadbalancer dalam repositori mulai memperbarui submodule base-bootstrap.


Setelah itu, anbook-playbook dari base-bootstrap dan anbook-playbook dari base-bootstrap diterapkan ke aplikasi, database, server loadbalancer.



Yaitu, jika Anda menambahkan administrator baru ke basis-bootstrap atau mengubah pengaturan sistem dalam basis-bootstrap, maka dengan aplikasi, database, loadbalancer, pengaturan baru dari basis-bootstrap diterapkan ke aplikasi, database, loadbalancer.


Persiapan


Anda harus membaca artikel tentang Kemungkinan untuk pemula:


# Tidak dapat memulai


# Panduan yang Mungkin


Anda harus memasang gitlab dan gitlab-runner dengan docker terpasang.


Eksekutor buruh pelabuhan digunakan sebagai contoh di sini - Anda dapat menggunakan pelaksana Shell.


Cara menggunakan gitlab dan gitlab-runner:


# Artikel Southbridge Gitlab-CI


# Integrasi dan penyebaran berkelanjutan Docker di GitLab CI


Anda harus memiliki 3 server (misalnya, di ubuntu): aplikasi, database, loadbalancer.


Aplikasi, database, loadbalancer adalah nama umum.


Semua contoh dapat diperluas, ditingkatkan, digunakan oleh perangkat lunak lain - artikel menunjukkan prinsip umum.


Bagaimana cara mengimplementasikannya


Repositori dan semua kode untuk pengujian dapat diambil dari sini: https://github.com/patsevanton/ansible-gitlab-habr


Jika Anda pergi ke server menggunakan nama pengguna / kata sandi, maka dalam grup yang diinginkan (dalam tim kasus ini) buat variabel kata sandi pengguna (ketika Anda mengubah Anda juga perlu mengubah variabel dalam kode juga) dan tentukan kata sandi di sana (kata sandi kata sandi digunakan dalam kode)


Jangan lupa untuk membuat pengguna yang diperlukan dengan hak sudo di server akhir (kode pengguna digunakan dalam kode).


Bagi mereka yang pergi ke server menggunakan kunci SSH, Anda perlu membuat variabel SSH_PRIVATE_KEY dalam grup tim dan menambahkan kunci pribadi pengguna ke dalamnya yang akan terhubung ke server.


Ini adalah contoh sederhana menghubungkan ke server, sehingga masalah keamanan tidak dibahas dalam artikel ini.


Di setiap repositori (aplikasi, database, loadbalancer), buat submit git:


git submodule add git@gitlab.example.com:common/base-bootstrap.git git submodule add git@gitlab.example.com:team/team-users.git 

Submodule diperlukan untuk mengakses repositori pribadi bersama.


Dalam kasus kami, ini adalah repositori dengan pengaturan umum base-bootstrap dan repositori pengguna dari tim-pengguna tim.


Di mana gitlab.example.com adalah server gitlab Anda.


Kemudian dalam .gitmodules kita mengubah path ke repositori menjadi relatif


Contoh:


 [submodule "team-users"] path = team-users url = ../team-users.git [submodule "base-bootstrap"] path = base-bootstrap url = ../../common/base-bootstrap.git 

Di setiap repositori di host, kami mengubah IP kami sendiri, di ansible.cfg kami mengubah remote_user ke pengguna kami.


Jika Anda belum melakukan komitmen dalam beberapa jam / hari terakhir, dan Anda perlu meluncurkan perubahan umum baru ke server (misalnya, Anda perlu menambahkan admin baru) - untuk situasi seperti itu ada kemungkinan-tarik.


Siapkan tarikan yang mungkin untuk mengunduh repositori common / base-bootstrap.


Untuk melakukan ini, tambahkan repositori token deploy.


Pergi ke repositori umum / basis-bootstrap kemudian pergi ke pengaturan / repositori / Deploy Token.


Buat token. Nama pengguna dan kata sandi yang dihasilkan dicatat dalam basis-bootstrap / vars / cron.yml.


Setelah memeriksa bahwa semuanya bekerja dengan benar - saya pikir ada baiknya mengubah waktu mulai dari tarik yang memungkinkan dari "setiap 2 menit" menjadi yang cocok untuk Anda.


Jika tarikan yang mungkin telah jatuh, itu berarti bahwa CI dari layanan ini akan turun, yang dimulai setiap kali Anda berkomitmen untuk repositori layanan ini (katakanlah layanan ini disebut aplikasi)


Periksa


Buat administrator baru.


Coba tambahkan admin baru di https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/users.yml


Perubahan sysctl


Coba tambahkan / ubah pengaturan sysctl di https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/sysctl.yml


Menambahkan entri ke cron


Coba tambahkan entri cron ke https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/cron.yml


Memperluas atau menginstal aplikasi Anda


Pertama, Anda perlu menemukan peran untuk menginstal aplikasi Anda.


Buka https://galaxy.ansible.com/ dan temukan peran untuk menginstal aplikasi Anda.


Coba instal aplikasi Anda menggunakan peran dari konsol di server Anda. Biasanya, semua peran memiliki instruksi dalam deskripsi.


Misalnya, coba instal java di sebelah kucing jantan. Pertama instal peran geerlingguy.java


 ansible-galaxy install geerlingguy.java 

Buat standar ansible.cfg sama dengan repositori.


Buat inventaris:


 [java] java ansible_host=IP- 

Buat buku pedoman java.yml


 - hosts: java become: yes vars_files: - vars/main.yml roles: - { role: geerlingguy.java } 

Jalankan Java.yml playbook yang mungkin


Jika semuanya berjalan dengan sukses, tambahkan ke proyek yang diinginkan (dalam aplikasi kasus ini)


Peran geerlingguy.java ditambahkan ke setelah peran robertdebock.tomcat https://github.com/patsevanton/ansible-gitlab-habr/blob/master/team/application/tomcat-app.yml#L11


Hal yang sama dengan semua aplikasi lain yang perlu Anda instal di server.


Pengujian dan keamanan Playbook


Untuk menyederhanakan artikel, masalah penyimpanan dan pengujian kata sandi tidak dibahas.


Ada artikel tentang pengujian playbook:
# Ansible: testing playbooks (bagian 1)


# Pengujian dan integrasi berkesinambungan untuk peran yang memungkinkan dengan Molekul dan Jenkins


Jawaban atas pertanyaan


1) Mentat: Dan mengapa, bagaimana pun, bukankah itu ditulis di dermaga yang memungkinkan, dengan lingkungan? Dari bacaan pertama, sepertinya upaya untuk menemukan kembali semuanya lagi. Ada cukup nyaman untuk menerapkan ini semua seperti playbook yang mungkin -i env / teamA personalAPlaybook.yml
Jawab: Skema ini memungkinkan untuk mengubah pengaturan global. Apa yang dijelaskan dalam pertanyaan adalah mengubah pengaturan lokal dari perintah.


PS Mungkin fungsi yang sama diterapkan di Ansible Tower. Tapi saya tidak bisa mengatakan apa-apa tentang ini - saya tidak bekerja dengan Ansible Tower.

Source: https://habr.com/ru/post/id432260/


All Articles