Menyebarkan penyimpanan yang didistribusikan oleh CEPH dan menghubungkannya ke Kubernetes


Bagian 1 Kami menyebarkan lingkungan untuk bekerja dengan layanan microser. Bagian 1 menginstal Kubernetes HA pada bare metal (Debian)


Halo, para pembaca Habr!


Dalam posting sebelumnya , saya berbicara tentang cara menggunakan kluster failover Kubernetes. Tetapi faktanya adalah bahwa di Kubernetes nyaman untuk menggunakan aplikasi stateless yang tidak perlu mempertahankan statusnya atau bekerja dengan data. Tetapi dalam kebanyakan kasus, kita perlu menyimpan data dan tidak kehilangannya saat memulai kembali perapian.
Kubernet menggunakan volume untuk tujuan ini. Ketika kami bekerja dengan solusi cloud Kubernetes, tidak ada masalah khusus. Kami hanya perlu memesan volume yang diperlukan dari Google, Amazon atau penyedia cloud lainnya dan, dipandu oleh dokumentasi , menghubungkan volume yang diterima ke pod.
Ketika kita berurusan dengan bare metal, segalanya menjadi sedikit lebih rumit. Hari ini saya ingin berbicara tentang salah satu solusi berdasarkan penggunaan ceph.


Dalam publikasi ini saya akan memberi tahu:


  • cara menggunakan penyimpanan yang didistribusikan ceph
  • Cara menggunakan Ceph saat bekerja dengan Kubernetes

Pendahuluan


Untuk mulai dengan, saya ingin menjelaskan kepada siapa artikel ini akan berguna. Pertama, untuk pembaca yang menggunakan cluster menurut publikasi pertama saya untuk terus membangun arsitektur layanan-mikro. Kedua, bagi orang-orang yang ingin mencoba menggunakan ceph cluster sendiri dan mengevaluasi kinerjanya.


Dalam publikasi ini, saya tidak akan menyentuh topik perencanaan klaster untuk kebutuhan apa pun, saya hanya akan berbicara tentang prinsip dan konsep umum. Saya tidak akan mempelajari "penyetelan" dan penyetelan dalam, ada banyak publikasi tentang hal ini, termasuk tentang Habr. Artikel ini akan lebih bersifat pengantar, tetapi pada saat yang sama akan memungkinkan Anda untuk mendapatkan solusi yang dapat Anda beradaptasi dengan kebutuhan Anda di masa depan.


  1. Daftar host, sumber daya host, OS dan versi perangkat lunak
  2. Struktur Cluster Ceph
  3. Konfigurasikan node cluster sebelum instalasi
  4. Instal ceph-deploy
  5. Membuat cluster ceph
  6. Pengaturan jaringan
  7. Instal paket ceph
  8. Instalasi dan inisialisasi monitor
  9. Menambahkan OSD
  10. Hubungkan ceph ke kubernetes
  11. Membuat kumpulan data
  12. Menciptakan rahasia klien
  13. Menyebarkan penyedia rbd ceph
  14. Membuat kelas penyimpanan
  15. Tes ligamen Kubernetes + ceph
  16. Daftar bahan yang digunakan dalam persiapan artikel


Daftar Host dan Persyaratan Sistem


NamaAlamat IPKomentar
ceph01-test10.73.88.52ceph-node01
ceph02-test10.73.88.53ceph-node02
ceph03-test10.73.88.54ceph-node03

Saat menulis artikel, saya menggunakan mesin virtual dengan konfigurasi ini



Masing-masing memiliki OS 9.5 Debian diinstal. Ini adalah mesin uji, masing-masing dengan dua disk, yang pertama untuk OS, yang kedua untuk OSD Cef


Saya akan menyebarkan cluster melalui utilitas ceph-deploy. Anda dapat menggunakan ceph cluster dalam mode manual, semua langkah dijelaskan dalam dokumentasi, tetapi tujuan artikel ini adalah untuk mengetahui seberapa cepat Anda dapat menggunakan ceph dan mulai menggunakannya di kubernetes.
Ceph cukup rakus untuk sumber daya, terutama RAM. Untuk kecepatan yang baik, disarankan untuk menggunakan drive SSD.


