如何使用k8s安装redis呢

在Kubernetes (k8s) 上安装Redis

在Kubernetes上安装Redis有几种方法,下面我将介绍两种常见的方式:使用StatefulSet直接部署和使用Helm chart部署。

一、安装redis

1.1 拉去ARM镜像(7.4.2)

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_redis:latest

1.2 拉去x86镜像(8.0.1)版本

bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest

方法一:使用StatefulSet部署Redis

首先创建一个Redis的配置文件ConfigMap:

yaml 复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
data:
  redis.conf: |
    bind 0.0.0.0
    protected-mode no
    port 6379
    tcp-backlog 511
    timeout 0
    tcp-keepalive 300
    daemonize no
    supervised no
    pidfile /var/run/redis_6379.pid
    loglevel notice
    logfile ""
    databases 16
    always-show-logo yes
    save 900 1
    save 300 10
    save 60 10000
    stop-writes-on-bgsave-error yes
    rdbcompression yes
    rdbchecksum yes
    dbfilename dump.rdb
    dir /data

创建Redis的StatefulSet和Service:

yaml 复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
spec:
  serviceName: redis
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest
        ports:
        - containerPort: 6379
          name: redis
        volumeMounts:
        - name: redis-data
          mountPath: /data
        - name: redis-config
          mountPath: /usr/local/etc/redis/redis.conf
          subPath: redis.conf
      volumes:
      - name: redis-config
        configMap:
          name: redis-config
          items:
          - key: redis.conf
            path: redis.conf
  volumeClaimTemplates:
  - metadata:
      name: redis-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: redis
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
bash 复制代码
kubectl apply -f redis-configmap.yaml
kubectl apply -f redis-statefulset.yaml

方法二:使用Helm安装Redis

如果你已经安装了Helm,这是更简单的方法:

添加Bitnami仓库(包含Redis chart):

bash 复制代码
helm repo add bitnami https://charts.bitnami.com/bitnami

安装Redis:

bash 复制代码
helm install redis registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest

获取密码(如果启用了认证):

bash 复制代码
export REDIS_PASSWORD=$(kubectl get secret --namespace default my-redis -o jsonpath="{.data.redis-password}" | base64 --decode)

连接Redis:

bash 复制代码
kubectl run --namespace default edis-client --rm --tty -i --restart='Never' \
    --env REDIS_PASSWORD=$REDIS_PASSWORD \
    --image registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest -- bash
redis-cli -h redis-master -a $REDIS_PASSWORD
redis-cli -h redis-replicas -a $REDIS_PASSWORD

验证安装

bash 复制代码
kubectl get pods
kubectl logs <redis-pod-name>

完整版本 redis-deployment-all.yaml

bash 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest
        ports:
        - containerPort: 6379
        env:
        - name: REDIS_PASSWORD
          value: "87vhqEneQ5u8"
        volumeMounts:
        - name: redis-log
          mountPath: /var/log/redis/
        - name: redis-data
          mountPath: /data
        command: ["redis-server", "--appendonly", "yes", "--requirepass", "$(REDIS_PASSWORD)"]
      volumes:
      - name: redis-log
        emptyDir: {}
      - name: redis-data
        emptyDir: {}

---
apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  type: NodePort
  ports:
  - port: 6379
    targetPort: 6379
    nodePort: 30379
  selector:
    app: redis

应用配置:

bash 复制代码
kubectl apply -f  redis-deployment-all.yaml

第三种:

完整的 Redis 部署配置(包含 PV 和 PVC)

首先创建 PersistentVolume (PV):

yaml 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/redis
  persistentVolumeReclaimPolicy: Retain

创建 PersistentVolumeClaim (PVC):

yaml 复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

修改你的 Deployment 使用 PVC 而不是 emptyDir:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: registry.cn-hangzhou.aliyuncs.com/qiluo-images/redis:latest
        ports:
        - containerPort: 6379
        env:
        - name: REDIS_PASSWORD
          value: "87vhqEneQ5u8"
        volumeMounts:
        - name: redis-log
          mountPath: /var/log/redis/
        - name: redis-data
          mountPath: /data
        command: ["redis-server", "--appendonly", "yes", "--requirepass", "$(REDIS_PASSWORD)"]
      volumes:
      - name: redis-log
        emptyDir: {}
      - name: redis-data
        persistentVolumeClaim:
          claimName: redis-pvc

Service 配置保持不变:

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: redis-service
spec:
  type: NodePort
  ports:
  - port: 6379
    targetPort: 6379
    nodePort: 30379
  selector:
    app: redis

如何使用这些配置

依次应用这些配置文件:

bash 复制代码
kubectl apply -f redis-pv.yaml
kubectl apply -f redis-pvc.yaml
kubectl apply -f redis-deployment.yaml
kubectl apply -f redis-service.yaml

验证资源是否创建成功:

bash 复制代码
kubectl get pv
kubectl get pvc
kubectl get pods
kubectl get svc

访问 Redis:

集群内部访问: 使用服务名 redis-service 和端口 6379

集群外部访问: 使用节点 IP 和 30379 端口

相关推荐
爬也要爬着前进10 小时前
redis主从搭建
数据库·redis·缓存
BullSmall11 小时前
Anolis OS 8.10 完整安装 Docker CE(生产可用,解决 podman 冲突)
docker·容器·podman
用户0953675158312 小时前
在系统的学习 redis 前的疑惑
redis·go
吴声子夜歌15 小时前
Redis 3.x——集群故障转移
java·数据库·redis·集群
明豆16 小时前
Redis 分布式缓存生产实战
redis·分布式·缓存
海兰17 小时前
【高速缓存】RedisVL 指南:从向量搜索到 AI 应用落地
人工智能·redis
weixin_7275356217 小时前
双Token认证体系深度拆解:Spring Security + JWT + Redis
redis·spring·wpf
CodexDave18 小时前
数据库连接池耗尽:排查顺序与三层兜底
服务器·前端·数据库·git·云原生·容器·kubernetes
java_logo18 小时前
ELK Docker Compose 部署指南:轻松搭建日志检索平台
elk·elasticsearch·docker·容器·kibana·logstash·轩辕镜像
William Dawson18 小时前
【华为云 MRS Redis 安全集群 Kerberos 认证接入实战(Spring Boot \+ Jedis)】
redis·安全·华为云