Úvod
Redis je populární databáze NoSQL a úložiště dat v paměti podporující více abstraktních datových struktur. Patří mezi ně řetězce, seznamy, hash, sady, proudy atd. Redis poskytuje syntaxi pro přístup k proměnným datovým strukturám, což umožňuje více procesům je číst a zapisovat sdíleným způsobem.
Redis Cluster je sada instancí Redis, která automaticky rozdělí data mezi uzly. Použití clusteru dává uživatelům možnost rozdělit své datové sady mezi uzly a udržovat databázi v chodu, i když některé uzly selžou.
Tento kurz vám ukáže, jak nasadit Redis Cluster na Kubernetes pomocí ConfigMap a Helm.
Předpoklady
- Cluster Kubernetes sestávající ze dvou nebo více uzlů
- Nainstalován Helm 3
- nainstalován kubectl 1.14 nebo vyšší
Nasazení Redis na Kubernetes s ConfigMap
Následující kroky vysvětlují, jak nakonfigurovat mezipaměť Redis a modul obsahující instanci Redis.
- Pomocí textového editoru vytvořte ConfigMap YAML, do které bude uložena konfigurace Redis.
nano redis-conf.yaml
2. Zadejte konfiguraci Redis v data.redis-config
sekce.
apiVersion: v1
kind: ConfigMap
metadata:
name: test-redis-config
data:
redis-config: |
maxmemory 2mb
maxmemory-policy allkeys-lru
Výše uvedená příkladová konfigurace nastavuje maxmemory
a říká Redis, aby pro datovou sadu použila maximálně 2 MB úložiště. maxmemory-policy
Direktiva definuje proceduru, která se použije při dosažení limitu paměti. allkeys-lru
nejprve odstraní méně nedávno použité (LRU) klíče.
3. Uložte soubor a ukončete.
4. Vytvořte ConfigMap použitím souboru YAML.
kubectl apply -f redis-conf.yaml
Systém potvrdí, že operace byla úspěšná.
5. Vytvořte manifest Redis pod.
nano redis-pod.yaml
6. Zadejte konfiguraci modulu.
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
Ve výše uvedeném příkladu manifest definuje config
svazku a připojí jej na /redis-master
adresář na podu. spec.volumes.items
sekce pak odkryje redis-config
klíč z dříve vytvořené ConfigMap jako redis.conf
soubor.
7. Uložte soubor a ukončete.
8. Použijte manifest pod pomocí kubectl.
kubectl apply -f redis-pod.yaml
Systém potvrdí, že vytvoření modulu bylo úspěšné.
9. Zkontrolujte stav pod.
kubectl get pod
10. Zadejte vytvořený modul pomocí kubectl exec
.
kubectl exec -it redis -- redis-cli
Zobrazí se konzola serveru Redis:
11. Pomocí příkazu PING zkontrolujte, zda je server online.
PING
Pokud server komunikuje s konzolí, vrátí PONG
jako odpověď.
Nasazení Redis na Kubernetes s Helm Chart
Helm poskytuje rychlý způsob nastavení clusteru Redis pomocí předem připraveného Helm diagramu.
1. Přidejte úložiště Helm obsahující graf Redis, který chcete nainstalovat.
helm repo add [repo-name] [repo-address]
Tento článek používá graf Redis dostupný v úložišti Bitnami.
2. Aktualizujte místní úložiště Helm.
helm repo update
3. Použijte helm install
k instalaci grafu. Základní příkaz je následující:
helm install redis-test bitnami/redis
Důležité: Pokud nainstalujete graf na Minikube, není neobvyklé, že pody uvíznou v CrashLoopBackOff
událost z důvodu nesvázaných objemových nároků. Abyste tomu zabránili, použijte --set
a nastavte persistence.storageClass
na nfs-client
pro oba lusky.
Vzhledem k tomu, že Redis je standardně nasazen s neadministrativními oprávněními k svazku, modul Redis nemusí být schopen komunikovat se serverem. Tento problém vyřešíte nastavením volumePermissions
true
.
Poslední helm install
příkaz by měl vypadat takto:
helm install redis-test --set persistence.storageClass=nfs-client,redis.replicas.persistence.storageClass=nfs-client bitnami/redis --set volumePermissions.enabled=true
4. Exportujte heslo Redis jako proměnnou prostředí.
export REDIS_PASSWORD=$(kubectl get secret --namespace default redis-test -o jsonpath="{.data.redis-password}" | base64 --decode)
5. Vytvořte klientský modul Redis, který budete používat pro přístup k databázi.
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
Systém potvrdí vytvoření redis-client
pod.
6. Zadejte klientský modul pomocí kubectl exec
.
kubectl exec --tty -i redis-client --namespace default -- bash
Zobrazí se klientská konzole.
7. Použijte následující redis-cli
příkaz pro přístup k hlavní instanci Redis:
redis-cli -h redis-test-master -a $REDIS_PASSWORD
Zobrazí se konzola hlavní instance.
8. Pro přístup k replikám použijte stejný příkaz, ale změňte cíl.
redis-cli -h redis-test-replicas -a $REDIS_PASSWORD
9. Použijte PING
příkaz k otestování spojení se serverem.
PING
PONG
odpověď potvrzuje, že server naslouchá.