Anda dapat membaca lebih lanjut tentang persyaratan dalam dokumentasi resmi Ceph.



Struktur Cluster Ceph


MON
Monitor adalah daemon yang bertindak sebagai koordinator dari mana cluster dimulai. Segera setelah kami memiliki setidaknya satu monitor yang berfungsi, kami memiliki cluster Ceph. Monitor menyimpan informasi tentang kesehatan dan kondisi cluster dengan menukar berbagai kartu dengan monitor lain. Klien beralih ke monitor untuk mengetahui OSD mana yang akan ditulis / dibaca data. Saat Anda menggunakan penyimpanan baru, hal pertama yang Anda lakukan adalah membuat monitor (atau beberapa). Cluster dapat hidup pada satu monitor, tetapi disarankan untuk membuat 3 atau 5 monitor untuk menghindari jatuhnya seluruh sistem karena jatuhnya satu monitor. Hal utama adalah bahwa jumlah ini harus ganjil untuk menghindari situasi otak-terpisah. Monitor bekerja dalam kuorum, jadi jika lebih dari setengah monitor jatuh, cluster akan diblokir untuk mencegah inkonsistensi data.
Mgr
Daemon Ceph Manager bekerja dengan daemon monitor untuk memberikan kontrol tambahan.
Sejak versi 12.x, daemon ceph-mgr menjadi penting untuk operasi normal.
Jika daemon mgr tidak berjalan, Anda akan melihat peringatan tentang ini.
OSD (Perangkat Penyimpanan Objek)
OSD adalah unit penyimpanan yang menyimpan data itu sendiri dan memproses permintaan klien dengan bertukar data dengan OSD lain. Ini biasanya sebuah disk. Dan biasanya untuk setiap OSD ada daemon OSD terpisah yang dapat berjalan pada mesin mana pun di mana disk ini diinstal.


Ketiga daemon akan bekerja pada setiap mesin di cluster kami. Dengan demikian, monitor dan daemon manajer sebagai daemon layanan dan OSD untuk satu drive mesin virtual kami.



Konfigurasikan node cluster sebelum instalasi


Dokumentasi ceph menentukan alur kerja berikut:



Saya akan bekerja dari node pertama dari ceph01-test cluster, itu akan menjadi Admin Node, itu juga akan berisi file konfigurasi untuk utilitas ceph-deploy. Agar utilitas penyebaran ceph berfungsi dengan benar, semua node cluster harus dapat diakses melalui ssh dengan simpul Admin. Untuk kenyamanan, saya akan menulis nama pendek host untuk cluster


10.73.88.52 ceph01-test 10.73.88.53 ceph02-test 10.73.88.54 ceph03-tset 

Dan salin kunci ke host lain. Semua perintah akan saya jalankan dari root.


 ssh-copy-id ceph02-test ssh-copy-id ceph03-test 

Dokumentasi Pengaturan


ceph-deploy

Instal ceph-deploy


Langkah pertama adalah menginstal ceph-deploy pada mesin ceph01-test


 wget -q -O- 'https://download.ceph.com/keys/release.asc' | apt-key add - 

Selanjutnya, Anda harus memilih rilis yang ingin Anda masukkan. Tetapi di sini ada kesulitan, saat ini ceph untuk Debian OS hanya mendukung paket yang bercahaya.
Jika Anda ingin memasang rilis yang lebih baru, Anda harus menggunakan cermin, misalnya
https://mirror.croit.io/debian-mimic/dists/


Tambahkan repositori dengan meniru pada ketiga node


 apt install curl apt-transport-https -y curl https://mirror.croit.io/keys/release.gpg > /usr/share/keyrings/croit-signing-key.gpg echo 'deb [signed-by=/usr/share/keyrings/croit-signing-key.gpg] https://mirror.croit.io/debian-mimic/ stretch main' > /etc/apt/sources.list.d/croit-ceph.list apt update apt install ceph-deploy 

