如何使用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 端口

相关推荐
陈陈CHENCHEN1 小时前
【Kubernetes】K8s 之 ETCD - 恢复备份
kubernetes
叶落闲庭2 小时前
【k8s】k8s集群搭建
云原生·容器·kubernetes
藥瓿亭2 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
xyhshen2 小时前
k8s下离线搭建elasticsearch
elasticsearch·容器·kubernetes
陈阿土i3 小时前
SpringAI 1.0.0 正式版——利用Redis存储会话(ChatMemory)
java·redis·ai·springai
椰汁菠萝3 小时前
k8s集群安装坑点汇总
云原生·容器·kubernetes
bing_1583 小时前
跨多个微服务使用 Redis 共享数据时,如何管理数据一致性?
redis·微服务·mybatis
背太阳的牧羊人4 小时前
sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
docker·容器·bash
gsls2008084 小时前
ocrapi服务docker镜像使用
运维·docker·容器
多多*4 小时前
微服务网关SpringCloudGateway+SaToken鉴权
linux·开发语言·redis·python·sql·log4j·bootstrap