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
相关推荐
nvd1113 小时前
ArgoCD 双层轮询深入拆解:从 redis-app.yaml 注册到缓存重建的完整链路
redis·缓存·argocd
xiaoxiangsiyan13 小时前
LNMP + Redis Sentinel 高可用架构部署手册(续)
运维·网络·数据库·redis·缓存·架构·sentinel
CodeHackerBhx14 小时前
Spring Boot 4 防重复提交:从接口幂等到 Redis 分布式锁的完整实践
java·数据库·spring boot·redis·分布式
沉迷学习 日益消瘦14 小时前
19-集群升级与维护
kubernetes
凌虚14 小时前
Kubernetes 编年史:从 Borg 到云原生操作系统
后端·程序员·kubernetes
瞬间&永恒~14 小时前
【Docker】(四)Namespace 详解
运维·docker·容器
就改了14 小时前
Docker安装并运行Redis
redis·docker·容器
晨陌y16 小时前
redis_exporter + Prometheus监控Redis: 指标采集、告警与远程抓取
redis·bootstrap·prometheus
风曦Kisaki16 小时前
Kubernetes(K8s)笔记Day07: StatefulSet 有状态控制器详解与使用案例
linux·docker·云原生·容器·kubernetes
张文君17 小时前
docker registry 删除镜像
运维·docker·容器