Tidak salah untuk mengatakan bahwa itu adalah pria terbaik
menemukan kebahagiaan melalui penderitaan.
Ludwig van Beethoven

Saya Sergey, saya bekerja di Yandex.Money di tim riset kinerja. Saya ingin menceritakan kepada Anda awal cerita tentang jalur kami dalam menggunakan orkestrasi - bagaimana kami memilih instrumen dan apa yang kami perhitungkan. Semua peristiwa dalam artikel berlangsung dalam waktu nyata, sehingga Anda, para pembaca yang budiman, hampir mengikuti perkembangan situasi secara langsung.
Mengapa kita membutuhkan seorang konduktor di tim kita?
Siapa konduktornya? Dari Perancis. diriger - untuk mengelola, mengarahkan, memimpin - dalam dunia musik - ini adalah orang yang menjadi pemimpin pembelajaran dan pertunjukan musik ansambel. Dalam kasus kami, tempat ini ditempati oleh sistem orkestrasi dan otomasi.
Peran mereka tidak berbeda dengan peran konduktor dalam musik - mereka diperlukan untuk membantu tim, membimbing dan mengatur permainannya.
Biasanya, sebuah tim memiliki serangkaian kapasitas tertentu—sebut saja server—yang menjadi tempat mereka mengimplementasikan proyek mereka.
Pendekatan untuk mendapatkan dan mengoperasikan server ini bervariasi. Beberapa contoh:
- Tim membuat permintaan, misalnya, kepada grup operasi, untuk menyediakan sumber daya dengan parameter tertentu.
- Tim operasi menyediakan jumlah yang dibutuhkan - cloud atau bare metal - dan berjanji untuk menjaganya dalam kondisi yang tepat sesuai dengan SLA. Penyiapannya juga dilakukan oleh tim operasional.
- Tim hanya menerima sumber daya cloud atau bare metal dari grup operasi, dan mengonfigurasinya sendiri.
- Tim itu sendiri yang “membeli” sumber daya dan memelihara/menyiapkannya sepenuhnya secara mandiri.
Tim kami menggunakan server yang perlu didukung - memperbarui OS, menginstal paket baru, dll.
Bagi kami sendiri, kami telah membaginya menjadi dua jenis utama:
- kelompok tangki,
- kelompok layanan.
Grup tank terdiri dari host dengan Yandex.Tank.
Grup layanan mencakup segala sesuatu yang berhubungan dengan pemeliharaan - ini adalah berbagai layanan untuk memberikan dukungan untuk siklus rilis, menghasilkan laporan otomatis, dll.
Pada satu titik, semua ini menjadi tidak nyaman untuk dikelola secara manual, dan kami berpikir untuk mengotomatisasi seluruh proses, mulai dari “memuat” server dan diakhiri dengan pengembangan, rilis, dan peluncuran layanan internal kami.
Mengapa seorang konduktor dibutuhkan, meskipun orkestranya sendiri bisa bermain?
Untuk memulainya, kami menguasai Ansible dan mulai "menuangkan" server bare metal kami agar tidak terlalu bergantung pada administrator sistem - semua orang menang di sini, kami memperoleh keterampilan baru dan membebaskan administrator dari beberapa pekerjaan yang selalu mereka miliki tanpa kami. . Kami berusaha untuk berkembang melampaui spesialisasi dan otonomi tim kami sebanyak mungkin.
Di perusahaan, pekerjaan dengan Ansible telah dikonfigurasi dan diatur cukup lama, sehingga kami dengan mudah mengintegrasikan solusi kami ke dalam proses ini.
Saat ini, kumpulan host terdiri dari tiga peran yang mungkin:
- peran pertama menginstal OS,
- yang kedua menjalankan pengaturan dasar untuk host, otorisasi LDAP, misalnya,
- dan yang ketiga menginstal Yandex.Tank dan dependensi terkait di wadah buruh pelabuhan.
Mari beralih ke layanan yang kami gunakan dalam tim.
Untuk tugas kami, kami menggunakan Kotlin dan Python secara setara, dan sedikit lebih banyak Golang. Untuk menyatukan pengembangan dan penerapan layanan kami, kami memutuskan untuk mengemasnya dalam wadah Docker. Hal ini memberi Anda kebebasan untuk memilih bahasa pemrograman dan sekaligus mengatur format pengiriman yang seragam untuk aplikasi Anda.
Catatan kecil tentang ipv6 di Docker
Beberapa layanan yang berinteraksi dengan kami hanya tersedia melalui ipv6, jadi kami harus memikirkan cara membuat ipv6 untuk container.
Menurut dokumentasi ipv6 di situs resmi Docker, ipv6 diaktifkan dengan menambahkan parameter ke daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}Dalam hal ini, penyedia harus mengeluarkan subnet ipv6, tempat Anda akan mendaftar fixed-cidr-v6.
Namun, kami memilih opsi lain - ipv6 NAT, dan inilah alasannya:
- Sekarang buruh pelabuhan hanya dengan ipv6.
- Memiliki alamat yang dapat dirutekan secara global di setiap kontainer berarti semua port (bahkan yang tidak dipublikasikan) akan terekspos ke semua orang kecuali pemfilteran tambahan dilakukan.
- proxy userland untuk port penerbitan, .
ipv6 NAT adalah , yang mengelola aturan di ip6tables dan mengeditnya saat menambahkan wadah baru.
Agar solusi ini berfungsi dengan benar, perlu dilakukan sejumlah manipulasi lainnya. Pastikan untuk menginisialisasi ip6table_nat pada sistem. Kehadiran modul yang terinstal pada sistem tidak menjamin bahwa modul tersebut akan dimuat ke dalam kernel pada saat startup. Kami mengalami hal ini ketika kami menerima kesalahan ini ketika menjalankan kontainer dengan NAT pada host baru:
2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory
ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)Masalahnya terpecahkan setelah menambahkan inisialisasi ke peran Ansible menggunakan modul modprobe dan memuatnya saat startup OS menggunakan lineinfile:
- name: Add ip6table_nat module
modprobe:
name: ip6table_nat
state: present
- name: Add ip6table_nat to boot
lineinfile:
path: /etc/modules
line: 'ip6table_nat'Ngomong-ngomong, ada yang bagus di hub , yang menjelaskan secara singkat dan jelas kelebihan dan kekurangan metode tertentu untuk menjalankan ipv6 di buruh pelabuhan.
Tapi mari kita kembali ke pertanyaan yang diajukan di awal:
Mengapa seorang konduktor dibutuhkan, meskipun orkestranya sendiri bisa bermain?
Sekarang semua orang membayangkan cara bermain di tim kami:
- proses “menuangkan” server telah dibuat,
- pengembangan dan penyebaran layanan disatukan.
Sebuah pertanyaan yang masuk akal muncul: bagaimana cara menyebarkan, memperbarui, dan mengontrol layanan kami di kontainer Docker seefisien dan seotomatis mungkin?
Terlepas dari kenyataan bahwa setiap anggota orkestra mengetahui bagiannya, ia dapat menjadi bingung dan menyimpang dari ide aslinya. Di sini kami sampai pada kesimpulan bahwa tanpa seorang konduktor, orkestra kami tidak akan berlatih secara efektif dan bermain secara koheren. Konduktor bertanggung jawab atas semua parameter pertunjukan, memastikan bahwa semuanya disatukan oleh satu tempo dan suasana hati.
Bagaimana cara mendapatkan konduktor yang baik dengan investasi minimal?
Topik orkestrasi berkembang cukup baik di pasaran. Tapi pertama-tama, mari kita bicara tentang alat bantu yang dapat membantu konduktor.
- sistem yang menyediakan dua fungsi utama:
- penemuan layanan,
- penyimpanan nilai kunci terdistribusi.
Di orkestra kami, Konsul akan bertanggung jawab untuk mendaftarkan layanan dan menyimpan konfigurasinya. Ada dua opsi pendaftaran:
- Aktif adalah ketika layanan mendaftarkan dirinya menggunakan HTTP API;
- Pasif - layanan harus didaftarkan secara manual.
Vault adalah repositori yang menstandardisasi dan menyatukan penyimpanan aman dan penanganan rahasia - kata sandi, sertifikat.
Berikut manfaat yang akan kita dapatkan dengan menggunakan alat ini:
- Sebuah pusat tunggal untuk membuat dan menyimpan rahasia serta mengelola siklus hidupnya menggunakan HTTP API.
- Transit Secrets Engine - enkripsi dan dekripsi data tanpa menyimpannya. Kemampuan untuk mengirimkan data dalam bentuk terenkripsi melalui saluran komunikasi tidak aman.
- Akses kebijakan yang mudah dikonfigurasi.
- Audit akses ke rahasia.
- Kemampuan untuk membuat CA (Certificate Authority) Anda sendiri untuk mengelola sertifikat yang ditandatangani sendiri dalam infrastruktur Anda.
Mempertimbangkan semua persyaratan kami, dua opsi cocok untuk peran konduktor - Kubernetes dan Nomad.
Kubernetes
Berapa banyak artikel dan buku yang telah ditulis tentang dia (di sini , misalnya), ada laporan yang akan saya tulis secara singkat - ini adalah pemanen universal yang dapat melakukan hampir semua hal. Akibat dari hal ini adalah menyiapkan dan memelihara cluster di Kubernetes tidak selalu mudah.
Pengembara
dari HashiCorp, sebuah perusahaan yang terkenal dengan konsul dan brankas yang disebutkan di atas.
Kami menemukan Nomad lebih mudah untuk diinstal dan dikonfigurasi daripada Kubernetes. Satu file biner berfungsi dalam mode server dan klien. Pada saat yang sama, Nomad mencakup seluruh daftar tugas yang ingin kami selesaikan: manajemen cluster, penjadwal cepat, dukungan multidatacenter. Selain itu, saat menggunakan konsul dan brankas, kami mendapatkan integrasi yang lebih erat untuk mengatur layanan kami.
Apa yang sedang berlangsung:
- server yang disiapkan untuk penempatan Konsul,
- konfigurasi cluster nomad akan dimasukkan ke Konsul, dengan bantuan yang nomad harus dikerahkan secara otomatis,
- Secara paralel, kami akan memasang brankas untuk menyimpan rahasia.
Pertanyaan untuk penonton: apakah layak mempekerjakan seorang konduktor untuk tugas-tugas seperti itu atau apakah orkestra baik-baik saja tanpa dia? Beri tahu kami di komentar apa pendapat Anda tentang ini.
Berlangganan ke blog kami dan tetap terhubung - kami akan segera memberi tahu Anda apa yang terjadi pada akhirnya dan apakah kami mengonfigurasi cluster nomad sesuai keinginan kami.
Datanglah ke kenyamanan kami , tempat Anda selalu dapat meminta saran, membantu kolega, dan sekadar mengobrol tentang riset produktivitas dan banyak lagi.
Sumber: www.habr.com
