Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Jalankan beban kerja stateful dengan penyimpanan data persisten dengan menggunakan Amazon EFS di Amazon EKS dengan AWS Fargate
Ricardo Morais, Rodrigo Bersa, dan Lucio Pereira, Amazon Web Services
Ringkasan
Pola ini memberikan panduan untuk mengaktifkan Amazon Elastic File System (Amazon EFS) sebagai perangkat penyimpanan untuk container yang berjalan di Amazon Elastic Kubernetes Service (Amazon EKS) dengan menggunakan AWS Fargate untuk menyediakan sumber daya komputasi Anda.
Pengaturan yang dijelaskan dalam pola ini mengikuti praktik terbaik keamanan dan memberikan keamanan saat istirahat dan keamanan dalam perjalanan secara default. Untuk mengenkripsi sistem file Amazon EFS Anda, ia menggunakan kunci AWS Key Management Service (AWS KMS), tetapi Anda juga dapat menentukan alias kunci yang mengirimkan proses pembuatan kunci KMS.
Anda dapat mengikuti langkah-langkah dalam pola ini untuk membuat namespace dan profil Fargate untuk aplikasi proof-of-concept (PoC), menginstal driver Amazon EFS Container Storage Interface (CSI) yang digunakan untuk mengintegrasikan cluster Kubernetes dengan Amazon EFS, mengkonfigurasi kelas penyimpanan, dan menyebarkan aplikasi PoC. Langkah-langkah ini menghasilkan sistem file Amazon EFS yang dibagi di antara beberapa beban kerja Kubernetes, berjalan di atas Fargate. Pola ini disertai dengan skrip yang mengotomatiskan langkah-langkah ini.
Anda dapat menggunakan pola ini jika Anda menginginkan persistensi data dalam aplikasi kontainer Anda dan ingin menghindari kehilangan data selama operasi penskalaan. Misalnya:
DevOps alat — Skenario umum adalah mengembangkan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) strategy. In this case, you can use Amazon EFS as a shared file system to store configurations among different instances of the CI/CD tool or to store a cache (for example, an Apache Maven repository) for pipeline stages among different instances of the CI/CDalat.
Server web — Skenario umum adalah menggunakan Apache sebagai server web HTTP. Anda dapat menggunakan Amazon EFS sebagai sistem file bersama untuk menyimpan file statis yang dibagikan di antara berbagai instance server web. Dalam skenario contoh ini, modifikasi diterapkan langsung ke sistem file alih-alih file statis yang dimasukkan ke dalam gambar Docker.
Prasyarat dan batasan
Prasyarat
Akun AWS yang aktif
Cluster Amazon EKS yang sudah ada dengan Kubernetes versi 1.17 atau yang lebih baru (diuji hingga versi 1.27)
Sistem file Amazon EFS yang sudah ada untuk mengikat Kubernetes StorageClass dan menyediakan sistem file secara dinamis
Izin administrasi klaster
Konteks dikonfigurasi untuk menunjuk ke cluster Amazon EKS yang diinginkan
Batasan
Ada beberapa batasan yang perlu dipertimbangkan saat Anda menggunakan Amazon EKS dengan Fargate. Misalnya, penggunaan beberapa konstruksi Kubernetes, seperti DaemonSets dan kontainer istimewa, tidak didukung. Untuk informasi selengkapnya, tentang batasan Fargate, lihat pertimbangan AWS Fargate dalam dokumentasi Amazon EKS.
Kode yang disediakan dengan pola ini mendukung workstation yang menjalankan Linux atau macOS.
Versi produk
AWS Command Line Interface (AWS CLI) versi 2 atau yang lebih baru
Driver Amazon EFS CSI versi 1.0 atau yang lebih baru (diuji hingga versi 2.4.8)
eksctl versi 0.24.0 atau yang lebih baru (diuji hingga versi 0.158.0)
jq versi 1.6 atau yang lebih baru
kubectl versi 1.17 atau yang lebih baru (diuji hingga versi 1.27)
Kubernetes versi 1.17 atau yang lebih baru (diuji hingga versi 1.27)
Arsitektur

