
Kompose (Berasal dari penggabungan Kubernetes dan nama-nama komposisi buruh pelabuhan) adalah alat untuk membantu pengguna yang terbiasa dengan komposisi buruh pelabuhan pindah ke Kubernetes. Dibutuhkan file Docker Compose dan menerjemahkannya ke dalam sumber daya Kubernetes (penyebaran, layanan, dll). Panduan ini akan menunjukkan bagaimana seseorang memigrasikan Aplikasi Penulisan Docker ke Kubernetes Dengan Kompose.
Fitur Kompose yang sangat keren
- Sederhanakan proses pengembangan Anda dengan Docker Compose, lalu terapkan container Anda ke kluster produksi
- Konversikan Anda
docker-compose.yaml
dengan satu perintah sederhana kompose convert - Segera tampilkan cluster Anda dengan
kompose up
- Turunkan kembali dengan
kompose down
Apa yang dibutuhkan sebelum kita mulai
Sebelum melanjutkan dengan panduan ini, kami menganggap Anda memiliki cluster Kubernetes, dan alat baris perintah kubectl sudah dikonfigurasi untuk berkomunikasi dengan cluster Anda. Jika persyaratan ini tidak terpenuhi, Anda dapat menyiapkan cluster Kubernetes node tunggal sederhana menggunakan minikube dengan mengikuti panduan di bawah ini. Jika Anda siap untuk melanjutkan, lanjutkan menginstal kompose.
- Instal Minikube Kubernetes di CentOS 8 / CentOS 7 dengan KVM
- Deploy Cluster Kubernetes di Linux Dengan k0s
- Instal Cluster Kubernetes di Rocky Linux 8 dengan Kubeadm & CRI-O
- Instal Cluster Kubernetes di Ubuntu dengan kubeadm
Langkah 1: Menginstal Kompose di Linux, macOS
Unduh rilis biner terbaru Kompose. Anda dapat memeriksa Halaman Kompose Github untuk versi rilis.
### Linux ### curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi - mv kompose-linux-amd64 kompose ### macOS ### curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep darwin-amd64 | cut -d '"' -f 4 | wget -qi - mv kompose-darwin-amd64 kompose
Jadikan file biner dapat dieksekusi dan pindahkan ke direktori /usr/local/bin .
chmod +x kompose sudo mv ./kompose /usr/local/bin/kompose
Periksa versi setelah diinstal:
$ kompose version 1.26.1 (a9d05d509)
Langkah 2: Buat contoh gambar dari Dockerfile
Kami akan membuat proxy terbalik Nginx yang memproksi permintaan ke wadah Apache
Buat file bernama Dockerfile dan tambahkan konten di bawah ini.
cat > Dockerfile<<EOF # Sample Dockerfile for Kompose FROM nginx:alpine COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 8081 EOF
Dan ini adalah file konfigurasi (nginx.conf) yang kami salin ke dalam gambar
cat >nginx.conf<<EOF upstream apache-container { server 0.0.0.0:80; } server { listen 8081; location / { proxy_pass http://apache-container; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $server_name; } } EOF
Ini adalah proxy terbalik sederhana yang mendengarkan permintaan di port 8081 kemudian merutekan lalu lintas ke server hulu yang mendengarkan di port 80.
Langkah 3: Buat gambar kontainer
Buka terminal di proyek Anda dan ketik perintah berikut untuk membangun gambar kita menggunakan podman
$ podman build -t reverseproxy:v1 . STEP 1: FROM nginx:alpine Getting image source signatures Copying blob cbdbe7a5bc2a done Copying blob c554c602ff32 done Copying config 89ec9da682 done Writing manifest to image destination Storing signatures STEP 2: COPY nginx.conf /etc/nginx/conf.d/default.conf --> d86b4e89749 STEP 3: EXPOSE 8081 STEP 4: COMMIT reverseproxy:v1 --> b00d80e0056 b00d80e00560c205e0580d4b751b1a67da7e77e7fc73803b006ff10389bb4732 ### With Docker ### $ docker build -t reverseproxy:v1 .
Setelah gambar dibangun, kita harus dapat melihatnya sebagai berikut:
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/reverseproxy v1 b00d80e00560 19 seconds ago 21.2 MB
Langkah 3: Dorong gambar Kontainer ke registri Gambar
Anda dapat mendorong gambar ke salah satu pendaftar publik atau bahkan ke salah satu yang telah Anda buat/pribadi.
Contoh ini menggunakan registri gambar Docker Hub.
$ podman tag <local-image> docker.io/<username>/reverseproxy:v1 Example: $ podman tag localhost/reverseproxy:v1 docker.io/penchant/reverseproxy:v1
Otentikasi ke registri Gambar Anda – bagi saya ini adalah docker.io
$ podman login docker.io Username: <username> Password: <password> Login Succeeded!
Setelah login, push gambarnya, contoh:
$ podman push docker.io/penchant/reverseproxy:v1 Getting image source signatures Copying blob 113ce2720837 done Copying blob 3810cc0c140f done Copying blob 3e207b409db3 done Copying config b00d80e005 done Writing manifest to image destination Storing signatures
Anda dapat menemukan lebih banyak tentang mendorong dan menarik gambar dari DockerHub menggunakan panduan ini:
Langkah 4: Buat docker-compose.yaml
Ini adalah file yang akan digunakan Docker Compose untuk membuat layanan dan menjalankan lingkungan multi-kontainer untuk proyek sampel kami. Perhatikan gambar yang kami gunakan adalah yang baru saja kami buat dan dorong ke DockerHub
$ vim docker-compose.yaml version: "3" services: reverseproxy: image: docker.io/penchant/reverseproxy:v1 ports: - 8081:8081 restart: always apache: depends_on: - reverseproxy image: httpd:alpine restart: always
Setelah file docker-compose.yaml kami spick and span, ada dua opsi yang dapat kami manfaatkan saat menjalankan proyek melalui kompose. Pertama, kita dapat mengonversi file docker-compose.yaml untuk memisahkan file yaml seperti deployment, service, dan persistentvolumeclaim kemudian menggunakan kubectl untuk menerapkannya atau kita cukup menggunakan satu perintah kompose up untuk melakukan keajaiban. Karena saya ingin memeriksa file terpisah, kita akan mengonversi terlebih dahulu sebagai berikut:
$ kompose convert INFO Kubernetes file "reverseproxy-service.yaml" created INFO Kubernetes file "apache-deployment.yaml" created INFO Kubernetes file "reverseproxy-deployment.yaml" created
Sekarang kami memiliki tiga file yaml yang dibuat dengan nama yang menjelaskan fungsinya. Salah satunya adalah layanan, yang lain adalah penyebaran.
Kita dapat melanjutkan untuk menerapkan file-file ini menggunakan kubectl seperti yang diilustrasikan di bawah ini
$ kubectl apply -f reverseproxy-service.yaml,apache-deployment.yaml,reverseproxy-deployment.yaml service/reverseproxy created deployment.apps/apache created deployment.apps/reverseproxy created
Periksa layanan, pod, dan penerapan
$ kubectl get deployment,svc,pods NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/apache 1/1 1 1 113m deployment.apps/reverseproxy 1/1 1 1 105m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 122m service/reverseproxy ClusterIP 10.97.210.141 <none> 8081/TCP 113m NAME READY STATUS RESTARTS AGE pod/apache-7945cd6844-5hpf8 1/1 Running 0 113m pod/reverseproxy-8646fb7c4f-j6742 1/1 Running 0 105m
Seperti yang Anda lihat, bahkan sebelum masing-masing file yaml disetel agar sesuai dengan konfigurasi tertentu, mereka dapat meluncurkan sumber daya kubernetes.
Catatan:
Anda dapat mengubah detail dalam file yaml yang diturunkan setelah kompose bertindak pada file Docker-Compose untuk kebutuhan spesifik Anda. Hal baiknya adalah kompose melakukan sebagian besar pekerjaan berat dan Anda cukup menambahkan apa yang perlu Anda tambahkan.
Pikiran terakhir
Kompose adalah alat yang brilian dan dapat membawa Anda dari nol ke aplikasi Kubernetes yang berfungsi. Cobalah dalam proyek Anda untuk melihat kekuatan yang dapat Anda manfaatkan dengan memanfaatkan apa yang telah dikembangkan dalam kompose untuk Anda.
Kursus Belajar Kubernetes untuk dicoba:
- Docker dan Kubernetes: Panduan Lengkap
- Administrator Kubernetes Bersertifikat (CKA) dengan Tes Praktik
- Pelajari DevOps: Kursus Kubernetes Lengkap
- Pengembang Aplikasi Bersertifikat Kubernetes (CKAD) dengan Tes
- Docker & Kubernetes: Panduan Praktis
Jika Anda cukup penjelajah, temukan panduan lain di bawah ini untuk penaklukan Anda:
- Cara menjalankan Docker Containers menggunakan Podman dan Libpod
- Cara Menarik Gambar Wadah Secara Manual yang digunakan oleh Kubernetes kubeadm
- Sistem Operasi Kontainer Minimal Teratas untuk menjalankan Kubernetes
- Tambahkan Rahasia Tarik Registri Gambar Harbour ke Kubernetes / OpenShift
- Konfigurasikan Otentikasi Active Directory (AD) untuk Harbour Registry
- Cara Menginstal Minikube di Ubuntu 18.04 / Debian 10 Linux
Backup Sistem Linux ke Minio S3 dan SFTP menggunakan Restic – (Backup)
Pencadangan data adalah tugas penting pada sistem apa pun. Data pengguna adalah salah satu sumber daya organisasi yang paling penting. Kehilangan data dan informasi kepemilikan ini dapat berakibat fatal karena organisasi menghabiskan sebagian besar waktu untuk membangunnya. Kehilangan data dapat menyebabkan kerugian pendapatan, pelanggan kecewa, dll. Perusahaan yang tidak membuat cadangan dapat menjadi korban kehilangan data.
Saat ini ada beberapa tools yang bisa digunakan untuk melakukan backup data. Ini termasuk Rsync, Timeshift, Bacula, CloudBerry Backup, Bareos, Amanda, Clonezilla, BackupPC, Déjà Dup dll
Restic adalah salah satu program backup data yang paling aman. Alat ini ditulis dalam bahasa Go. Restic dapat digunakan untuk membuat cadangan lokal; file ke penyimpanan backend yang berbeda seperti direktori lokal, SFTP, penyimpanan S3 dll
Fitur-fitur yang disediakan oleh Restic adalah:
- Ini tersedia secara bebas untuk digunakan dan sepenuhnya open-source
- Amankan dengan kriptografi di setiap bagian proses
- Mudah dipasang dan digunakan
- dapat diverifikasi, memungkinkan Anda untuk memastikan bahwa file Anda dapat dipulihkan saat diperlukan
- Dapat diinstal pada sistem Linux, Windows, Mac, dan BSD
Panduan ini akan memandu Anda melalui cara menginstal Restic dan menggunakannya untuk mencadangkan Sistem Linux ke Minio S3 dan SFTP Server.
Langkah 1 – Instal Restic di Linux
Restic ada di beberapa repositori sistem Linux yang membuat instalasi menjadi sangat mudah.
Perintah di bawah ini dapat digunakan untuk menginstal Restic pada sistem Linux yang diinginkan.
##On debian/Ubuntu sudo apt update sudo apt install restic ##On Fedora sudo dnf copr remove copart/restic sudo dnf install restic ##On OpenSUSE sudo zypper install restic ##On RHEL 8 &9 /CentOS 8 & 9/Rocky Linux 8/AlmaLinux 8 sudo dnf install epel-release -y sudo dnf install restic -y ##On RHEL 7/CentOS 7 sudo yum install yum-plugin-copr sudo yum copr enable copart/restic sudo yum install restic ##On Arch Linux pacman -S restic
Setelah terinstal, periksa versi Restic.
$ restic version restic 0.13.1 compiled with go1.17.7 on linux/amd64
Untuk memperbarui Restic, gunakan perintah:
$ sudo restic self-update writing restic to /usr/bin/restic find latest release of restic at GitHub restic is up to date
Periksa versi baru.
$ restic version restic 0.13.1 compiled with go1.17.7 on linux/amd64
Langkah 2 – Siapkan repositori baru
Dalam konteks ini, repositori mengacu pada lokasi di mana cadangan Restic akan disimpan. Repositori bisa lokal atau disimpan di server jauh. Saat membuat pencadangan otomatis, Restic menerima repositori yang diekspresikan menggunakan variabel lingkungan RESTIC_REPOSITORY . Anda juga dapat menentukan repositori menggunakan flag--repository-file
Lokal
Misalnya, untuk membuat repositori lokal katakan di /srv/restic-repo , gunakan perintah:
$ sudo restic init --repo /srv/restic-repo enter password for new repository: enter password again: created restic repository 417acc230c at /srv/restic-repo Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.
B. SFTP
Untuk membuat cadangan data melalui SFTP, Anda perlu membuat akses SSH ke server jauh. Biasanya, login tanpa kata sandi disarankan sehingga kita perlu membuat dan menyalin kunci SSH sesuai kebutuhan.
ssh-keygen -t rsa
Salin kunci yang dihasilkan ke host jarak jauh menggantikan alamat IP pada sistem jarak jauh dengan benar. Pengguna root diperlukan karena mereka memiliki izin untuk mengakses direktori /srv di sistem jarak jauh
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]_IP
Sekarang Anda seharusnya dapat masuk ke sistem jarak jauh tanpa otentikasi kata sandi.
Sekarang tentukan alamat IP dan port server SFTP jarak jauh. Untuk melakukan ini, buat file konfigurasi SSH:
sudo vim /etc/ssh/ssh_config
Tambahkan detail untuk host jarak jauh:
Host restic-backup-host Hostname remote_IP_address User root Port 22
Sekarang gunakan perintah di bawah ini untuk membuat repositori:
$ restic -r sftp:restic-backup-host:/srv/restic-repo init enter password for new repository: enter password again: created restic repository 05e02f3b2c at sftp:restic-backup-host:/srv/restic-repo Please note that knowledge of your password is required to access the repository. Losing your password means that your data is irrecoverably lost.
C.Minio S3
Server Minio menawarkan Object Storage yang kompatibel dengan S3. Minio S3 -dapat dikonfigurasi pada sistem Anda menggunakan bantuan dalam panduan di bawah ini:
- Terapkan Penyimpanan MinIO di Rocky Linux 8|AlmaLinux 8|CentOS 8
- Terapkan dan Kelola Penyimpanan MinIO di Kubernetes
Untuk membuat repositori Minio, mulailah dengan mengekspor variabel seperti di bawah ini:
export AWS_ACCESS_KEY_ID=<YOUR-MINIO-ACCESS-KEY-ID> export AWS_SECRET_ACCESS_KEY=<YOUR-MINIO-SECRET-ACCESS-KEY>
Sekarang inisialisasi repositori Restic Anda menggunakan perintah:
restic -r s3:http://IP_addres:9000/restic init
Untuk mengotomatisasi proses nanti, disarankan agar Anda meletakkan semua variabel dalam file seperti di bawah ini.
vim ~/.restic-env
Berikan Minio variabel seperti di bawah ini:
export AWS_ACCESS_KEY_ID=<YOUR-MINIO-ACCESS-KEY-ID> export AWS_SECRET_ACCESS_KEY=<YOUR-MINIO-SECRET-ACCESS-KEY> export RESTIC_REPOSITORY="s3:http://IP_Address:9000/restic" export RESTIC_PASSWORD="a-strong-repository-password"
Sumber file:
source ~/.restic-env
Verifikasi apakah repositori;
$ echo $RESTIC_REPOSITORY s3:http://192.168.205.2:9000/restic
Sekarang inisialisasi repositori dengan mudah dengan perintah:
restic init
Contoh Keluaran:

Anda akan memiliki keranjang istirahat yang dibuat di Minio S3 seperti yang ditunjukkan.

Langkah 3 – Lakukan Backup pada Minio S3 dan SFTP Server menggunakan Restic
Dengan repositori diinisialisasi, kami siap untuk melakukan backup data. Isi direktori disebut snapshot . Untuk mengambil cadangan, dari direktori lokal katakan ~/Downloads , dengan file-file di bawah ini:
$ ls amzn2-vmware_esx-2.0.20220606.1-x86_64.xfs.gpt.ova docker-desktop-4.9.1-amd64.deb facts.txt
Perintah dengan sintaks di bawah ini dapat digunakan:
##For SFTP restic -r sftp:restic-backup-host:/srv/restic-repo -verbose backup ~/Downloads ##For Minio S3 restic -r s3:http://IP_addres:9000/restic --verbose backup ~/Downloads ##OR(when using the .restic-env file) restic --verbose backup ~/Downloads
Contoh Keluaran:

Pencadangannya sangat cepat dan itu membuat Restic sangat bagus. Untuk membuat cadangan lain dari direktori di atas, gunakan perintah yang sama seperti di atas. Sebagai contoh:
restic --verbose backup ~/Downloads
Contoh Keluaran:

Kali ini repositori baru akan dibuat dan prosesnya bahkan lebih cepat karena tidak ada data baru yang ditambahkan.
Untuk mencadangkan file individual, berikan nama file misalnya:
restic -r /srv/restic-repo backup ~/work.txt
Untuk membuat daftar snapshot gunakan perintah:
Untuk SFTP
restic snapshots -r sftp:restic-backup-host:/srv/restic-repo
Contoh Keluaran:

Untuk Minio S3
restic snapshots
Contoh Keluaran:

Langkah 4 – Membandingkan Snapshot
Untuk dapat melihat perbedaan antara kedua snapshot tersebut, Restic memberikan diff
perintah yang dapat digunakan seperti pada gambar:
##For SFTP restic -r sftp:restic-backup-host:/srv/restic-repo diff fa174dfb 9eeb825c ##For Minio S3 restic diff fa174dfb 9eeb825c
Contoh keluaran:

Langkah 5 – Kembalikan Snapshot
Setelah cadangan diambil, itu hanya berguna saat dipulihkan. Untuk mengembalikan cadangan yang diambil, gunakan restore
perintah.
Misalnya, memulihkan cadangan 9eeb825c ke /tmp/restore-work , perintahnya adalah:
##For SFTP restic -r sftp:restic-backup-host:/srv/restic-repo restore 9eeb825c --target /tmp/restore-work ##For Minio S3 restic restore 9eeb825c --target /tmp/restore-work
Keluaran eksekusi:
repository 94460011 opened successfully, password is correct restoring <Snapshot 9eeb825c of [/home/deb11/Downloads] at 2022-06-27 07:57:56.788365598 -0400 EDT by [email protected]> to /tmp/restore-work
Verifikasi ini:

Cadangan terbaru yang diambil dapat dipulihkan dengan perintah:
restic -r sftp:restic-backup-host:/srv/restic-repo restore latest --target /tmp/restore-new
Langkah 6 – Mengotomatiskan Pencadangan
Pencadangan dapat diotomatisasi dengan membuat Cron Jobs. forget
Digunakan untuk memelihara arsip snapshot yang sedang berjalan . restic forget --prune
Menetapkan kebijakan pencadangan yang harus dilakukan dalam satu hari, minggu, atau jam .
Jadi kita akan membuat cron job dengan perintah:
crontab -e
Tambahkan baris di bawah ini:
Minio S3
Untuk Minio menggunakan file ~/.restic-env dengan semua variabel:
30 * * * * . /home/deb11/.restic-env; restic backup -q /home/deb11/Downloads; restic forget -q --keep-last 2 --prune
Dalam perintah:
- 30 * * * * : menjalankan pencadangan pada menit ke-31 setiap jam, hari, bulan, dan hari dalam seminggu
- . /home/deb11/.restic-env; adalah
source ~/.restic-env
perintah. - cadangan sisa -q /home/deb11/Downloads; adalah perintah pencadangan dan mencadangkan konten ~/Downloads
- restic forget -q –keep-last 2 –prune memangkas snapshot lama yang tidak lagi diperlukan menggunakan kebijakan yang ditentukan. Di sini dua snapshot terakhir dipertahankan
SFTP
Konsepnya masih sama tetapi di sini Anda perlu membuat file rahasia yang berisi kata sandi repositori Restic Anda:
echo "Password_here" > ~/.secret
Sekarang tambahkan pekerjaan Cron.
30 * * * * restic --password-file /home/deb11/.secret -r sftp:restic-backup-host:/srv/restic-repo backup -q /home/deb11/Downloads; restic -r sftp:restic-backup-host:/srv/restic-repo forget -q --keep-last 2 --prune --password-file /home/deb11/.secret
Tamat!
Pikiran Penutup
Itu menandai akhir dari panduan ini tentang cara mencadangkan sistem Linux ke Minio S3 dan SFTP Server menggunakan Restic. Panduan ini adalah starter yang menggambarkan pencadangan dan pemulihan dasar menggunakan Restic. Saya harap ini signifikan.