「REDIS」- 服务 | 部署 | on Kubernetes

Redis 6.2.7 | with Helm Chart

Deploying a stateless Go app with Redis on Kubernetes | CalliCoder
https://rancher.com/blog/2019/deploying-redis-cluster/

charts/bitnami/redis at master · bitnami/charts

# helm repo add bitnami https://charts.bitnami.com/bitnami
# helm repo update

# helm pull bitnami/redis                                                       # redis-16.13.2.tgz, Redis 6.2.7
# helm show values ./redis-16.13.2.tgz > redis-16.13.2.helm-values.yaml
...(1)修改存储类:global.storageClass
...(2)修改运行模式:默认 replication 模式,我们使用 standalone 模式(测试目的);

# helm --namespace infra-database                                              \
    install redis bitnami/redis -f redis-16.13.2.helm-values.yaml              \
    --create-namespace

# helm --namespace infra-database                                              \
    upgrade redis bitnami/redis -f redis-16.13.2.helm-values.yaml

// ---------------------------------------------------------------------------- // 当执行成功后,产生如下输出:
...
Redis® can be accessed via port 6379 on the following DNS name from within your cluster:

    redis-master.infra-database.svc.cluster.local



To get your password run:

    export REDIS_PASSWORD=$(kubectl get secret --namespace infra-database redis -o jsonpath="{.data.redis-password}" | base64 -d)

To connect to your Redis® server:

1. Run a Redis® pod that you can use as a client:

   kubectl run --namespace infra-database redis-client --restart='Never'  --env REDIS_PASSWORD=$REDIS_PASSWORD  --image docker.io/bitnami/redis:6.2.7-debian-11-r11 --command -- sleep infinity

   Use the following command to attach to the pod:

   kubectl exec --tty -i redis-client \
   --namespace infra-database -- bash

2. Connect using the Redis® CLI:
   REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h redis-master

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace infra-database svc/redis-master 6379:6379 &
    REDISCLI_AUTH="$REDIS_PASSWORD" redis-cli -h 127.0.0.1 -p 6379

通过 Manifest 部署

---
apiVersion: apps/v1  # API version
kind: Deployment
metadata:
  name: redis-master # Unique name for the deployment
  labels:
    app: redis       # Labels to be applied to this deployment
spec:
  selector:
    matchLabels:     # This deployment applies to the Pods matching these labels
      app: redis
      role: master
      tier: backend
  replicas: 1        # Run a single pod in the deployment
  template:          # Template for the pods that will be created by this deployment
    metadata:
      labels:        # Labels to be applied to the Pods in this deployment
        app: redis
        role: master
        tier: backend
    spec:            # Spec for the container which will be run inside the Pod.
      
      containers:
      - name: master
        image: redis
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379
---        
apiVersion: v1
kind: Service        # Type of Kubernetes resource
metadata:
  name: redis-master # Name of the Kubernetes resource
  labels:            # Labels that will be applied to this resource
    app: redis
    role: master
    tier: backend
spec:
  ports:
  - port: 6379       # Map incoming connections on port 6379 to the target port 6379 of the Pod
    targetPort: 6379
  selector:          # Map any Pod with the specified labels to this service
    app: redis
    role: master
    tier: backend

kubectl apply -f ./

连接集群

kubectl create deployment redis-cli –image=redis:7.4.0 — sleep infinity

kubectl create deployment redis-cli –image=redis:5 — sleep infinity