Jika luminous sudah cukup untuk Anda, maka Anda dapat menggunakan repositori resmi


 echo deb https://download.ceph.com/debian-luminous/ $(lsb_release -sc) main | tee /etc/apt/sources.list.d/ceph.list apt-transport-https apt update apt install ceph-deploy 

Kami juga menginstal NTP pada ketiga node.


karena rekomendasi ini ada dalam dokumentasi ceph

Kami merekomendasikan menginstal NTP pada node Ceph (terutama pada node Monitor Ceph) untuk mencegah masalah yang timbul dari penyimpangan jam.


 apt install ntp 

Pastikan Anda mengaktifkan layanan NTP. Pastikan bahwa setiap simpul Ceph menggunakan server NTP yang sama. Anda dapat melihat detail lebih lanjut di sini



Membuat cluster ceph


Buat direktori untuk file config dan file ceph-deploy


 mkdir my-cluster cd my-cluster 

Mari kita membuat konfigurasi cluster baru, saat membuat, menunjukkan bahwa akan ada tiga monitor di cluster kami


 ceph-deploy new ceph01-test ceph02-test ceph03-test 


Pengaturan jaringan


Sekarang poin penting, saatnya berbicara tentang jaringan untuk ceph. Ceph menggunakan dua jaringan publik dan sebuah jaringan cluster untuk bekerja


Seperti yang Anda lihat dari diagram jaringan publik, ini adalah level pengguna dan aplikasi, dan jaringan cluster adalah jaringan yang dengannya data direplikasi.
Sangat diinginkan untuk memisahkan kedua jaringan ini dari satu sama lain. Juga, jaringan kluster kecepatan jaringan diinginkan setidaknya 10 Gb.
Tentu saja, Anda dapat menyimpan semuanya di jaringan yang sama. Tapi ini penuh dengan fakta bahwa segera setelah volume replikasi antara OSD meningkat, misalnya, ketika OSD baru (disk) jatuh atau ditambahkan, beban jaringan akan SANGAT meningkat. Jadi kecepatan dan stabilitas infrastruktur Anda akan sangat tergantung pada jaringan yang digunakan oleh ceph.
Sayangnya, kluster virtualisasi saya tidak memiliki jaringan yang terpisah, dan saya akan menggunakan segmen jaringan yang umum.
Konfigurasi jaringan untuk cluster dilakukan melalui file config, yang kami hasilkan dengan perintah sebelumnya.


 /my-cluster# cat ceph.conf [global] fsid = 2e0d92b0-e803-475e-9060-0871b63b6e7f mon_initial_members = ceph01-test, ceph02-test, ceph03-test mon_host = 10.73.88.52,10.73.88.53,10.73.88.54 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx 

Seperti yang dapat kita lihat, penyebaran cef tidak membuat pengaturan jaringan default untuk kita, jadi saya akan menambahkan parameter jaringan publik = {jaringan publik / netmask} ke bagian global dari konfigurasi. Jaringan saya adalah 10.73.0.0/16, jadi setelah menambahkan konfigurasi saya akan terlihat seperti ini


 [global] fsid = 2e0d92b0-e803-475e-9060-0871b63b6e7f mon_initial_members = ceph01-test, ceph02-test, ceph03-test mon_host = 10.73.88.52,10.73.88.53,10.73.88.54 public network = 10.73.0.0/16 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx 

Jika Anda ingin memisahkan jaringan cluster dari publik, tambahkan parameter cluster network = {cluster-network / netmask}
Anda dapat membaca lebih lanjut tentang jaringan dalam dokumentasi.



Instal paket ceph


Menggunakan ceph-deploy, kami menginstal semua paket ceph yang kami butuhkan pada tiga node kami.
Untuk melakukan ini, pada ceph01-test, jalankan
Jika versi ini meniru maka


 ceph-deploy install --release mimic ceph01-test ceph02-test ceph03-test 

Jika versinya bercahaya maka


 ceph-deploy install --release luminous ceph01-test ceph02-test ceph03-test 

Dan tunggu sampai semuanya ditetapkan.



Instalasi dan inisialisasi monitor


