Cadangkan dan pulihkan sumber daya klaster Amazon EKS Anda menggunakan Velero
9 September 2023: Posting ini awalnya diterbitkan pada 1 Desember 2021. Kami telah memperbarui petunjuk langkah demi langkah pada posting blog ini untuk mendukung versi EKS terbaru dan perubahan pada bagan Velero Helm.
Perusahaan di seluruh dunia mengadopsi kontainer untuk merangkum layanan mikro mereka, dan banyak dari mereka memilih Kubernetes untuk mengotomatiskan penerapan, penskalaan, dan pengelolaan aplikasi yang dikontainerisasi. Seiring dengan bertambahnya jumlah layanan mikro ini, semakin penting untuk memiliki mekanisme cadangan terpusat untuk:
- Lindungi aplikasi jika terjadi kesalahan fisik dan logis
- Melakukan migrasi antar cluster Kubernetes
- Mereplikasi kluster produksi ke lingkungan pengembangan dan pengujian
Velero adalah alat sumber terbuka populer yang dapat menyediakan pemulihan bencana klaster Kubernetes, migrasi data, dan perlindungan data. Velero dapat mencadangkan sumber daya klaster Kubernetes dan volume persisten ke penyimpanan eksternal yang didukung sesuai permintaan atau sesuai jadwal.
Pelanggan AWS dapat memanfaatkan solusi ini untuk mencadangkan dan memulihkan objek dan aplikasi Kubernetes secara terpusat dari dan ke Amazon Elastic Kubernetes Service (Amazon EKS) , solusi terkelola kami yang membantu Anda menyediakan kluster Kubernetes yang sangat tersedia dan aman serta mengotomatiskan tugas-tugas utama seperti patching, penyediaan node, dan pembaruan. Ini berarti bahwa pelanggan juga dapat menggunakan Velero untuk bermigrasi dari Kubernetes yang dihosting sendiri ke Amazon EKS.
Dalam posting blog ini, kami akan fokus pada cara menggunakan Velero untuk mencadangkan, memulihkan, dan memigrasikan sumber daya klaster Amazon EKS Anda dan memahami opsi pencadangan yang ditawarkan Velero untuk memutuskan pendekatan mana yang paling sesuai dengan kasus penggunaan organisasi Anda.
Ikhtisar Velero
Di bagian ini, Anda akan mengenali cara Velero terintegrasi dengan Amazon EKS, penyesuaian yang ditawarkan alat ini untuk mencadangkan dan memulihkan aplikasi, serta alur kerja pencadangan-pemulihan.
Velero dan Amazon EKS
Pencadangan tingkat aplikasi di Amazon EKS menargetkan dua komponen:
- Objek dan konfigurasi Kubernetes disimpan di penyimpanan kunci/nilai etcd
- Data aplikasi disimpan dalam volume persisten
Di Amazon EKS, penyimpanan kunci/nilai etcd dikelola oleh AWS dan hanya dapat diakses melalui Server API Kubernetes. Velero memanfaatkan API Kubernetes untuk mengambil data ini dari penyimpanan kunci/nilai. Pendekatan ini memberikan fleksibilitas lebih daripada mengakses etcd secara langsung karena dengan panggilan API, Anda dapat dengan mudah memfilter sumber daya berdasarkan namespace, jenis sumber daya, atau label. Misalnya, Anda dapat membatasi cakupan cadangan Anda ke aplikasi tertentu, memfilter berdasarkan label, atau menyimpan strategi RBAC Anda saat ini, memfilter berdasarkan jenis objek.
Velero juga mengambil snapshot volume persisten klaster dan memulihkannya bersama objek klaster (detail di bagian berikutnya).
Operasi pencadangan dan pemulihan dideklarasikan sebagai objek Kubernetes Custom Resource Definition (CRD) dan dikelola oleh pengontrol yang memproses objek CRD baru ini untuk melakukan pencadangan, pemulihan, dan semua operasi terkait. Saat membuat objek CRD pencadangan dan pemulihan ini, Anda dapat menentukan penyesuaian berikut:
- Filter sumber daya : batasi cakupan pencadangan atau pemulihan dengan memfilter berdasarkan namespace, jenis objek, atau label. Saat memulihkan, Anda juga dapat memfilter dengan mengecualikan namespace dan jenis objek.
- Pilih jenis pencadangan : buat pencadangan sesuai permintaan atau atur jadwal untuk memulai pencadangan secara otomatis pada interval berulang.
- Tetapkan waktu penyimpanan : tunjukkan berapa lama Anda ingin menyimpan cadangan.
- Tentukan kait : konfigurasikan kait pra dan pasca untuk menjalankan perintah khusus dalam kontainer sebelum dan sesudah operasi pencadangan atau pemulihan.
Alur kerja pencadangan dan pemulihan
Velero terdiri dari dua komponen:
- Pod server Velero yang berjalan di kluster Amazon EKS Anda
- Klien baris perintah ( Velero CLI ) yang berjalan secara lokal
Setiap kali kami mengeluarkan cadangan terhadap klaster Amazon EKS, Velero melakukan pencadangan sumber daya klaster dengan cara berikut:
- Velero CLI membuat panggilan ke server API Kubernetes untuk membuat objek CRD cadangan.
- Pengendali cadangan:
- Memeriksa cakupan objek CRD cadangan, yaitu apakah kita menetapkan filter.
- Menanyakan server API untuk sumber daya yang memerlukan cadangan.
- Memampatkan objek Kubernetes yang diambil ke dalam file .tar dan menyimpannya di Amazon S3 .
Demikian pula, setiap kali kami mengeluarkan operasi pemulihan:
- Velero CLI membuat panggilan ke server API Kubernetes untuk membuat CRD pemulihan yang akan memulihkan dari cadangan yang ada.
- Pengontrol pemulihan:
- Memvalidasi objek CRD pemulihan.
- Melakukan panggilan ke Amazon S3 untuk mengambil file cadangan.
- Memulai operasi pemulihan.
Velero juga melakukan pencadangan dan pemulihan volume persisten apa pun dalam cakupan:
- Jika Anda menggunakan Amazon Elastic Block Store (Amazon EBS) , Velero akan membuat snapshot Amazon EBS dari volume persisten dalam cakupan.
- Untuk jenis volume lainnya (kecuali hostPath), gunakan integrasi Restic Velero untuk mengambil cadangan tingkat file dari isi volume Anda. Pada saat artikel ini ditulis, Restic masih dalam versi Beta, dan karenanya tidak direkomendasikan untuk cadangan tingkat produksi.
Di bagian berikutnya, kami akan menunjukkan cara mencadangkan aplikasi di Amazon EKS dan volume EBS terkait.
Panduan
Bagian berikut akan menunjukkan cara menggunakan Velero untuk mencadangkan aplikasi dalam satu kluster dan memulihkan aplikasi di kluster lain. Kami akan menggunakan platform penerbitan Ghost sumber terbuka yang populer untuk menunjukkan cara mencadangkan dan memulihkan tidak hanya definisi aplikasi tetapi juga statusnya yang disimpan pada volume EBS menggunakan Persistent Volume Claim (PVC).
Prasyarat
Untuk dapat mengikuti langkah berikutnya, Anda perlu memiliki prasyarat berikut:
eksctl
v0.155.0 atau yang lebih baru. Lihat Memasang atau memutakhirkan eksctl .- Dua kluster EKS dalam akun AWS yang sama. Lihat Membuat Kluster EKS . (Posting blog ini diuji dengan EKS yang menjalankan Kubernetes versi 1.27.)
- Kedua klaster tersebut akan disebut sebagai klaster
Primary
danRecovery
. - Setiap kluster harus dikonfigurasi dengan Penyedia OIDC IAM EKS. Lihat Membuat penyedia OIDC IAM untuk kluster Anda . Ini merupakan persyaratan untuk peran IAM bagi akun layanan yang digunakan untuk memberikan izin AWS yang diperlukan ke penerapan Velero.
- Setiap kluster harus menginstal driver Amazon EBS CSI .
- Kedua klaster tersebut akan disebut sebagai klaster
- AWS CLI versi 2. Lihat Menginstal, memperbarui, dan menghapus instalasi AWS CLI versi 2 .
- Helm v3. Lihat Memasang Helm .
kubectl
Lihat Memasang kubectl .
Dua kluster EKS yang kami gunakan untuk panduan ini berada di akun yang sama, tetapi ini bukan persyaratan yang sulit untuk menggunakan Velero. Dalam kasus ini, Anda tetap dapat menggunakan posting blog ini sebagai panduan dan menyesuaikan izin bucket IAM dan S3 sebagaimana mestinya.
Perhatikan bahwa perintah di bagian berikut ditulis dalam Bash.
Instal Velero
Ada beberapa langkah yang diperlukan untuk menginstal Velero menggunakan praktik terbaik EKS. Pertama, kita akan membuat bucket S3 untuk menyimpan cadangan. Kemudian, kita akan menggunakan peran IAM untuk akun layanan guna memberi Velero izin AWS yang diperlukan untuk melakukan operasi pencadangan dan pemulihan. Terakhir, kita akan menginstal Velero CLI untuk menyederhanakan cara kita berinteraksi dengan alat ini.
Buat Bucket S3 untuk menyimpan cadangan
Velero menggunakan S3 untuk menyimpan cadangan EKS saat berjalan di AWS. Jalankan perintah berikut untuk membuat bucket S3 untuk Velero. Pastikan untuk menggunakan nama bucket yang unik seperti <company-fqdn>-eks-velero-backups
.
Ganti <BUCKETNAME>
dan <REGION>
dengan nilai Anda sendiri di bawah ini.
Meskipun Amazon S3 menyimpan data Anda di beberapa Availability Zone yang berjauhan secara geografis secara default, persyaratan kepatuhan mungkin mengharuskan Anda menyimpan data pada jarak yang lebih jauh. Replikasi Lintas Wilayah memungkinkan Anda untuk mereplikasi data antara Wilayah AWS yang berjauhan untuk memenuhi persyaratan ini.
Kebijakan IAM
Velero melakukan sejumlah panggilan API ke sumber daya di EC2 dan S3 untuk melakukan snapshot dan menyimpan cadangan ke bucket S3. Kebijakan IAM berikut akan memberi Velero izin yang diperlukan.
Buat Akun Layanan untuk Velero
Praktik terbaik untuk menyediakan kebijakan AWS pada aplikasi yang berjalan pada kluster EKS adalah dengan menggunakan Peran IAM untuk Akun Layanan . eksctl menyediakan cara mudah untuk membuat peran IAM yang diperlukan dan menentukan hubungan kepercayaan dengan Akun Layanan velero-server.
Ganti <CLUSTERNAME>
dengan nama klaster Anda Primary
dan Recovery
EKS.
Bendera tersebut --namespace=velero
memastikan bahwa hanya aplikasi yang berjalan di velero
namespace yang akan dapat mengakses Kebijakan IAM yang dibuat pada langkah sebelumnya.
Instal Velero di kedua Cluster EKS
Petunjuk di bawah ini mencakup langkah-langkah yang diperlukan untuk menginstal Velero menggunakan bagan Helm. Perhatikan bagan tersebut disematkan ke versi 5.0.2 yang menginstal Velero versi v1.11.1. Jika Anda ingin menginstal versi Velero yang lebih baru, pastikan untuk menyesuaikan file nilai di bawah ini, termasuk mencocokkan versi plugin Velero AWS dengan versi Velero yang benar menggunakan matriks kompatibilitas .
Kita perlu menginstal server Velero dua kali: sekali di klaster Primary
dan sekali lagi di Recovery
klaster. Anda dapat menggunakan kubectl config
( kubectl contekan lembar ) atau kubectx untuk melihat konteks untuk kedua klaster dan dengan mudah beralih konteks.
Untuk memudahkan pengelolaan kubectl config
, kami menambahkan cluster kami kubeconfig
dengan alias:
Kita dapat memeriksa apakah kita memiliki konteks baru ini dengan perintah berikut:
kubectl config get-contexts
Tanda “*” menunjukkan konteks di mana kita berada.
Ubah konteks ke Primary
cluster Anda dan instal Velero:
Sekarang ubah konteks ke Recovery
cluster Anda dan lanjutkan untuk menginstal Velero:
Kita dapat memeriksa apakah server Velero berhasil diinstal dengan menjalankan perintah ini di setiap konteks:
kubectl get pods -n velero
Instal Velero CLI
Velero beroperasi dengan mengirimkan perintah sebagai CRD. Untuk mengambil cadangan klaster, Anda mengirimkan CRD cadangan ke klaster. Ini bisa jadi sulit dibuat secara manual, jadi tim Velero telah membuat CLI yang memudahkan untuk melakukan pencadangan dan pemulihan. Kami akan menggunakan Velero CLI untuk membuat cadangan klaster Primary
dan memulihkannya ke Recovery
klaster.
Petunjuk pemasangan berbeda-beda, tergantung pada sistem operasi Anda. Ikuti petunjuk untuk memasang Velero di sini .
Cadangkan dan pulihkan contoh aplikasi
Setelah Velero terpasang, kami akan melanjutkan dengan memasang aplikasi di Primary
klaster kami yang akan kami cadangkan dan pulihkan di Recovery
klaster kami. Pelanggan akan dapat mengikuti langkah-langkah di bawah ini untuk mencadangkan dan memulihkan aplikasi mereka sendiri di klaster Amazon EKS mereka sendiri.
Instal aplikasi Ghost (dan buat postingan)
Ghost akan berfungsi sebagai contoh aplikasi yang akan kami cadangkan di Primary
kluster dan dikembalikan ke Recovery
kluster. Kami akan menggunakan bagan Bitnami Helm karena bagan ini umum digunakan dan telah teruji dengan baik. Bagan ini bergantung pada bagan Bitnami MySQL yang akan berfungsi sebagai penyimpanan data persisten untuk aplikasi blog. Data MySQL akan disimpan dalam volume EBS yang akan di-snapshot oleh Velero sebagai bagian dari pelaksanaan pencadangan.
Sekarang kita beralih ke Primary
konteks cluster dan menginstal Ghost (abaikan notifikasi ERROR: you did not provide an external host yang muncul saat Anda menginstal Ghost. Ini akan diselesaikan dengan perintah berikut):
Kita dapat memeriksa apakah instalasi berhasil dengan menjalankan perintah ini:
kubectl get pods -n ghost
Buat postingan blog untuk menunjukkan cara mencadangkan dan memulihkan volume persisten
Setelah pemasangan bagan Helm selesai, README Bagan akan ditampilkan di konsol. Isinya meliputi:
- URL Blog
- URL Admin
- Nama pengguna admin default
- Petunjuk untuk menggunakan kubectl untuk mengambil kata sandi
Anda dapat secara opsional masuk ke konsol Admin Ghost (menggunakan URL Admin yang ditampilkan di atas) dan membuat contoh posting blog yang akan disertakan dalam proses pencadangan dan pemulihan. Ini akan menunjukkan bahwa cadangan tersebut tidak hanya mencakup konfigurasi penerapan aplikasi tetapi juga status basis data blog, yang mencakup semua posting.
Untuk membuat postingan, pertama pilih Postingan di panel navigasi sebelah kiri.
Lalu pilih Posting Baru di sudut kanan atas halaman.
Anda dapat menambahkan judul posting dan menulis beberapa konten. Saat Anda siap menyimpan contoh posting blog, pilih item menu tarik-turun Publikasikan di sudut kanan atas halaman, lalu pilih tombol Publikasikan di menu tarik-turun.
Untuk melihat blog Anda dengan konten yang baru ditambahkan, buka tab browser baru dan masukkan URL blog. Anda akan melihat blog Ghost dengan tema default beserta posting blog baru Anda dan beberapa contoh blog lain yang ditampilkan dalam instalasi default.
Buat Cadangan
Buat cadangan klaster Primary
. Pastikan kubectl
konteks Anda diatur ke Primary
klaster sebelum menjalankan perintah di bawah ini.
velero backup create ghost-backup
Kita dapat melihat seperti apa tampilan CRD cadangan Velero dengan menggunakan tanda -o
, yang mengeluarkan CRD cadangan YAML tanpa benar-benar mengirimkan pembuatan cadangan ke server Velero.
velero backup create test -o yaml
Dalam CRD cadangan, Anda dapat melihat bahwa kami mencadangkan semua namespace karena includedNamespaces
array menyertakan karakter pengganti bintang. Meskipun kami mencadangkan seluruh kluster, kami dapat memilih komponen kluster secara individual dengan menggunakan penyeleksi. Ini memberi kami kemampuan untuk mencadangkan satu namespace, yang mungkin menyertakan satu aplikasi, misalnya.
Validasi bahwa pencadangan berhasil
Mari periksa status pencadangan dan validasi bahwa pencadangan telah berhasil diselesaikan.
velero backup describe ghost-backup
Cari kolom Phase:
dalam output perintah. Jika saat ini Phase
adalah InProgress
, tunggu beberapa saat dan coba lagi hingga Anda melihat Phase: Completed
. Anda dapat melihat detail tambahan tentang pencadangan, termasuk informasi seperti waktu mulai dan waktu penyelesaian, beserta jumlah item yang dicadangkan.
Kita juga dapat melihat file cadangan yang dibuat oleh Velero di bucket Amazon S3 yang sebelumnya kita buat:
aws s3 ls $BUCKET/backups/ghost-backup/
Pulihkan aplikasi ke cluster Pemulihan
Alihkan kubectl
konteks Anda ke klaster Pemulihan Anda.
kubectl config use-context $RECOVERY_CONTEXT
Gunakan perintah berikut untuk memulihkan hanya aplikasi Ghost ke dalam Recovery
kluster.
Validasi bahwa pemulihan berhasil
Mari periksa status pemulihan dan validasi bahwa pemulihan telah berhasil diselesaikan.
velero restore describe ghost-restore
Cari Phase: Completed
di output. Jika Anda melihat Phase: InProgress
, tunggu beberapa saat dan jalankan perintah lagi. Kemudian ambil URL LoadBalancer untuk blog Ghost di cluster Recovery
:
kubectl -n ghost get svc ghost
Verifikasi bahwa blog Anda telah dipulihkan dengan mengunjungi URL di bawah EXTERNAL-IP
. Anda akan melihat blog Ghost beserta contoh posting blog yang Anda buat pada langkah sebelumnya.
Selamat! Anda baru saja berhasil mencadangkan klaster Primary
dan memulihkan aplikasi Anda di Recovery
klaster tersebut.
Perhatikan bahwa untuk operasi pencadangan/pemulihan/DR produksi, ini adalah titik di mana Anda ingin memindahkan catatan DNS produksi agar menunjuk ke kluster Recovery
, setelah memvalidasi bahwa layanan berfungsi seperti yang diharapkan.
Membersihkan
Untuk menghindari biaya di masa mendatang, hapus sumber daya. Jika Anda pernah eksctl
membuat kluster, Anda dapat eksctl delete cluster <clustername>
menghapus kluster tersebut.
Kita juga perlu menghapus bucket S3 yang kita gunakan untuk menyimpan cadangan kita dan peran IAM yang digunakan oleh Velero.
Kesimpulan
Ada beberapa strategi pemulihan bencana dan migrasi yang berbeda. Dalam posting blog ini, kami menunjukkan bagaimana Velero memastikan pemulihan cepat dari kegagalan dan kejadian bencana serta migrasi yang lancar untuk aplikasi dan sumber daya klaster di Amazon EKS. Kami menyoroti opsi yang ditawarkan alat ini dan menunjukkan proses pencadangan dan pemulihan ke klaster baru aplikasi berstatus. Demikian pula, pelanggan juga dapat melakukan migrasi, mereplikasi aplikasi mereka sendiri dan sumber daya Kubernetes ke klaster Amazon EKS lainnya, atau memulihkan status aplikasi sebelumnya.
Pendekatan ini memungkinkan Anda untuk memusatkan operasi untuk pemulihan bencana atau peristiwa migrasi, bukan hanya mengalihkan alur kerja CI/CD untuk diterapkan ke kluster EKS yang baru. Hal ini karena alur kerja CI/CD yang digunakan untuk menerapkan dan memperbarui aplikasi di Kubernetes dapat melakukan tindakan yang tidak diperlukan dalam situasi ini; selain itu, seseorang harus memikirkan pendekatan terpisah untuk menangani persistensi data. Alternatifnya adalah membuat alur kerja CI/CD khusus untuk peristiwa tersebut.
Dalam kasus kluster Kubernetes yang dikelola sendiri, pelanggan juga dapat menggunakan alat sumber terbuka ini untuk migrasi ke Amazon EKS. Untuk mempelajari lebih dalam kasus penggunaan ini, kami sarankan untuk mengikuti praktik terbaik yang dijelaskan dalam posting blog ini .
Tidak ada komentar:
Posting Komentar