Mari kita gunakan untuk Openshift

Ini baik


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


Sebarkan


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.

Sebarkan


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


Wadah-mungkin


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


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:


  1. Kami menggunakan wadah Openshift PostgreSQL asli tanpa modifikasi apa pun.
  2. Kami membangun wadah aplikasi stateless.

Beberapa kontainer


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


Beberapa kontainer


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:


  1. 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.
  2. Gunakan start hook, kira-kira sama dengan yang pertama.
  3. Inisialisasi selama provisi ke Openshift.
  4. Gunakan wadah eksternal dengan konfigurasi individual untuk setiap kasus penggunaan.

Kami memilih yang terakhir, kami membuat pengontrol replikasi tambahan untuk menginisialisasi aplikasi? Benarkah?


Beberapa kontainer


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


  1. Wadah init untuk inisialisasi PostgreSQL.
  2. Wadah aplikasi.
  3. Wadah inisialisasi aplikasi.

Pendekatan ini memungkinkan untuk menyimpan konfigurasi kita sebagai kode, ada dua hasil yang menarik: konfigurasi aplikasi dapat diuji dan direproduksi.


Alat


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


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


Skrip khusus


Pro:


  • Scripting

Cons:


  • Kludges.

Penyedia k8s Terraform


Penyedia k8s Terraform


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


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 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 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:

Bundel playbook yang memungkinkan


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


Hasil


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



PS


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


All Articles