Setelah semua paket diinstal, kami akan membuat dan memulai monitor cluster kami.
Uji coba lakukan hal berikut


 ceph-deploy mon create-initial 

Monitor akan dibuat dalam proses, daemon akan diluncurkan, dan ceph-deploy akan memeriksa kuorum.
Sekarang sebar konfigurasi pada node cluster.


 ceph-deploy admin ceph01-test ceph02-test ceph03-test 

Dan periksa status cluster kami, jika Anda melakukan semuanya dengan benar, maka statusnya seharusnya
HEALTH_OK


 ~/my-cluster# ceph status cluster: id: 2e0d92b0-e803-475e-9060-0871b63b6e7f health: HEALTH_OK services: mon: 3 daemons, quorum ceph01-test,ceph02-test,ceph03-test mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0 B usage: 0 B used, 0 B / 0 B avail pgs: 

Buat mgr


 ceph-deploy mgr create ceph01-test ceph02-test ceph03-test 

Dan periksa kembali statusnya


 ceph -s 

Sebuah garis akan muncul


 mgr: ceph01-test(active), standbys: ceph02-test, ceph03-test 

Kami menulis konfigurasi untuk semua host di kluster


 ceph-deploy admin ceph01-test ceph02-test ceph03-test 


Menambahkan OSD


Saat ini kami memiliki cluster yang berfungsi, tetapi belum memiliki disk (osd dalam terminologi ceph) untuk menyimpan informasi.


OSD dapat ditambahkan dengan perintah berikut (tampilan umum)


 ceph-deploy osd create --data {device} {ceph-node} 

Dalam testbed saya, disk / dev / sdb dialokasikan di bawah osd, jadi dalam kasus saya perintahnya adalah sebagai berikut


 ceph-deploy osd create --data /dev/sdb ceph01-test ceph-deploy osd create --data /dev/sdb ceph02-test ceph-deploy osd create --data /dev/sdb ceph03-test 

Periksa apakah semua OSD berfungsi.


 ceph -s 

Kesimpulan


  cluster: id: 2e0d92b0-e803-475e-9060-0871b63b6e7f health: HEALTH_OK services: mon: 3 daemons, quorum ceph01-test,ceph02-test,ceph03-test mgr: ceph01-test(active) osd: 3 osds: 3 up, 3 in 

Anda juga dapat mencoba beberapa perintah yang berguna untuk OSD.


 ceph osd df ID CLASS WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS 0 hdd 0.00490 1.00000 5.0 GiB 1.0 GiB 4.0 GiB 20.05 1.00 0 1 hdd 0.00490 1.00000 5.0 GiB 1.0 GiB 4.0 GiB 20.05 1.00 0 2 hdd 0.00490 1.00000 5.0 GiB 1.0 GiB 4.0 GiB 20.05 1.00 0 TOTAL 15 GiB 3.0 GiB 12 GiB 20.05 

dan


 ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.01469 root default -3 0.00490 host ceph01-test 0 hdd 0.00490 osd.0 up 1.00000 1.00000 -5 0.00490 host ceph02-test 1 hdd 0.00490 osd.1 up 1.00000 1.00000 -7 0.00490 host ceph03-test 2 hdd 0.00490 osd.2 up 1.00000 1.00000 

Jika semuanya OK, maka kami memiliki ceph cluster yang berfungsi. Pada bagian selanjutnya saya akan memberi tahu cara menggunakan ceph dengan kubernetes



Hubungkan ceph ke kubernetes


Sayangnya, saya tidak akan dapat menjelaskan secara terperinci operasi volume Kubernetes dalam artikel ini, jadi saya akan mencoba mencocokkannya menjadi satu paragraf.
Kubernetes menggunakan kelas penyimpanan untuk bekerja dengan volume data data, setiap kelas penyimpanan memiliki penyedia sendiri, Anda dapat menganggapnya sebagai semacam "driver" untuk bekerja dengan volume penyimpanan data yang berbeda. Daftar lengkap yang mendukung kubernetes dapat ditemukan di dokumentasi resmi .
Kubernetes sendiri juga memiliki dukungan untuk bekerja dengan rbd, tetapi tidak ada klien rbd yang diinstal pada gambar kube-controller-manager resmi, jadi Anda perlu menggunakan gambar yang berbeda.
Perlu juga dicatat bahwa volume (pvc) yang dibuat sebagai rbd hanya dapat ReadWriteOnce (RWO) dan, yang berarti Anda dapat memasang volume yang dibuat HANYA ke satu perapian.


