Penyimpanan lokal memasang file atau direktori dari sistem file node host ke dalam Pod yang berjalan di kluster Kubernetes Enterprise Distributed Application Service (EDAS), memberikan kontainer akses langsung ke sistem file host untuk I/O file berkecepatan tinggi tanpa overhead jaringan. Fitur ini berguna untuk membaca log tingkat host, berbagi data sementara antar kontainer, atau mengakses file konfigurasi spesifik node.
Cara kerja penyimpanan lokal
Di kluster Container Service for Kubernetes (ACK) yang dikelola oleh EDAS, penyimpanan lokal menggunakan volume hostPath Kubernetes untuk memasang jalur sistem file host ke dalam kontainer.
EDAS mendukung dua jenis penyimpanan lokal:
| Type | Kubernetes volume | Use case | Data lifecycle |
|---|---|---|---|
| Local File of Host | hostPath | Mengakses file atau direktori tertentu pada node host, seperti log sistem atau konfigurasi tingkat node | Data tetap tersimpan di host secara independen dari siklus hidup Pod |
| emptyDir | emptyDir | Berbagi data sementara antar kontainer dalam Pod yang sama, seperti ruang scratch, cache, atau pertukaran data antar-kontainer | Dibuat saat Pod dimulai pada suatu node. Dihapus secara permanen ketika Pod dihapus dari node tersebut |
Volume hostPath memberikan akses sistem file host ke kontainer, yang menimbulkan risiko keamanan. Kontainer dengan akses tersebut dapat membaca kredensial hak istimewa (seperti kredensial kubelet) atau mengeksploitasi socket runtime kontainer untuk melakukan container escape. Jika Anda memerlukan penyimpanan persisten, gunakan PersistentVolume local sebagai gantinya. Jika Anda harus menggunakan hostPath, batasi pemasangan ke mode read-only bila memungkinkan.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Akun EDAS dengan akses ke Konsol EDAS
Kluster Kubernetes (ACK) yang terdaftar di EDAS
Namespace dan wilayah yang tersedia untuk aplikasi Anda
Tambahkan penyimpanan lokal ke aplikasi baru
Masuk ke Konsol EDAS. Di panel navigasi sebelah kiri, pilih Application Management > Applications.
Di bilah navigasi atas, pilih wilayah. Di bagian atas halaman, pilih namespace. Di pojok kiri atas, klik Create Application.
Pada langkah Basic information, atur parameter berikut lalu klik Next.
Parameter Description Cluster Type Pilih Kubernetes Clusters Application Runtime Environment Pilih runtime yang sesuai dengan aplikasi Anda. Lihat opsi runtime aplikasi Pada langkah Configurations, konfigurasikan informasi lingkungan, informasi dasar, metode penyebaran, dan parameter sumber daya. Klik Next.
Pada langkah Advanced Settings, buka Local Storage dan konfigurasikan tipe volume:
Untuk memasang jalur host, lihat parameter Local File of Host.
Untuk membuat volume bersama sementara, lihat parameter emptyDir.
Klik Create Application.
Di halaman Creation Completed, tinjau pengaturan di bagian Basic information, Configurations, dan Advanced Settings. Klik Create Application untuk mengonfirmasi.
Di halaman Application Overview, klik View Details. Di halaman Change List, pantau progres penyebaran. Setelah perubahan selesai, periksa bagian Basic information di halaman Application Overview. Keberadaan Pod yang berjalan menandakan penyebaran berhasil.
Perbarui penyimpanan lokal untuk aplikasi yang sudah ada
Aplikasi akan dimulai ulang setelah Anda menyimpan perubahan ini. Lakukan operasi ini selama jam sepi.
Masuk ke Konsol EDAS. Di panel navigasi sebelah kiri, pilih Application Management > Applications.
Di bilah navigasi atas, pilih wilayah. Di bagian atas halaman, pilih namespace. Dari daftar drop-down Cluster Type, pilih Container Service or Serverless Kubernetes Cluster.
Temukan aplikasi target dan klik namanya.
Di halaman Overview atau Basic information, pilih Deploy > Deploy di pojok kanan atas.
Di halaman Select Deployment Mode, pilih mode penyebaran lalu klik Start Deployment.
Konfigurasikan lingkungan dan paket penyebaran, lalu buka Local Storage dan atur parameter volume:
Untuk memasang jalur host, lihat parameter Local File of Host.
Untuk membuat volume bersama sementara, lihat parameter emptyDir.
Klik OK.
Parameter penyimpanan lokal
Parameter Local File of Host
Opsi Local File of Host dipetakan ke volume hostPath Kubernetes. Opsi ini memasang file atau direktori dari node host ke dalam kontainer.
Bidang type mengontrol apakah Kubernetes memvalidasi atau membuat jalur di host sebelum pemasangan:
| File type | Value | Behavior |
|---|---|---|
| Default | String kosong | Memasang jalur tanpa validasi. Tidak ada pemeriksaan yang dilakukan sebelum pemasangan |
| (Create) File Directory | DirectoryOrCreate | Jika jalur tidak ada, membuat direktori kosong dengan izin 0755. Direktori mewarisi grup dan kepemilikan kubelet |
| File Directory | Directory | Direktori harus sudah ada di jalur tersebut. Kontainer gagal dimulai jika direktori tidak ada |
| (Create) File | FileOrCreate | Jika jalur tidak ada, membuat file kosong dengan izin 0644. File mewarisi grup dan kepemilikan kubelet |
| File | File | File harus sudah ada di jalur tersebut. Kontainer gagal dimulai jika file tidak ada |
| Socket | Socket | Socket UNIX harus sudah ada di jalur tersebut. Kontainer gagal dimulai jika socket tidak ada |
| CharDevice | CharDevice | Perangkat karakter harus sudah ada di jalur tersebut (hanya untuk node Linux). Kontainer gagal dimulai jika perangkat tidak ada |
| BlockDevice | BlockDevice | Perangkat blok harus sudah ada di jalur tersebut (hanya untuk node Linux). Kontainer gagal dimulai jika perangkat tidak ada |
FileOrCreate tidak membuat direktori induk. Jika direktori induk dari file target tidak ada, Pod gagal dimulai. Untuk menghindari masalah ini, pasang terlebih dahulu direktori induk menggunakan DirectoryOrCreate, lalu pasang file tersebut.
Parameter tambahan untuk Local File of Host:
| Parameter | Description |
|---|---|
| Mount Path | Jalur di dalam kontainer tempat file atau direktori host dipasang |
| Host Path | Jalur pada node host yang akan dipasang ke dalam kontainer |
| Mount Mode | Mode akses untuk volume. Nilai yang valid: Read/Write dan Read-only. Gunakan Read-only bila memungkinkan untuk mengurangi risiko keamanan |
| subPathExpr | Ekspresi referensi bidang yang digunakan untuk membuat nama subdirektori di dalam volume. Berguna untuk memberikan setiap kontainer atau instans Pod direktorinya sendiri |
Parameter emptyDir
Volume emptyDir dibuat saat Pod ditugaskan ke suatu node. Semua kontainer dalam Pod dapat membaca dan menulis ke volume emptyDir yang sama, sehingga cocok untuk ruang scratch, cache, atau pertukaran data antar-kontainer. Ketika Pod dihapus dari node karena alasan apa pun (termasuk crash, skala turun, atau redeployment), data dalam volume emptyDir dihapus secara permanen.
| Parameter | Description |
|---|---|
| Mount Mode | Mode akses untuk volume. Nilai yang valid: Read/Write dan Read-only |
| Mount Path | Jalur di dalam kontainer tempat volume emptyDir dipasang |
| subPathExpr | Ekspresi referensi bidang yang digunakan untuk membuat nama subdirektori di dalam volume. Berguna untuk memberikan setiap kontainer atau instans Pod direktorinya sendiri |
Verifikasi konfigurasi
Setelah penyebaran selesai, verifikasi bahwa penyimpanan lokal dikonfigurasi dengan benar menggunakan salah satu metode berikut:
Check change records
Di panel navigasi sebelah kiri halaman detail aplikasi, klik Change Records. Jika kolom Change Status menampilkan Success, konfigurasi penyimpanan telah aktif.
Periksa status Pod
Di halaman Application Overview, klik Running Pods (Click View) di samping Running Status. Di bagian Pod, periksa kolom Status. Titik hijau menunjukkan Pod sedang berjalan dan konfigurasi telah diterapkan.
Pertimbangan produksi
Pertimbangkan hal-hal berikut saat menggunakan penyimpanan lokal di lingkungan produksi:
Keamanan: Volume
hostPathmelewati batas isolasi kontainer. Batasi jalur pemasangan ke cakupan minimum yang diperlukan dan gunakan mode pemasangan Read-only bila memungkinkan. Hindari memasang jalur sensitif seperti/,/etc, atau/var/run.Penjadwalan Pod: Data
hostPathterikat ke node tertentu. Jika Pod dijadwalkan ulang ke node berbeda, data dari host sebelumnya tidak dapat diakses. Untuk data yang harus bertahan meskipun terjadi perpindahan node, gunakan PersistentVolumelocalatau penyimpanan berbasis jaringan.Tekanan disk: Penggunaan volume
hostPathtidak dilacak oleh manajemen penyimpanan sementara Kubernetes. Pantau penggunaan disk pada node host untuk mencegah tekanan disk akibat penulisan kontainer ke pemasanganhostPath.Ukuran emptyDir: Volume
emptyDirmengonsumsi ruang disk node (atau memori jika didukung olehtmpfs). Satu Pod yang menulis data dalam jumlah besar keemptyDirdapat menyebabkan tekanan disk pada node.Kehilangan data: Data
emptyDirdihapus saat Pod dihapus. Jangan menyimpan data yang harus bertahan setelah restart Pod di volumeemptyDir.
Opsi runtime aplikasi
Pilih lingkungan runtime berdasarkan jenis aplikasi dan format pengemasannya.
| Runtime | Option | Use when |
|---|---|---|
| Java | Custom | Menyebarkan dengan gambar kontainer kustom |
| Java | Java | Menyebarkan aplikasi Dubbo atau Spring Boot dengan paket JAR. Atur Java Environment setelah pemilihan |
| Java | Tomcat | Menyebarkan aplikasi Dubbo atau Spring dengan paket WAR. Atur Java Environment dan Container Version setelah pemilihan |
| Java | EDAS-Container (HSF) | Menyebarkan aplikasi High-speed Service Framework (HSF) dengan paket WAR atau FatJar. Atur Java Environment, Pandora Version, dan Ali-Tomcat Version setelah pemilihan |
| PHP | PHP | Menjalankan aplikasi PHP di Apache HTTP Server |
| Multi-language | Node.js, C++, Go, and Other Languages | Menyebarkan dengan gambar kontainer kustom |