Arsitektur target terdiri dari infrastruktur berikut:
Awan pribadi virtual (VPC)
Dua Zona Ketersediaan
Subnet publik dengan gateway NAT yang menyediakan akses internet
Subnet pribadi dengan cluster Amazon EKS dan target pemasangan Amazon EFS (juga dikenal sebagai titik pemasangan)
Amazon EFS di tingkat VPC
Berikut ini adalah infrastruktur lingkungan untuk cluster Amazon EKS:
Profil AWS Fargate yang mengakomodasi konstruksi Kubernetes di tingkat namespace
Namespace Kubernetes dengan:
Dua pod aplikasi didistribusikan di seluruh Availability Zone
Satu klaim volume persisten (PVC) terikat pada volume persisten (PV) di tingkat cluster
PV di seluruh cluster yang terikat pada PVC di namespace dan yang menunjuk ke target pemasangan Amazon EFS di subnet pribadi, di luar cluster
Alat
Layanan AWS
AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang dapat Anda gunakan untuk berinteraksi dengan layanan AWS dari baris perintah.
Amazon Elastic File System (Amazon EFS) membantu Anda membuat dan mengonfigurasi sistem file bersama di AWS Cloud. Dalam pola ini, ia menyediakan sistem file yang sederhana, terukur, dikelola sepenuhnya, dan dibagikan untuk digunakan dengan Amazon EKS.
Amazon Elastic Kubernetes Service (Amazon EKS) membantu Anda menjalankan Kubernetes di AWS tanpa perlu menginstal atau mengoperasikan cluster Anda sendiri.
AWS Fargate adalah mesin komputasi tanpa server untuk Amazon EKS. Ini membuat dan mengelola sumber daya komputasi untuk aplikasi Kubernetes Anda.
AWS Key Management Service (AWS KMS) membantu Anda membuat dan mengontrol kunci kriptografi untuk membantu melindungi data Anda.
Alat-alat lainnya
Docker
adalah seperangkat produk platform as a service (PaaS) yang menggunakan virtualisasi pada tingkat sistem operasi untuk mengirimkan perangkat lunak dalam wadah. eksctl adalah utilitas baris perintah untuk membuat dan mengelola cluster Kubernetes di Amazon EKS.
kubectl adalah antarmuka baris perintah yang membantu Anda menjalankan perintah terhadap klaster Kubernetes.
jq
adalah alat baris perintah untuk mengurai JSON.
Kode
Kode untuk pola ini disediakan dalam Konfigurasi GitHub Persistence dengan Amazon EFS di Amazon EKS menggunakan repo AWS Fargateepic01 melaluiepic06, sesuai dengan urutan di bagian Epik dalam pola ini.
Praktik terbaik
Arsitektur target mencakup layanan dan komponen berikut, dan mengikuti praktik terbaik AWS Well-Architected
Amazon EFS, yang menyediakan sistem file NFS elastis yang sederhana, dapat diskalakan, dan dikelola sepenuhnya. Ini digunakan sebagai sistem file bersama di antara semua replikasi aplikasi PoC yang berjalan di pod, yang didistribusikan dalam subnet pribadi dari kluster Amazon EKS yang dipilih.
Target pemasangan Amazon EFS untuk setiap subnet pribadi. Ini memberikan redundansi per Availability Zone dalam virtual private cloud (VPC) cluster.
Amazon EKS, yang menjalankan beban kerja Kubernetes. Anda harus menyediakan kluster Amazon EKS sebelum menggunakan pola ini, seperti yang dijelaskan di bagian Prasyarat.
AWS KMS, yang menyediakan enkripsi saat istirahat untuk konten yang disimpan dalam sistem file Amazon EFS.
Fargate, yang mengelola sumber daya komputasi untuk kontainer sehingga Anda dapat fokus pada persyaratan bisnis alih-alih beban infrastruktur. Profil Fargate dibuat untuk semua subnet pribadi. Ini menyediakan redundansi per Availability Zone dalam virtual private cloud (VPC) cluster.
Kubernetes Pods, untuk memvalidasi bahwa konten dapat dibagikan, dikonsumsi, dan ditulis oleh berbagai instance aplikasi.
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat klaster Amazon EKS. | catatanJika Anda sudah memiliki cluster yang digunakan, lewati ke epik berikutnya. Buat klaster Amazon EKS di akun AWS Anda yang ada. Di GitHub direktori | Administrator AWS, administrator Terraform atau eksctl, administrator Kubernetes |
Variabel lingkungan ekspor. | Jalankan skrip env.sh. Ini memberikan informasi yang diperlukan pada langkah selanjutnya.
Jika belum dicatat, Anda bisa mendapatkan semua informasi yang diminta di atas dengan perintah CLI berikut.
| Administrator sistem AWS |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Buat namespace Kubernetes dan profil Fargate untuk beban kerja aplikasi. | Buat namespace untuk menerima beban kerja aplikasi yang berinteraksi dengan Amazon EFS. Jalankan Dengan nama namespace aplikasi khusus:
Tanpa nama namespace aplikasi khusus:
di | Pengguna Kubernetes dengan izin yang diberikan |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Hasilkan token unik. | Amazon EFS memerlukan token pembuatan untuk memastikan operasi idempoten (memanggil operasi dengan token pembuatan yang sama tidak berpengaruh). Untuk memenuhi persyaratan ini, Anda harus menghasilkan token unik melalui teknik yang tersedia. Misalnya, Anda dapat membuat pengenal unik universal (UUID) untuk digunakan sebagai token pembuatan. | Administrator sistem AWS |
Buat sistem file Amazon EFS. | Buat sistem file untuk menerima file data yang dibaca dan ditulis oleh beban kerja aplikasi. Anda dapat membuat sistem file terenkripsi atau tidak terenkripsi. (Sebagai praktik terbaik, kode untuk pola ini menciptakan sistem terenkripsi untuk mengaktifkan enkripsi saat istirahat secara default.) Anda dapat menggunakan kunci AWS KMS simetris yang unik untuk mengenkripsi sistem file Anda. Jika kunci kustom tidak ditentukan, kunci yang dikelola AWS akan digunakan. Gunakan skrip create-efs.sh untuk membuat sistem file Amazon EFS terenkripsi atau tidak terenkripsi, setelah Anda membuat token unik untuk Amazon EFS. Dengan enkripsi saat istirahat, tanpa kunci KMS:
di Dengan enkripsi saat istirahat, dengan kunci KMS:
di Tanpa enkripsi:
di | Administrator sistem AWS |
Buat grup keamanan. | Buat grup keamanan untuk memungkinkan kluster Amazon EKS mengakses sistem file Amazon EFS. | Administrator sistem AWS |
Perbarui aturan masuk untuk grup keamanan. | Perbarui aturan masuk grup keamanan untuk mengizinkan lalu lintas masuk untuk pengaturan berikut:
| Administrator sistem AWS |
Tambahkan target pemasangan untuk setiap subnet pribadi. | Untuk setiap subnet pribadi klaster Kubernetes, buat target mount untuk sistem file dan grup keamanan. | Administrator sistem AWS |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Menyebarkan driver Amazon EFS CSI. | Terapkan driver Amazon EFS CSI ke dalam cluster. Pengemudi menyediakan penyimpanan sesuai dengan klaim volume persisten yang dibuat oleh aplikasi. Jalankan
Skrip ini menggunakan | Pengguna Kubernetes dengan izin yang diberikan |
Deploy kelas penyimpanan. | Menerapkan kelas penyimpanan ke dalam klaster untuk penyedia Amazon EFS (efs.csi.aws.com). | Pengguna Kubernetes dengan izin yang diberikan |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Menyebarkan volume persisten. | Terapkan volume persisten, dan tautkan ke kelas penyimpanan yang dibuat dan ke ID sistem file Amazon EFS. Aplikasi ini menggunakan volume persisten untuk membaca dan menulis konten. Anda dapat menentukan ukuran apa pun untuk volume persisten di bidang penyimpanan. Kubernetes membutuhkan bidang ini, tetapi karena Amazon EFS adalah sistem file elastis, ia tidak menerapkan kapasitas sistem file apa pun. Anda dapat menerapkan volume persisten dengan atau tanpa enkripsi. (Driver Amazon EFS CSI mengaktifkan enkripsi secara default, sebagai praktik terbaik.) Jalankan Dengan enkripsi dalam perjalanan:
di mana Tanpa enkripsi dalam perjalanan:
di | Pengguna Kubernetes dengan izin yang diberikan |
Terapkan klaim volume persisten yang diminta oleh aplikasi. | Terapkan klaim volume persisten yang diminta oleh aplikasi, dan tautkan ke kelas penyimpanan. Gunakan mode akses yang sama dengan volume persisten yang Anda buat sebelumnya. Anda dapat menentukan ukuran apa pun untuk klaim volume persisten di bidang penyimpanan. Kubernetes membutuhkan bidang ini, tetapi karena Amazon EFS adalah sistem file elastis, ia tidak menerapkan kapasitas sistem file apa pun. | Pengguna Kubernetes dengan izin yang diberikan |
Menyebarkan beban kerja 1. | Menerapkan pod yang mewakili beban kerja 1 dari aplikasi. Beban kerja ini menulis konten ke file | Pengguna Kubernetes dengan izin yang diberikan |
Menyebarkan beban kerja 2. | Menerapkan pod yang mewakili beban kerja 2 dari aplikasi. Beban kerja ini menulis konten ke file | Pengguna Kubernetes dengan izin yang diberikan |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Periksa status | Masukkan perintah berikut untuk memeriksa status file
Untuk keluaran contoh, lihat bagian Informasi tambahan. | Pengguna Kubernetes dengan izin yang diberikan |
Periksa status | Masukkan perintah berikut untuk memeriksa status file
Untuk keluaran contoh, lihat bagian Informasi tambahan. | Pengguna Kubernetes dengan izin yang diberikan |
Validasi bahwa beban kerja 1 dapat menulis ke sistem file. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 1 menulis ke.
Hasilnya mirip dengan yang berikut:
| Pengguna Kubernetes dengan izin yang diberikan |
Validasi bahwa beban kerja 2 dapat menulis ke sistem file. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 2 menulis ke.
Hasilnya mirip dengan yang berikut:
| Pengguna Kubernetes dengan izin yang diberikan |
Validasi bahwa beban kerja 1 dapat membaca file yang ditulis oleh beban kerja 2. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 1 dapat membaca
Hasilnya mirip dengan yang berikut:
| Pengguna Kubernetes dengan izin yang diberikan |
Validasi bahwa beban kerja 2 dapat membaca file yang ditulis oleh beban kerja 1. | Masukkan perintah berikut untuk memvalidasi bahwa beban kerja 2 dapat membaca
Hasilnya mirip dengan yang berikut:
| Pengguna Kubernetes dengan izin yang diberikan |
Validasi bahwa file disimpan setelah Anda menghapus komponen aplikasi. | Selanjutnya, Anda menggunakan skrip untuk menghapus komponen aplikasi (volume persisten, klaim volume persisten, dan pod), dan memvalidasi bahwa file
di mana Hasilnya mirip dengan yang berikut:
| Pengguna Kubernetes dengan izin yang diberikan, Administrator sistem |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Pantau log aplikasi. | Sebagai bagian dari operasi dua hari, kirimkan log aplikasi ke Amazon CloudWatch untuk pemantauan. | Administrator sistem AWS, pengguna Kubernetes dengan izin yang diberikan |
Pantau container Amazon EKS dan Kubernetes dengan Container Insights. | Sebagai bagian dari operasi dua hari, pantau sistem Amazon EKS dan Kubernetes dengan menggunakan Amazon Container Insights. CloudWatch Alat ini mengumpulkan, mengumpulkan, dan merangkum metrik dari aplikasi kontainer pada tingkat dan dimensi yang berbeda. Untuk informasi selengkapnya, lihat bagian Sumber daya terkait. | Administrator sistem AWS, pengguna Kubernetes dengan izin yang diberikan |
Pantau Amazon EFS dengan CloudWatch. | Sebagai bagian dari operasi dua hari, pantau sistem file menggunakan Amazon CloudWatch, yang mengumpulkan dan memproses data mentah dari Amazon EFS menjadi metrik yang dapat dibaca, mendekati waktu nyata. Untuk informasi selengkapnya, lihat bagian Sumber daya terkait. | Administrator sistem AWS |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Bersihkan semua sumber daya yang dibuat untuk pola tersebut. | Setelah Anda menyelesaikan pola ini, bersihkan semua sumber daya, untuk menghindari biaya AWS. Jalankan Dengan enkripsi saat istirahat, dengan kunci KMS:
di Tanpa enkripsi saat istirahat:
di | Pengguna Kubernetes dengan izin yang diberikan, Administrator sistem |
Sumber daya terkait
Referensi
AWS Fargate untuk Amazon EKS sekarang mendukung Amazon EFS (pengumuman
) Cara menangkap log aplikasi saat menggunakan Amazon EKS di AWS Fargate
(posting blog) Menggunakan Wawasan Kontainer ( CloudWatch dokumentasi Amazon)
Menyiapkan Wawasan Kontainer di Amazon EKS dan Kubernetes (dokumentasi Amazon) CloudWatch
Metrik Amazon EKS dan Kubernetes Container Insights (dokumentasi Amazon) CloudWatch
Memantau Amazon EFS dengan Amazon CloudWatch (dokumentasi Amazon EFS)
GitHub tutorial dan contoh
Alat yang dibutuhkan
Informasi tambahan
Berikut ini adalah contoh output dari kubectl get pv perintah.
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE poc-app-pv 1Mi RWX Retain Bound poc-efs-eks-fargate/poc-app-pvc efs-sc 3m56s
Berikut ini adalah contoh output dari kubectl -n poc-efs-eks-fargate get pvc perintah.
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE poc-app-pvc Bound poc-app-pv 1Mi RWX efs-sc 4m34s