Agar cluster kami dapat bekerja dengan volume ceph, kita perlu:
dalam cluster Ceph:


  • buat kumpulan data dalam ceph cluster
  • buat klien dan kunci akses ke kumpulan data
  • dapatkan rahasia admin ceph

Agar cluster kami dapat bekerja dengan volume ceph, kita perlu:
dalam cluster Ceph:


  • buat kumpulan data dalam ceph cluster
  • buat klien dan kunci akses ke kumpulan data
  • dapatkan rahasia admin ceph

di kluster Kubernetes:


  • buat rahasia admin ceph dan kunci klien ceph
  • instal ceph rbd provisioner atau ubah gambar kube-controller-manager menjadi gambar yang mendukung rbd
  • buat rahasia dengan kunci klien ceph
  • buat kelas penyimpanan
  • instal ceph-common pada catatan pekerja kubernetes


Membuat kumpulan data


Di ceph cluster, buat kumpulan untuk volume kubernetes


 ceph osd pool create kube 8 8 

Di sini saya akan membuat penjelasan kecil, angka 8 8 pada akhirnya adalah angka pg dan pgs. Nilai-nilai ini tergantung pada ukuran cluster ceph Anda. Ada kalkulator khusus yang menghitung jumlah pg dan pg, misalnya, resmi dari ceph
Untuk memulai, saya sarankan untuk membiarkannya secara default, jika di masa depan jumlah ini dapat ditingkatkan (hanya dapat dikurangi dengan versi Nautilus).



Membuat klien untuk kumpulan data


Buat klien untuk kumpulan baru


 ceph auth add client.kube mon 'allow r' osd 'allow rwx pool=kube' 

Kami akan menerima kunci untuk klien, di masa depan kami akan membutuhkannya untuk membuat kubernet rahasia


 ceph auth get-key client.kube AQDd5aldka5KJRAAkpWTQYUMQi+5dfGDqSyxkg== 

Mendapatkan kunci admin


Dan dapatkan kunci admin


 ceph auth get client.admin 2>&1 |grep "key = " |awk '{print $3'} AQAv+Itdx4DwKBAAKVhWRS3+eEPqV3Xrnlg9KA== 

Pada ceph cluster, semua pekerjaan selesai dan sekarang kita harus pergi ke mesin yang memiliki akses ke cluster kubernetes
Saya akan bekerja dengan uji master01 (10.73.71.25) dari gugus yang digunakan oleh saya dalam publikasi pertama.



Menciptakan rahasia klien


Buat file dengan token klien yang kami terima (jangan lupa ganti dengan token Anda)


 echo AQDd5aldka5KJRAAkpWTQYUMQi+5dfGDqSyxkg== > /tmp/key.client 

Dan buat rahasia yang akan kita gunakan di masa depan


 kubectl create secret generic ceph-secret --from-file=/tmp/key.client --namespace=kube-system --type=kubernetes.io/rbd 

Buat rahasia admin


Buat file dengan token admin (jangan lupa ganti dengan token Anda)


 echo AQAv+Itdx4DwKBAAKVhWRS3+eEPqV3Xrnlg9KA== > /tmp/key.admin 

Setelah itu buat rahasia admin


 kubectl create secret generic ceph-admin-secret --from-file=/tmp/key.admin --namespace=kube-system --type=kubernetes.io/rbd 

Periksa apakah rahasia telah dibuat


 kubectl get secret -n kube-system | grep ceph ceph-admin-secret kubernetes.io/rbd 1 8m31s ceph-secret kubernetes.io/rbd 1 7m32s 


