
Saya ingin berbagi cerita tentang migrasi aplikasi ke Openshift. Juga, sebagai hasilnya, saya akan membandingkan beberapa solusi dan alat paling populer untuk mengelola aplikasi Anda di dalam OpenShift. Ini adalah transkripsi presentasi saya di kubernetes SPB meetup # 3 .
Mari kita gunakan untuk Openshift
Apa yang harus kita lakukan
Pertama-tama, mari kita bicara tentang aplikasi kita. Ini adalah solusi out of box, mendukung database yang berbeda, server aplikasi dan antarmuka integrasi dengan sistem pihak ketiga. Biasanya, klien kami memasang pada server khusus, namun, kami menghadapi masalah. Kami harus menyetel aplikasi di dalam Openshift.
Prasyarat

Aplikasi ini adalah produk dengan sejarah panjang, harus bekerja di luar kotak di lingkungan yang sama sekali berbeda. Akibatnya, ada banyak halaman di panduan instalasi kami. Namun, skema tingkat atas semudah pie, Anda hanya harus:
- Terapkan skema DB.
- Siapkan konfigurasi server aplikasi.
- Instal lisensi Anda.
- Inisialisasi aplikasi.

Sayangnya, dunia ini kejam, ada beberapa prasyarat penting.
- Kami dapat membangun aplikasi hanya pada budak Jenkins khusus, karena pembatasan keamanan
- Tidak ada akses dari instalasi openshift klien ke docker registry pengembang pribadi.
- Kami tidak dapat menggunakan kembali gambar buruh pelabuhan yang ada, karena mereka dibuat hanya untuk pengembangan & pengujian kebutuhan.
- Ada playbook yang memungkinkan untuk penerapan aplikasi di VM.
Demo kontainer yang memungkinkan

Ansible Container adalah proyek sumber terbuka yang bertujuan untuk memungkinkan otomatisasi seluruh proses pembangunan, penyebaran, dan pengelolaan kontainer. Yang terbaik dari semuanya, ia menggunakan bahasa otomatisasi yang mungkin, kuat, dan tanpa agen yang sama yang sudah Anda gunakan, memastikan Anda dapat mengotomatiskan seluruh siklus hidup aplikasi.
Kami telah menulis beberapa peran yang mungkin untuk menginstal aplikasi di VM, jadi kami menggunakannya kembali dengan wadah yang memungkinkan . Wadah yang memungkinkan adalah perkakas untuk membuat wadah. Saya tidak yakin itu benar-benar toolset yang baik, namun memungkinkan:
- Buat wadah dengan cara yang sama kami menggunakan server kami.
- Berhenti chaining bersama perintah shell di Dockerfiles.
Tidak ada masalah besar dengan wadah yang mungkin karena OpenShift membuat gambar pedoman sangat mengagumkan. Namun, saya ingin memperhatikan:
- Kami memodifikasi peran yang memungkinkan kami, karena
Docker + systemd = pain
. - Tidak ada kemampuan untuk menggunakan chroot, sudo di dalam Openshift secara default, karena keamanan. Baca saja CVE-2019-5736 .
- Demi alasan keamanan, openshift menjadi default juga menghasilkan UID acak untuk setiap kontainer, dengan kata lain openshift mengabaikan opsi USER dari Dockerfile.
Poin utama adalah bahwa ansible-container membantu kami membuat demo dengan sangat cepat, karena digunakan kembali.
Demo beberapa kontainer

Wadah demo pertama dibangun melalui wadah yang memungkinkan. Cukup bagus untuk demo, namun, kami memutuskan untuk tidak menggunakannya. Kami membagi wadah monolit menjadi berbeda:
- Kami menggunakan wadah Openshift PostgreSQL asli tanpa modifikasi apa pun.
- Kami membangun wadah aplikasi stateless.

Namun, tidak jelas untuk menginisialisasi database? Kami menemukan artikel bagus tentang kehidupan POD di dalam kubernetes. Jadi, kami memutuskan untuk menggunakan init container untuk inisialisasi database.
Inisialisasi aplikasi

