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
相关推荐
神秘的猪头3 分钟前
Redis 数据结构实战指南:从缓存、点赞、排行榜到消息队列
redis
还卿一钵无情泪1 小时前
Docker 部署Unsloth 绕开环境配置难题
运维·人工智能·docker·ai·容器·nlp·干货
打工仔折腾 AI2 小时前
Docker镜像分层与卷挂载到底怎么工作:一次文件系统层面的实测分析
运维·人工智能·后端·python·docker·容器·性能优化
新鲜势力呀2 小时前
PHP 消息队列实战:从同步接口阻塞到 RabbitMQ + Redis队列 + 异步任务架构完整优化方案
redis·rabbitmq·php
极客先躯3 小时前
高级java每日一道面试题-2026年01月20日-实战篇[Docker]-如何实现镜像的跨区域复制?
java·运维·docker·容器·架构图
for_ever_love__3 小时前
Redis 持久化讲透:RDB、AOF 与混合持久化怎么选
java·数据库·redis·持久化·aof·区别·rdb
dawnsky.liu3 小时前
OpenShift - 实现系统负载和业务负载分区隔离
kubernetes·openshift
拾贰_C5 小时前
【English | conversation 】call | 抖音AI短句情景:打电话---come over
数据库·redis·缓存
杀不死的坏蛋c6 小时前
k8s-原理-网络-安装
kubernetes
紫神7 小时前
DDS 通信技术说明
网络·云原生·容器·k8s·dds·弱网