Metode pertama menggunakan Ceph rbd provisioner


Kami mengkloning repositori kubernetes-incubator / external-storage dari github, ia memiliki semua yang Anda butuhkan untuk membuat teman-teman cluster kubernetes dengan repositori ceph.


 git clone https://github.com/kubernetes-incubator/external-storage.git cd external-storage/ceph/rbd/deploy/ NAMESPACE=kube-system sed -r -i "s/namespace: [^ ]+/namespace: $NAMESPACE/g" ./rbac/clusterrolebinding.yaml ./rbac/rolebinding.yaml 

 kubectl -n $NAMESPACE apply -f ./rbac 

Kesimpulan


 clusterrole.rbac.authorization.k8s.io/rbd-provisioner created clusterrolebinding.rbac.authorization.k8s.io/rbd-provisioner created deployment.extensions/rbd-provisioner created role.rbac.authorization.k8s.io/rbd-provisioner created rolebinding.rbac.authorization.k8s.io/rbd-provisioner created serviceaccount/rbd-provisioner created 

Metode dua: Ganti gambar kube-controller-manager


Tidak ada dukungan rbd di gambar kube-controller-manager resmi, jadi kita perlu mengubah gambar controller-manager.
Untuk melakukan ini, pada setiap penyihir Kubernetes, Anda perlu mengedit file kube-controller-manager.yaml dan mengganti gambar dengan gcr.io/google_containers/hyperkube:v1.15.2. Perhatikan versi gambar yang harus cocok dengan versi cluster Kubernetes Anda.


 vim /etc/kubernetes/manifests/kube-controller-manager.yaml 

Setelah itu, Anda perlu me-restart kube-controller-manager


 ubectl get pods -A | grep manager kube-system kube-controller-manager-master01-test 1/1 Running 0 5m54s kube-system kube-controller-manager-master02-test 1/1 Running 0 5m54s kube-system kube-controller-manager-master03-test 1/1 Running 9111 103d 

Pod harus diperbarui secara otomatis, tetapi jika karena alasan ini tidak terjadi, Anda dapat membuatnya kembali secara manual, melalui penghapusan.


 kubectl delete pod -n kube-system kube-controller-manager-master01-test kubectl delete pod -n kube-system kube-controller-manager-master02-test kubectl delete pod -n kube-system kube-controller-manager-master03-test 

Periksa apakah semuanya baik-baik saja


 kubectl describe pod -n kube-system kube-controller-manager-master02-test | grep Image: Image: gcr.io/google_containers/hyperkube:v1.15.2 

-



Membuat kelas penyimpanan


Metode satu - jika Anda menggunakan pemberi ketentuan ceph.com/rbd
Buat file yaml dengan deskripsi kelas penyimpanan kami. Juga, semua file yang digunakan di bawah ini dapat diunduh di repositori saya di direktori ceph


 cat <<EOF >./storage-class.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: ceph-rbd provisioner: ceph.com/rbd parameters: monitors: 10.73.88.52:6789, 10.73.88.53:6789, 10.73.88.54:6789 pool: kube adminId: admin adminSecretNamespace: kube-system adminSecretName: ceph-admin-secret userId: kube userSecretNamespace: kube-system userSecretName: ceph-secret imageFormat: "2" imageFeatures: layering EOF 

Dan menanamkannya di cluster kami


 kubectl apply -f storage-class.yaml 

Periksa apakah semuanya baik-baik saja


 kubectl get sc NAME PROVISIONER AGE ceph-rbd ceph.com/rbd 7s 

Metode dua - jika Anda menggunakan kubernetes.io/rbd
Buat kelas penyimpanan


 cat <<EOF >./storage-class-hyperkube.yaml kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: ceph-rbd provisioner: kubernetes.io/rbd allowVolumeExpansion: true parameters: monitors: 10.73.88.52:6789, 10.73.88.53:6789, 10.73.88.54:6789 pool: kube adminId: admin adminSecretNamespace: kube-system adminSecretName: ceph-admin-secret userId: kube userSecretNamespace: kube-system userSecretName: ceph-secret imageFormat: "2" imageFeatures: layering EOF 

