Pendahuluan
Redis adalah database NoSQL yang populer dan penyimpanan data dalam memori yang mendukung banyak struktur data abstrak. Ini termasuk string, daftar, hash, set, stream, dll. Redis menyediakan sintaks untuk mengakses struktur data yang dapat diubah, memungkinkan beberapa proses untuk membaca dan menulisnya dengan cara bersama.
Redis Cluster adalah kumpulan instance Redis yang secara otomatis melakukan sharding data di seluruh node. Menggunakan cluster memberi pengguna kemampuan untuk membagi set data mereka di antara node dan tetap menjalankan database bahkan ketika beberapa node gagal.
Tutorial ini akan menunjukkan cara men-deploy Redis Cluster di Kubernetes menggunakan ConfigMap dan Helm.
Prasyarat
- Kluster Kubernetes yang terdiri dari dua atau lebih node
- Helm 3 terpasang
- kubectl 1.14 atau lebih sudah terpasang
Menyebarkan Redis di Kubernetes dengan ConfigMap
Langkah-langkah berikut menjelaskan cara mengonfigurasi cache Redis dan pod yang berisi instance Redis.
- Menggunakan editor teks, buat ConfigMap YAML yang akan menyimpan konfigurasi Redis.
nano redis-conf.yaml
2. Tentukan konfigurasi Redis Anda di data.redis-config
bagian.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
Contoh konfigurasi di atas menyetel maxmemory
direktif dan memberi tahu Redis untuk menggunakan penyimpanan maksimum 2 MB untuk kumpulan data. maxmemory-policy
direktif mendefinisikan prosedur yang akan diterapkan ketika batas memori tercapai. allkeys-lru
pertama-tama hapus kunci yang jarang digunakan (LRU).
3. Simpan file dan keluar.
4. Buat ConfigMap dengan menerapkan file YAML.
kubectl apply -f redis-conf.yaml
Sistem mengonfirmasi bahwa operasi berhasil.
5. Buat manifes pod Redis.
nano redis-pod.yaml
6. Tentukan konfigurasi pod Anda.
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis:5.0.4
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
ports:
- containerPort: 6379
resources:
limits:
cpu: "0.1"
volumeMounts:
- mountPath: /redis-master-data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: test-redis-config
items:
- key: redis-config
path: redis.conf
Dalam contoh di atas, manifes mendefinisikan config
volume dan pasang di /redis-master
direktori pada pod. spec.volumes.items
bagian kemudian memperlihatkan redis-config
kunci dari ConfigMap yang dibuat sebelumnya sebagai redis.conf
berkas.
7. Simpan file dan keluar.
8. Terapkan manifes pod dengan kubectl.
kubectl apply -f redis-pod.yaml
Sistem mengonfirmasi bahwa pembuatan pod berhasil.
9. Periksa status pod.
kubectl get pod
10. Masukkan pod yang dibuat dengan kubectl exec
.
kubectl exec -it redis -- redis-cli
Konsol server Redis muncul:
11. Gunakan perintah PING untuk memeriksa apakah server online.
PING
Jika server berkomunikasi dengan konsol, ia mengembalikan PONG
sebagai jawabannya.
Menyebarkan Redis di Kubernetes dengan Diagram Helm
Helm menyediakan cara cepat untuk menyiapkan cluster Redis menggunakan bagan Helm yang sudah dibuat sebelumnya.
1. Tambahkan repositori Helm yang berisi bagan Redis yang ingin Anda instal.
helm repo add [repo-name] [repo-address]
Artikel ini menggunakan bagan Redis yang tersedia di repositori Bitnami.
2. Perbarui repositori Helm lokal.
helm repo update
3. Gunakan helm install
untuk menginstal grafik. Perintah dasarnya adalah sebagai berikut:
helm install redis-test bitnami/redis
Penting: Jika Anda memasang grafik di Minikube, bukan hal yang aneh jika pod terjebak dalam CrashLoopBackOff
acara karena klaim volume yang tidak terikat. Untuk mencegah hal ini, gunakan --set
opsi dan atur persistence.storageClass
ke nfs-client
untuk kedua polong.
Karena Redis disebarkan dengan izin volume non-administratif secara default, pod Redis mungkin tidak dapat berkomunikasi dengan server. Selesaikan masalah ini dengan menyetel volumePermissions
ke true
.
helm install
terakhir perintah akan terlihat seperti ini:
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4. Ekspor sandi Redis sebagai variabel lingkungan.
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5. Buat pod klien Redis yang akan Anda gunakan untuk mengakses database.
kubectl run --namespace default redis-client --restart='Never' --env REDIS_PASSWORD=$REDIS_PASSWORD --image docker.io/bitnami/redis:6.2.5-debian-10-r63 --command -- sleep infinity
Sistem mengonfirmasi pembuatan redis-client
pod.
6. Masukkan pod klien dengan kubectl exec
.
kubectl exec --tty -i redis-client --namespace default -- bash
Konsol klien muncul.
7. Gunakan redis-cli
berikut ini perintah untuk mengakses instance master Redis:
redis-cli -h redis-test-master -a $REDIS_PASSWORD
Konsol untuk instance master ditampilkan.
8. Untuk mengakses replika, gunakan perintah yang sama, tetapi ubah targetnya.
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. Gunakan PING
perintah untuk menguji koneksi dengan server.
PING
PONG
tanggapan mengonfirmasi bahwa server mendengarkan.