Perkembangan
Informasi Internal dan Pengembangan Cozystack
Bagaimana cara kerjanya
Singkatnya, cozystack adalah wadah benih yang mendukung seluruh platform. Terdiri dari:
skrip installer.sh : Berisi logika bisnis minimal, melakukan migrasi, menginstal FluxCD, dan mempersiapkan Kubernetes untuk menjalankan bagan platform.
bagan platform : Bagan Helm yang melakukan bootstrap pada konfigurasi yang tersisa. Bagan ini membaca status dari kluster Kubernetes menggunakan fungsi pencarian Helm dan membuat templat untuk semua manifes yang diperlukan.
installer.sh
Skrip tersebut terus menjalankan bagan platform untuk memastikan perubahan dalam kluster diselaraskan dengan benar.Server HTTP : Melayani aset (grafik Helm dan dasbor Grafana) yang dibangun dari repositori Cozystack.
FluxCD : Mesin utama yang menerapkan semua bagan Helm yang diperlukan dari server HTTP ke Kubernetes sesuai dengan konfigurasi yang diterapkan oleh bagan platform.
Struktur Repositori
Struktur utama repositori cozystack adalah:
.
├── packages # Main directory for cozystack packages
│ ├── core # Core platform logic charts
│ ├── system # System charts used to configure the system
│ ├── apps # User-facing charts shown in the dashboard catalog
│ └── extra # Tenant-specific applications that can be deployed as tenant options
├── dashboards # Grafana dashboards
├── hack # Helper scripts for local development
└── scripts # Scripts mainly used by the cozystack container
└── migrations # Migrations between versions
Pengembangan dapat dilakukan secara lokal dengan memodifikasi dan memperbarui file di repositori ini.
Paket
inti
Paket inti digunakan untuk mem-bootstrap Cozystack dan konfigurasinya sendiri.
Terdiri dari dua paket:
pemasang
Menyediakan semua yang dibutuhkan untuk bootstrap awal cozystack: skrip installer.sh dan server HTTP dengan aset yang dibangun dari repositori ini.
platform
Membaca konfigurasi dari kluster, membuat templat manifes, dan menerapkannya kembali ke kluster.
Ia terutama membaca cozystack
ConfigMap dari cozy-system
namespace, dan templat memanifestasikan sesuai dengan opsi yang ditentukan. ConfigMap ini menentukan nama dan opsi bundel , merinci komponen sistem mana yang harus diinstal di kluster.
helm template . | kubectl apply -f -
.sistem
Paket sistem mengonfigurasi sistem untuk mengelola dan menyebarkan aplikasi pengguna. Komponen sistem yang diperlukan ditentukan dalam konfigurasi bundel. Ini juga dapat mencakup komponen tanpa operator, yang instalasinya dapat dipicu sebagai bagian dari aplikasi pengguna.
aplikasi
Aplikasi yang menghadap pengguna ini muncul di dasbor dan menyertakan manifes yang akan diterapkan ke kluster.
Mereka tidak boleh berisi logika bisnis, karena dikelola oleh operator yang diinstal dari sistem.
tambahan
Mirip dengan apps
tetapi tidak ditampilkan dalam katalog aplikasi. Mereka hanya dapat diinstal sebagai bagian dari penyewa. Mereka diizinkan untuk digunakan oleh penyewa bawah yang diinstal di namespace penyewa saat ini.
Baca selengkapnya tentang Sistem Penyewa di halaman Konsep Inti.
Dimungkinkan untuk menggunakan hanya satu jenis aplikasi dalam satu namespace penyewa.
Struktur Paket
Setiap paket adalah bagan Helm yang berisi semua gambar dan manifes yang diperlukan untuk platform. Kami mengikuti logika bagan umum untuk menyimpan bagan hulu di ./charts
direktori dan mengganti values.yaml di akar aplikasi. Struktur ini menyederhanakan pembaruan bagan hulu.
.
├── Chart.yaml # Helm chart definition and parameter description
├── Makefile # Common targets for simplifying local development
├── charts # Directory for upstream charts
├── images # Directory for Docker images
├── patches # Optional directory for upstream chart patches
├── templates # Additional manifests for the upstream Helm chart
├── templates/dashboard-resourcemap.yaml # Role used to display k8s resources in dashboard
├── values.yaml # Override values for the upstream Helm chart
└── values.schema.json # JSON schema used for input values validation and to render UI elements in dashboard
Anda dapat menggunakan readme-generator bitnami untuk menghasilkan file README.md
dan values.schema.json
.
Instal saja sebagai readme-generator
biner di sistem Anda dan jalankan pembangkitan menggunakan make generate
perintah.
Perkembangan
Konfigurasi Buildx
Untuk membangun gambar, Anda perlu memasang dan mengonfigurasi docker buildx
plugin.
Perintah berikut memungkinkan Anda membuat gambar langsung di kluster Kubernetes:
docker buildx create \
--bootstrap \
--name=buildkit \
--driver=kubernetes \
--driver-opt=namespace=tenant-kvaps,replicas=2 \
--platform=linux/amd64 \
--platform=linux/arm64 \
--use
Atau, abaikan opsi –driver* untuk menyiapkan lingkungan pembangunan di lingkungan Docker lokal.
Manajemen paket
Setiap aplikasi menyertakan Makefile untuk menyederhanakan proses pengembangan. Kami mengikuti logika ini untuk setiap paket:
make update # Update Helm chart and versions from the upstream source
make image # Build Docker images used in the package
make show # Show output of rendered templates
make diff # Diff Helm release against objects in a Kubernetes cluster
make apply # Apply Helm release to a Kubernetes cluster
Misalnya, untuk memperbarui silia:
cd packages/system/cilium # Go to application directory
make update # Download new version from upstream
make image # Build cilium image
git diff . # Show diff with changed manifests
make diff # Show diff with applied cluster manifests
make apply # Apply changed manifests to the cluster
kubectl get pod -n cozy-cilium # Check if everything works as expected
git commit -m "Update cilium" # Commit changes to the branch
Untuk membangun kontainer cozystack dengan bagan yang diperbarui:
cd packages/core/installer # Go to the cozystack package
make image-cozystack # Build cozystack image
make apply # Apply to the cluster
kubectl get pod -n cozy-system # Check if everything works as expected
kubectl get hr -A # Check HelmRelease objects
Saat membangun kembali citra, tentukan REGISTRY
variabel lingkungan untuk menunjuk ke registri Docker Anda.
Jangan ragu untuk melihat ke dalam setiap Makefile untuk lebih memahami logikanya.
Pengujian
Platform ini menyertakan e2e.sh
skrip yang melakukan tugas-tugas berikut:
- Menjalankan tiga mesin virtual QEMU
- Mengonfigurasi Talos Linux
- Menginstal Cozystack
- Menunggu semua HelmReleases diinstal
- Melakukan pemeriksaan tambahan untuk memastikan komponen berfungsi dan berjalan
Anda dapat menjalankan e2e.sh secara lokal atau langsung dalam kontainer Kubernetes.
Untuk menjalankan pengujian di kluster Kubernetes, navigasikan ke packages/core/testing
direktori dan jalankan perintah berikut:
make apply # Create testing sandbox in Kubernetes cluster
make test # Run the end-to-end tests in existing sandbox
make delete # Remove testing sandbox from Kubernetes cluster
⚠️ Untuk menjalankan pengujian e2e di kluster Kubernetes, node Anda harus memiliki sumber daya kosong yang cukup untuk membuat 3 VM dan menyimpan data untuk aplikasi yang diterapkan.
Disarankan untuk menggunakan node bare-metal dari klaster induk Cozystack.
Lingkungan Pengembangan Dinamis
Jika Anda lebih suka mengembangkan Cozystack di mesin virtual daripada memodifikasi kluster yang ada, Anda dapat memanfaatkan sandbox yang sama dari lingkungan pengujian. Makefile di dalamnya packages/core/testing
mencakup opsi tambahan:
make exec # Opens an interactive shell in the sandbox container.
make login # Downloads the kubeconfig into a temporary directory and runs a shell with the sandbox environment; mirrord must be installed.
make proxy # Enable a SOCKS5 proxy server; mirrord and gost must be installed.
Proksi Socks5 dapat dikonfigurasikan di browser untuk mengakses layanan kluster yang berjalan di sandbox. Firefox memiliki ekstensi praktis untuk mengaktifkan/menonaktifkan proksi:
Tidak ada komentar:
Posting Komentar