k8s 启动一个redis

需要提前创建longhorn sc 资源

yaml 复制代码
# Redis StatefulSet 配置(开发/测试环境单副本)
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
  labels:
    app.kubernetes.io/name: redis
spec:
  serviceName: redis-headless
  replicas: 1
  # 标签选择器:匹配 Pod 模板标签
  selector:
    matchLabels:
      app.kubernetes.io/name: redis
  template:
    metadata:
      labels:
        app.kubernetes.io/name: redis
    spec:
      securityContext:
        fsGroup: 0
        runAsUser: 0
        runAsGroup: 0
      containers:
      
      - name: redis
        # 镜像与版本
        image: redis:8.4.0
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 200m
            memory: 512Mi
          limits:
            cpu: 500m
            memory: 1Gi
        ports:
        - containerPort: 6379
          name: redis
          protocol: TCP
        # 环境变量配置(原 environment 直接迁移,生产环境建议用 Secret 存储密码)
        env:
        # 时区配置:统一集群时区
        - name: TZ
          value: "Asia/Shanghai"
        # 数据目录挂载
        volumeMounts:
        - name: redis-data
          mountPath: /data
          # 子路径:避免存储目录权限冲突,隔离 Redis 数据文件
          subPath: redis
        - name: redis-config
          mountPath: /etc/redis
          readOnly: true
        command: ["redis-server"]
        args: ["/etc/redis/redis.conf"]
      volumes:
      - name: redis-config
        configMap:
          name: redis-config

  # PVC 模板:为 StatefulSet 每个 Pod 自动创建专属持久化存储
  volumeClaimTemplates:
  - metadata:
      name: redis-data
      labels:
        app.kubernetes.io/name: redis
    spec:
      # 访问模式:单节点读写
      accessModes: ["ReadWriteOnce"]
      # 存储类:使用 longhorn 分布式存储
      storageClassName: "longhorn"
      # 存储资源请求:根据数据量预估配置
      resources:
        requests:
          storage: 5Gi
---
# Redis 无头服务(StatefulSet 必需,提供固定网络标识)
apiVersion: v1
kind: Service
metadata:
  name: redis-headless
  labels:
    app.kubernetes.io/name: redis

spec:
  # 无头服务标识:clusterIP=None
  clusterIP: None
  selector:
    app.kubernetes.io/name: redis

  ports:
  - name: redis
    port: 6379
    targetPort: 6379
    protocol: TCP
---
# Redis 外部访问服务(NodePort 类型,对应原端口映射 6379:6379)
apiVersion: v1
kind: Service
metadata:
  name: redis-service
  labels:
    app.kubernetes.io/name: redis

spec:
  # 关联 Redis Pod 标签
  selector:
    app.kubernetes.io/name: redis

  # 服务类型:NodePort(开发/测试环境外部访问常用方式)
  type: NodePort
  ports:
  - name: redis
    # Service 集群内部端口
    port: 6379
    # 目标端口:映射至 Pod 暴露端口
    targetPort: 6379
    # 节点暴露端口:30000-32767 范围内,确保集群内唯一(此处沿用原端口 6379,需确认集群未占用)
    nodePort: 6379
    protocol: TCP
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-config
  labels:
    app.kubernetes.io/name: redis
data:
  redis.conf: |
    bind 0.0.0.0
    protected-mode no
    daemonize no
    pidfile /var/run/redis_6379.pid
    logfile /data/redis_6379.log
    requirepass lb781023
    user harbor on >lb781023 allcommands allkeys
相关推荐
文静小土豆23 分钟前
Docker 与 containerd 代理配置详解:镜像拉取速度慢的终极解决方案
运维·docker·容器
indexsunny2 小时前
互联网大厂Java面试实战:Spring Boot微服务在电商场景中的应用与挑战
java·spring boot·redis·微服务·kafka·spring security·电商
JY.yuyu2 小时前
Docker常用命令——数据卷管理 / 端口映射 / 容器互联
运维·docker·容器
lpruoyu3 小时前
【Docker进阶-06】docker-compose & docker swarm
运维·docker·容器
虾说羊4 小时前
docker容器化部署项目流程
运维·docker·容器
骇客野人5 小时前
通过脚本推送Docker镜像
java·docker·容器
liux35285 小时前
基于kubeadm部署Kubernetes 1.26.4 集群指南
云原生·容器·kubernetes
Zfox_5 小时前
CANN GE 深度解析:图编译器与执行引擎的后端优化策略、OM 文件结构与 Stream 调度机制
容器·节点小宝
摇滚侠8 小时前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
人鱼传说8 小时前
docker desktop是一个好东西
运维·docker·容器