MongoDB dan Kubernetes adalah kombinasi yang hebat, terutama dalam hal kompleksitas. Namun, Percona's MongoDB (PSMDB) menawarkan lebih banyak fleksibilitas untuk database NoSQL, dan dilengkapi juga dengan alat yang efisien untuk produktivitas saat ini; tidak hanya lokal tetapi juga tersedia untuk cloud native.
Tingkat adopsi Kubernetes terus meningkat. Masuk akal bahwa suatu teknologi harus memiliki operator untuk melakukan hal berikut:pembuatan, modifikasi, dan penghapusan item Percona Server untuk lingkungan MongoDB. Operator Kubernetes MongoDB Percona berisi pengaturan k8s yang diperlukan untuk mempertahankan Server Percona yang konsisten untuk instans MongoDB. Sebagai opsi alternatif, Anda dapat membandingkan ini dengan https://github.com/kubedb/mongodb tetapi KubeDB untuk MongoDB memang menawarkan opsi yang sangat terbatas untuk ditawarkan terutama pada sistem tingkat produksi.
Operator Percona Kubernetes yang membanggakan konfigurasinya berbasis dan mengikuti praktik terbaik untuk konfigurasi set replika PSMDB. Yang paling penting, operator untuk MongoDB sendiri memberikan banyak manfaat tetapi menghemat waktu, lingkungan yang konsisten adalah yang paling penting. Di blog ini, kita akan mengambil gambaran tentang bagaimana hal ini bermanfaat terutama di lingkungan kemas.
Apa yang Dapat Ditawarkan Operator Ini?
Operator ini berguna untuk PSMDB menggunakan set replika. Artinya, arsitektur desain database Anda harus sesuai dengan diagram berikut di bawah
Gambar dipinjam dari Tinjauan Desain Dokumentasi PerconaGambar dipinjam dari Tinjauan Desain Dokumentasi Percona
Saat ini, platform yang didukung yang tersedia untuk operator ini adalah:
- OpenShift 3.11
- OpenShift 4.5
- Google Kubernetes Engine (GKE) 1,15 - 1,17
- Layanan Kontainer Elastis Amazon untuk Kubernetes (EKS) 1.15
- Minikube 1.10
- VMWare Tanzu
Platform Kubernetes lain mungkin juga berfungsi tetapi belum diuji.
Batas Sumber Daya
Kluster yang menjalankan platform yang didukung secara resmi berisi setidaknya tiga Node, dengan sumber daya berikut:
- 2GB RAM
- 2 CPU thread per Node untuk penyediaan Pod
- setidaknya 60 GB penyimpanan yang tersedia untuk penyediaan Volume Pribadi
Keamanan Dan/Atau Kendala Pembatasan
Kubernetes berfungsi seperti saat membuat Pod, setiap Pod memiliki alamat IP di jaringan virtual internal cluster. Membuat atau menghancurkan Pod adalah proses yang dinamis, jadi tidak disarankan untuk mengikat Pod Anda ke alamat IP tertentu yang ditetapkan untuk komunikasi antar Pod. Hal ini dapat menyebabkan masalah karena berbagai hal berubah dari waktu ke waktu sebagai akibat dari penskalaan cluster, kesalahan yang tidak disengaja, pemadaman atau bencana dc, atau pemeliharaan berkala, dll. Dalam hal ini, operator sangat menyarankan Anda untuk terhubung ke Server Percona untuk MongoDB melalui internal Kubernetes Nama DNS di URI (mis. mongodb+srv://userAdmin:[email protected]
Operator Kubernetes PSMDB ini juga menggunakan affinity/anti-affinity yang memberikan batasan agar pod Anda dapat dijadwalkan untuk dijalankan atau dimulai pada node tertentu. Affinity mendefinisikan pod yang memenuhi syarat yang dapat dijadwalkan pada node yang sudah memiliki pod dengan label tertentu. Anti-afinitas mendefinisikan pod yang tidak memenuhi syarat. Pendekatan ini mengurangi biaya dengan memastikan beberapa pod dengan pertukaran data intensif menempati zona ketersediaan yang sama atau bahkan node yang sama atau, sebaliknya, menyebarkan pod pada node yang berbeda atau bahkan zona ketersediaan yang berbeda untuk ketersediaan tinggi dan tujuan penyeimbangan. Meskipun operator menganjurkan Anda untuk mengatur afinitas/anti-afinitas, namun ini memiliki batasan saat menggunakan Minikube.
Saat menggunakan Minikube, Minikube memiliki batasan khusus platform berikut. Minikube tidak mendukung konfigurasi cluster multi-node karena sifatnya yang lokal, yang bertentangan dengan persyaratan afinitas default Operator. Untuk mengaturnya, instruksi Instal Server Percona untuk MongoDB di Minikube menyertakan langkah tambahan yang menonaktifkan persyaratan memiliki tidak kurang dari tiga Node.
Di bagian berikut dari blog ini, kita akan menyiapkan Operator Kubernetes PMSDB menggunakan Minikube dan kita akan mengikuti set anti-afinitas untuk membuatnya bekerja. Apa perbedaannya dengan menggunakan anti-afinitas, jika Anda mengubah AntiAffinity, Anda meningkatkan risiko untuk ketersediaan cluster. Katakanlah, jika tujuan utama Anda menyebarkan PSMDB Anda ke lingkungan kemas adalah untuk menyebarkan dan memiliki ketersediaan yang lebih tinggi namun skalabilitas, maka ini mungkin mengalahkan tujuannya. Namun menggunakan Minikube terutama di tempat dan untuk menguji pengaturan PSMDB Anda dapat dilakukan tetapi untuk beban kerja produksi Anda pasti ingin menjalankan node pada host yang terpisah, atau dalam pengaturan lingkungan sedemikian rupa sehingga kegagalan beberapa pod secara bersamaan tidak mungkin terjadi.
Data Dalam Transit/Data Tidak Aktif
Untuk keamanan data dengan PSMDB, operator menawarkan TLS/SSL untuk transit, kemudian juga menawarkan enkripsi saat data tidak aktif. Untuk in transit, opsi yang dapat Anda pilih adalah menggunakan cert-manager, atau membuat sertifikat Anda sendiri secara manual. Tentu saja, Anda secara opsional dapat menggunakan PSMDB tanpa TLS untuk operator ini. Lihat dokumentasi mereka terkait penggunaan TLS.
Untuk data saat istirahat, diperlukan perubahan dalam Operator Kubernetes PSMDB mereka setelah Anda mengunduh cabang github, lalu menerapkan perubahan pada file deploy/cr.yaml. Untuk mengaktifkan ini, lakukan hal berikut seperti yang disarankan oleh dokumentasi:
- Kunci security.enableEncryption harus disetel ke true (nilai default).
- Kunci security.encryptionCipherMode harus menentukan mode sandi yang tepat untuk dekripsi. Nilai dapat berupa salah satu dari dua varian berikut:
- AES256-CBC (default untuk Operator dan Server Percona untuk MongoDB)
- AES256-GCM
security.encryptionKeySecret should specify a secret object with the encryption key:
mongod:
...
security:
...
encryptionKeySecret: my-cluster-name-mongodb-encryption-key
Rahasia kunci enkripsi akan dibuat secara otomatis jika tidak ada. Jika Anda ingin membuatnya sendiri, perhatikan bahwa kuncinya harus berupa string 32 karakter yang dikodekan di base64.
Menyimpan Informasi Sensitif
Operator Kubernetes PSMDB menggunakan Rahasia Kubernetes untuk menyimpan dan mengelola informasi sensitif. Rahasia Kubernetes memungkinkan Anda menyimpan dan mengelola informasi sensitif, seperti kata sandi, token OAuth, dan kunci ssh. Menyimpan informasi rahasia dalam Rahasia lebih aman dan lebih fleksibel daripada meletakkannya secara verbatim dalam definisi pod atau dalam gambar kontainer.
Untuk operator ini, pengguna dan kata sandi yang dibuat untuk pod Anda disimpan dan dapat diperoleh menggunakan kubectl get secret
Untuk blog ini, contoh penyiapan saya mencapai yang berikut dengan hasil base64 yang didekodekan.
kubectl get secrets mongodb-cluster-s9s-secrets -o yaml | egrep '^\s+MONGODB.*'|cut -d ':' -f2 | xargs -I% sh -c "echo % | base64 -d; echo "
WrDry6bexkCPOY5iQ
backup
gAWBKkmIQsovnImuKyl
clusterAdmin
qHskMMseNqU8DGbo4We
clusterMonitor
TQBEV7rtE15quFl5
userAdmin
Setiap entri untuk pencadangan, pengguna cluster, pengguna monitor cluster, dan pengguna untuk penggunaan administratif ditampilkan berdasarkan hasil di atas.
Hal lain juga adalah, Operator Kubernetes PSMDB menyimpan juga akses AWS S3 dan kunci rahasia melalui Rahasia Kubernetes.
Cadangan
Operator ini mendukung pencadangan yang merupakan fitur yang sangat bagus. Ini mendukung pencadangan sesuai permintaan (manual) dan pencadangan terjadwal dan menggunakan alat pencadangan Percona Backup untuk MongoDB. Perhatikan bahwa cadangan hanya disimpan di AWS S3 atau penyimpanan apa pun yang kompatibel dengan S3.
Pencadangan yang dijadwalkan dapat ditentukan melalui file deploy/cr.yaml, sedangkan pencadangan manual dapat dilakukan kapan saja kapan pun diperlukan. Untuk akses S3 dan kunci rahasia, itu harus didefinisikan dalam file deploy/backup-s3.yaml file dan menggunakan Rahasia Kubernetes untuk menyimpan informasi berikut seperti yang kami sebutkan sebelumnya.
Semua tindakan yang didukung untuk Operator Kubernetes PSMDB ini adalah sebagai berikut:
- Membuat pencadangan terjadwal
- Membuat cadangan sesuai permintaan
- Pulihkan cluster dari cadangan yang disimpan sebelumnya
- Hapus cadangan yang tidak diperlukan
Menggunakan Operator Kubernetes PSMDB Dengan Minikube
Di bagian ini, kita akan membuat penyiapan sederhana menggunakan Kubernetes dengan Minikube, yang dapat Anda gunakan secara lokal tanpa memerlukan penyedia cloud. Untuk penyiapan cloud-native terutama untuk lingkungan perusahaan dan kelas produksi yang lebih banyak, Anda dapat memeriksa dokumentasinya.
Sebelum kita melanjutkan langkah-langkahnya, perlu diingat bahwa seperti yang disebutkan di atas, ada batasan yang diketahui dengan Minikube karena tidak mendukung konfigurasi cluster multi-node yang bertabrakan dengan persyaratan afinitas default dari operator. Kami akan menyebutkan ini tentang cara menanganinya dalam langkah-langkah berikut di bawah ini.
Untuk blog ini, host OS tempat Minikube kita akan diinstal ada di Ubuntu 18.04 (Bionic Beaver).
Mari Instal Minikube
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
$ sudo dpkg -i minikube_latest_amd64.deb
Secara opsional, Anda dapat mengikuti langkah-langkah di sini jika Anda menggunakan sistem Linux yang berbeda.
Mari tambahkan kunci yang diperlukan untuk mengautentikasi paket Kubernetes dan menyiapkan repositori
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ cat <<eof > /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
deb https://apt.kubernetes.io/ kubernetes-yakkety main
eof
Sekarang mari kita instal paket yang diperlukan
$ sudo apt-get update
$ sudo apt-get install kubelet kubeadm kubectl
Mulai Minikube yang mendefinisikan memori, jumlah CPU, dan CIDR yang akan ditetapkan oleh node saya,
$ minikube start --memory=4096 --cpus=3 --extra-config=kubeadm.pod-network-cidr=192.168.0.0/16
Contoh hasil menunjukkan seperti,
minikube v1.14.2 on Ubuntu 18.04
Automatically selected the docker driver
docker is currently using the aufs storage driver, consider switching to overlay2 for better performance
Starting control plane node minikube in cluster minikube
Creating docker container (CPUs=3, Memory=4096MB) ...
Preparing Kubernetes v1.19.2 on Docker 19.03.8 ...
kubeadm.pod-network-cidr=192.168.0.0/16
> kubeadm.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
> kubectl.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
> kubelet.sha256: 65 B / 65 B [--------------------------] 100.00% ? p/s 0s
> kubeadm: 37.30 MiB / 37.30 MiB [---------------] 100.00% 1.46 MiB p/s 26s
> kubectl: 41.01 MiB / 41.01 MiB [---------------] 100.00% 1.37 MiB p/s 30s
> kubelet: 104.88 MiB / 104.88 MiB [------------] 100.00% 1.53 MiB p/s 1m9s
Verifying Kubernetes components...
Enabled addons: default-storageclass, storage-provisioner
Done! kubectl is now configured to use "minikube" by default
Seperti yang Anda perhatikan, itu juga menginstal alat utilitas untuk mengelola dan mengelola node atau pod Anda.
Sekarang, mari kita periksa node dan pod dengan menjalankan perintah berikut,
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-f9fd979d6-gwngd 1/1 Running 0 45s
kube-system etcd-minikube 0/1 Running 0 53s
kube-system kube-apiserver-minikube 1/1 Running 0 53s
kube-system kube-controller-manager-minikube 0/1 Running 0 53s
kube-system kube-proxy-m25hm 1/1 Running 0 45s
kube-system kube-scheduler-minikube 0/1 Running 0 53s
kube-system storage-provisioner 1/1 Running 1 57s
$ kubectl get nodes -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready master 2d4h v1.19.2 192.168.49.2 <none> Ubuntu 20.04 LTS 4.15.0-20-generic docker://19.3.8
Sekarang, unduh Operator Kubernetes PSMDB,
$ git clone -b v1.5.0 https://github.com/percona/percona-server-mongodb-operator
$ cd percona-server-mongodb-operator
Kami sekarang siap untuk men-deploy operator,
$ kubectl apply -f deploy/bundle.yaml
Seperti yang disebutkan sebelumnya, keterbatasan Minikube memerlukan penyesuaian agar semuanya berjalan seperti yang diharapkan. Mari lakukan hal berikut:
- Tergantung pada kapasitas perangkat keras Anda saat ini, Anda dapat mengubah hal berikut seperti yang disarankan oleh dokumentasi. Karena minikube berjalan secara lokal, file deploy/cr.yaml default harus diedit untuk mengadaptasi Operator untuk instalasi lokal dengan sumber daya yang terbatas. Ubah kunci berikut di bagian replsets:
- komentari kunci resources.requests.memory dan resources.requests.cpu (ini akan sesuai dengan batasan default Minikube Operator)
- setel kunci affinity.antiAffinityTopologyKey ke "none" (Operator tidak akan dapat menyebarkan cluster pada beberapa node)
- Selain itu, alihkan kunci allowUnsafeConfigurations ke true (opsi ini menonaktifkan kontrol Operator atas konfigurasi cluster, sehingga memungkinkan untuk menerapkan Server Percona untuk MongoDB sebagai cluster satu node).
Sekarang, kami siap menerapkan perubahan yang dibuat ke file deploy/cr.yaml.
$ kubectl apply -f deploy/cr.yaml
Pada titik ini, Anda mungkin dapat memeriksa status pod dan Anda akan melihat kemajuan berikut seperti di bawah ini,
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
percona-server-mongodb-operator-588db759d-qjv29 0/1 ContainerCreating 0 15s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 0/2 Init:0/1 0 4s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 34s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 0/2 PodInitializing 0 119s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 2m29s
kubectl get pods
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 0/2 PodInitializing 0 2m1s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 2m31s
kubectl get pods
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 2/2 Running 0 33m
mongodb-cluster-s9s-rs0-1 2/2 Running 1 31m
mongodb-cluster-s9s-rs0-2 2/2 Running 0 30m
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 33m
Sekarang kita hampir sampai. Kami akan mendapatkan rahasia yang dihasilkan oleh operator sehingga kami dapat terhubung ke pod PSMDB yang dibuat. Untuk melakukan itu, Anda perlu membuat daftar objek rahasia terlebih dahulu, lalu mendapatkan nilai yaml sehingga Anda bisa mendapatkan kombinasi pengguna/kata sandi. Di sisi lain, Anda dapat menggunakan perintah gabungan di bawah ini dengan format username:password. Lihat contoh di bawah ini,
$ kubectl get secrets
NAME TYPE DATA AGE
default-token-c8frr kubernetes.io/service-account-token 3 2d4h
internal-mongodb-cluster-s9s-users Opaque 8 2d4h
mongodb-cluster-s9s-mongodb-encryption-key Opaque 1 2d4h
mongodb-cluster-s9s-mongodb-keyfile Opaque 1 2d4h
mongodb-cluster-s9s-secrets Opaque 8 2d4h
percona-server-mongodb-operator-token-rbzbc kubernetes.io/service-account-token 3 2d4h
$ kubectl get secrets mongodb-cluster-s9s-secrets -o yaml | egrep '^\s+MONGODB.*'|cut -d ':' -f2 | xargs -I% sh -c "echo % | base64 -d; echo" |sed 'N; s/\(.*\)\n\(.*\)/
\2:\1/'
backup:WrDry6bexkCPOY5iQ
clusterAdmin:gAWBKkmIQsovnImuKyl
clusterMonitor:qHskMMseNqU8DGbo4We
userAdmin:TQBEV7rtE15quFl5
Sekarang, Anda dapat mendasarkan nama pengguna:format kata sandi dan menyimpannya di suatu tempat dengan aman.
Karena kita tidak dapat langsung terhubung ke Server Percona untuk node MongoDB, kita perlu membuat pod baru yang memiliki klien mongodb,
$ kubectl run -i --rm --tty percona-client --image=percona/percona-server-mongodb:4.2.8-8 --restart=Never -- bash -il
Terakhir, kami sekarang siap untuk terhubung ke node PSMDB kami sekarang,
bash-4.2$ mongo "mongodb+srv://userAdmin:[email protected]/admin?replicaSet=rs0&ssl=false"
Atau, Anda dapat terhubung ke masing-masing node dan memeriksa kesehatannya. Misalnya,
bash-4.2$ mongo --host "mongodb://clusterAdmin:[email protected]:27017/?authSource=admin&ssl=false"
Percona Server for MongoDB shell version v4.2.8-8
connecting to: mongodb://mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb&ssl=false
Implicit session: session { "id" : UUID("9b29b9b3-4f82-438d-9857-eff145be0ee6") }
Percona Server for MongoDB server version: v4.2.8-8
Welcome to the Percona Server for MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
https://www.percona.com/doc/percona-server-for-mongodb
Questions? Try the support group
https://www.percona.com/forums/questions-discussions/percona-server-for-mongodb
2020-11-09T07:41:59.172+0000 I STORAGE [main] In File::open(), ::open for '/home/mongodb/.mongorc.js' failed with No such file or directory
Server has startup warnings:
2020-11-09T06:41:16.838+0000 I CONTROL [initandlisten] ** WARNING: While invalid X509 certificates may be used to
2020-11-09T06:41:16.838+0000 I CONTROL [initandlisten] ** connect to this server, they will not be considered
2020-11-09T06:41:16.838+0000 I CONTROL [initandlisten] ** permissible for authentication.
2020-11-09T06:41:16.838+0000 I CONTROL [initandlisten]
rs0:SECONDARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2020-11-09T07:42:04.984Z"),
"myState" : 2,
"term" : NumberLong(5),
"syncingTo" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"syncSourceHost" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"syncSourceId" : 0,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"lastCommittedWallTime" : ISODate("2020-11-09T07:42:03.395Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"readConcernMajorityWallTime" : ISODate("2020-11-09T07:42:03.395Z"),
"appliedOpTime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"durableOpTime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"lastAppliedWallTime" : ISODate("2020-11-09T07:42:03.395Z"),
"lastDurableWallTime" : ISODate("2020-11-09T07:42:03.395Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1604907678, 3),
"lastStableCheckpointTimestamp" : Timestamp(1604907678, 3),
"members" : [
{
"_id" : 0,
"name" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3632,
"optime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"optimeDurable" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"optimeDate" : ISODate("2020-11-09T07:42:03Z"),
"optimeDurableDate" : ISODate("2020-11-09T07:42:03Z"),
"lastHeartbeat" : ISODate("2020-11-09T07:42:04.246Z"),
"lastHeartbeatRecv" : ISODate("2020-11-09T07:42:03.162Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1604904092, 1),
"electionDate" : ISODate("2020-11-09T06:41:32Z"),
"configVersion" : 3
},
{
"_id" : 1,
"name" : "mongodb-cluster-s9s-rs0-1.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3632,
"optime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"optimeDurable" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"optimeDate" : ISODate("2020-11-09T07:42:03Z"),
"optimeDurableDate" : ISODate("2020-11-09T07:42:03Z"),
"lastHeartbeat" : ISODate("2020-11-09T07:42:04.244Z"),
"lastHeartbeatRecv" : ISODate("2020-11-09T07:42:04.752Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"syncSourceHost" : "mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"syncSourceId" : 2,
"infoMessage" : "",
"configVersion" : 3
},
{
"_id" : 2,
"name" : "mongodb-cluster-s9s-rs0-2.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3651,
"optime" : {
"ts" : Timestamp(1604907723, 4),
"t" : NumberLong(5)
},
"optimeDate" : ISODate("2020-11-09T07:42:03Z"),
"syncingTo" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"syncSourceHost" : "mongodb-cluster-s9s-rs0-0.mongodb-cluster-s9s-rs0.default.svc.cluster.local:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 3,
"self" : true,
"lastHeartbeatMessage" : ""
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1604907723, 4),
"signature" : {
"hash" : BinData(0,"HYC0i49c+kYdC9M8KMHgBdQW1ac="),
"keyId" : NumberLong("6892206918371115011")
}
},
"operationTime" : Timestamp(1604907723, 4)
}
Karena operator mengelola konsistensi cluster, setiap kali kegagalan atau katakanlah sebuah pod telah dihapus. Operator akan secara otomatis memulai yang baru. Misalnya,
$ kubectl get po
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 2/2 Running 0 2d5h
mongodb-cluster-s9s-rs0-1 2/2 Running 0 2d5h
mongodb-cluster-s9s-rs0-2 2/2 Running 0 2d5h
percona-client 1/1 Running 0 3m7s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 2d5h
$ kubectl delete po mongodb-cluster-s9s-rs0-1
pod "mongodb-cluster-s9s-rs0-1" deleted
$ kubectl get po
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 2/2 Running 0 2d5h
mongodb-cluster-s9s-rs0-1 0/2 Init:0/1 0 3s
mongodb-cluster-s9s-rs0-2 2/2 Running 0 2d5h
percona-client 1/1 Running 0 3m29s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 2d5h
$ kubectl get po
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 2/2 Running 0 2d5h
mongodb-cluster-s9s-rs0-1 0/2 PodInitializing 0 10s
mongodb-cluster-s9s-rs0-2 2/2 Running 0 2d5h
percona-client 1/1 Running 0 3m36s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 2d5h
$ kubectl get po
NAME READY STATUS RESTARTS AGE
mongodb-cluster-s9s-rs0-0 2/2 Running 0 2d5h
mongodb-cluster-s9s-rs0-1 2/2 Running 0 26s
mongodb-cluster-s9s-rs0-2 2/2 Running 0 2d5h
percona-client 1/1 Running 0 3m52s
percona-server-mongodb-operator-588db759d-qjv29 1/1 Running 0 2d5h
Sekarang kita sudah siap. Tentu saja, Anda mungkin perlu mengekspos port sehingga Anda mungkin harus berurusan dengan penyesuaian di deploy/cr.yaml. Anda dapat merujuk ke sini untuk mengatasinya.
Kesimpulan
Operator Percona Kubernetes untuk PSMDB dapat menjadi solusi lengkap Anda terutama untuk lingkungan kemas untuk Server Percona Anda untuk pengaturan MongoDB. Ini hampir merupakan solusi lengkap karena memiliki redundansi bawaan untuk set replika Anda, namun operator mendukung pencadangan, skalabilitas, ketersediaan tinggi, dan keamanan.