Seperti yang saya sebutkan sebelumnya, aplikasi harus bekerja di luar kotak di lingkungan yang sama sekali berbeda, mendukung server aplikasi / database yang berbeda dan antarmuka integrasi dengan sistem pihak ketiga.
Ada banyak cara untuk menginisialisasi aplikasi:
- Lewati konfigurasi melalui variabel lingkungan. Ini berarti menambahkan semua dokumentasi / pengetahuan kami tentang cara menginisialisasi aplikasi untuk setiap kasus penggunaan ke setiap wadah. Kedengarannya tidak bagus.
- Gunakan start hook, kira-kira sama dengan yang pertama.
- Inisialisasi selama provisi ke Openshift.
- Gunakan wadah eksternal dengan konfigurasi individual untuk setiap kasus penggunaan.
Kami memilih yang terakhir, kami membuat pengontrol replikasi tambahan untuk menginisialisasi aplikasi? Benarkah?

Kami membaca dokumentasi lagi.
Pod (seperti dalam pod paus atau polong) adalah sekelompok satu atau lebih kontainer (seperti wadah Docker), dengan penyimpanan / jaringan bersama, dan spesifikasi untuk cara menjalankan kontainer.
POD adalah sekelompok wadah. Akibatnya, kami memutuskan untuk menjalankan 3 kontainer dalam POD aplikasi
- Wadah init untuk inisialisasi PostgreSQL.
- Wadah aplikasi.
- Wadah inisialisasi aplikasi.
Pendekatan ini memungkinkan untuk menyimpan konfigurasi kita sebagai kode, ada dua hasil yang menarik: konfigurasi aplikasi dapat diuji dan direproduksi.
Ada banyak yang sudah ada untuk mengelola openshift.
Selama migrasi, saya sudah menguji beberapa dari mereka. Saya ingin membagikan hasil saya.
Templat openshift

Templat openshift
Pro:
- Asli Ini memiliki dokumentasi yang luar biasa.
Cons:
- Namun template YAML lainnya.
- Log file YAML yang mengerikan.
- Anda peduli dengan ketergantungan layanan.
Script dan template

Pro:
Cons:

Penyedia k8s Terraform
Pro:
- Jangan pedulikan membuat pesanan.
- Gunakan kembali kode sebagai modul.
- Anda dapat menambahkan logika inisialisasi.
Cons:
- Tidak ada dukungan openshift, hanya k8s.
- Terkadang ketinggalan jaman.
- Namun alat lain.
Wadah-mungkin

Wadah-mungkin
Pro:
- Buat CM, tanpa bash
- Gunakan kembali peran yang ada. peran = gambar.
- Satu perangkat untuk segalanya.
Cons:
- Gambar besar, karena satu lapisan.
- Terlihat ditinggalkan & kedaluwarsa.
Wadah yang mungkin digantikan oleh penyok yang mungkin .
Modul k8 yang mungkin

Modul + k8s yang mungkin
Pro:
- Buku pedoman tunggal untuk semua.
- Gunakan kembali kode sebagai peran.
- Anda dapat menambahkan logika inisialisasi.
Cons:
- Tidak ada dukungan proxy.
- Anda peduli untuk menghapus. Jika Anda ingin menghapus sesuatu, maka Anda harus mendeklarasikannya.
- Anda peduli tentang membuat pesanan. Anda harus menggunakan aplikasi sebelum inisialisasi.
Bundel playbook yang memungkinkan

Bundel Playbook Ansible (APB) adalah definisi aplikasi yang ringan (meta-container). Mereka digunakan untuk mendefinisikan dan menggunakan grup aplikasi yang kompleks, konfigurasi penyebaran, penyebaran, dan layanan ke cluster OpenShift Origin yang menjalankan Broker Layanan yang Diaktifkan. APB menawarkan lebih banyak daya dan konfigurasi sederhana dengan memanfaatkan kekuatan Ansible. APB memiliki fitur berikut:

Ide utamanya adalah Anda mengemas semua barang yang dibutuhkan ke dalam wadah dan menjalankannya di dalam OpenShift. Bundel playbook yang memungkinkan
Pro:
- Bundel segalanya.
- Dapat diuji dan direproduksi.
- Integrasi katalog layanan.
Cons:
- Anda memerlukan izin admin.
- Dokumentasi terkadang ketinggalan jaman.
Hasil

Di satu sisi saya tidak ingin menjadi otoritas terakhir, tetapi di sisi lain, saya ingin berbagi pandangan saya. Tidak ada peluru perak.
PS