Dan menanamkannya di cluster kami


 kubectl apply -f storage-class-hyperkube.yaml storageclass.storage.k8s.io/ceph-rbd created 

Periksa apakah semuanya baik-baik saja


 kubectl get sc NAME PROVISIONER AGE ceph-rbd kubernetes.io/rbd 107s 


Tes ligamen Kubernetes + ceph


Sebelum menguji ceph + kubernetes, Anda harus menginstal paket ceph-common pada SETIAP workcode cluster.


 apt install curl apt-transport-https -y curl https://mirror.croit.io/keys/release.gpg > /usr/share/keyrings/croit-signing-key.gpg echo 'deb [signed-by=/usr/share/keyrings/croit-signing-key.gpg] https://mirror.croit.io/debian-mimic/ stretch main' > /etc/apt/sources.list.d/croit-ceph.list apt update apt install ceph-common 

Buat file yaml, PersistentVolumeClaim


 cat <<EOF >./claim.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: claim1 spec: accessModes: - ReadWriteOnce storageClassName: ceph-rbd resources: requests: storage: 1Gi EOF 

Bunuh dia


 kubectl apply -f claim.yaml 

Periksa apakah PersistentVolumeClaim dibuat.


 bectl get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE claim1 Bound pvc-d1e47825-289c-4201-acb8-033e62a3fe81 1Gi RWO ceph-rbd 44m 

Dan juga secara otomatis membuat PersistentVolume.


 kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-d1e47825-289c-4201-acb8-033e62a3fe81 1Gi RWO Delete Bound default/claim1 ceph-rbd 37m 

Mari kita buat satu test pod di mana kita memasukkan pvc yang dibuat di direktori / mnt. Jalankan file ini /mnt/test.txt dengan teks "Hello World!"


 cat <<EOF >./create-file-pod.yaml kind: Pod apiVersion: v1 metadata: name: create-file-pod spec: containers: - name: test-pod image: gcr.io/google_containers/busybox:1.24 command: - "/bin/sh" args: - "-c" - "echo Hello world! > /mnt/test.txt && exit 0 || exit 1" volumeMounts: - name: pvc mountPath: "/mnt" restartPolicy: "Never" volumes: - name: pvc persistentVolumeClaim: claimName: claim1 EOF 

Kami akan membunuhnya dan memverifikasi bahwa ia telah menyelesaikan tugasnya


 kubectl apply -f create-file-pod.yaml kubectl get pods -w 

Mari kita tunggu statusnya


 create-file-pod 0/1 Completed 0 16s 

Mari kita buat yang lain, hubungkan volume kita ke sana tetapi sudah di / mnt / test, dan setelah itu pastikan bahwa file yang dibuat oleh volume pertama sudah ada.


 cat <<EOF >./test-pod.yaml kind: Pod apiVersion: v1 metadata: name: test-pod spec: containers: - name: test-pod image: gcr.io/google_containers/busybox:1.24 command: - "/bin/sh" args: - "-c" - "sleep 600" volumeMounts: - name: pvc mountPath: "/mnt/test" restartPolicy: "Never" volumes: - name: pvc persistentVolumeClaim: claimName: claim1 EOF 

Jalankan kubectl dapatkan po -w dan tunggu sampai pod berjalan
Setelah itu, mari kita masuki dan periksa apakah volumenya terkoneksi dan file kita di direktori / mnt / test


 kubectl exec test-pod -ti sh cat /mnt/test/test.txt Helo world! 

Terima kasih sudah membaca sampai akhir. Maaf atas keterlambatan posting.
Saya siap menjawab semua pertanyaan dalam pesan pribadi atau di jejaring sosial yang ditunjukkan pada profil saya.
Dalam publikasi kecil berikutnya saya akan memberi tahu Anda cara menggunakan penyimpanan S3 berdasarkan ceph cluster yang dibuat, dan kemudian sesuai dengan rencana dari publikasi pertama.



Bahan yang digunakan untuk publikasi


Source: https://habr.com/ru/post/id465399/


All Articles