前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于Kubernetes构建Redis集群

关于Kubernetes构建Redis集群

作者头像
Yuou
发布2022-09-26 15:35:44
6841
发布2022-09-26 15:35:44
举报

编写你的Dockerfile

FROM centos:8

# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
RUN groupadd -r -g 1000 redis && useradd -r -g redis -u 1000 redis

# Redis信息 注意SHA校验
ENV REDIS_VERSION 6.0.8
ENV REDIS_DOWNLOAD_URL http://download.redis.io/releases/redis-6.0.8.tar.gz
ENV REDIS_DOWNLOAD_SHA 98ed7d532b5e9671f5df0825bb71f0f37483a16546364049384c63db8764512b

# set -eux 以Debug的方式执行shell 遇到错误会退出
RUN set -eux; \
     \
     sed -e 's|^mirrorlist=|#mirrorlist=|g' \
         -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \
         -i.bak \
         /etc/yum.repos.d/CentOS-*.repo

RUN set -eux; \
    \
	yum makecache; \
	yum -y install zlib-devel \
        openssl-devel \
        gcc \
        wget \
        make \
        gcc-c++;\
	wget -O redis.tar.gz "$REDIS_DOWNLOAD_URL"; \
	echo "$REDIS_DOWNLOAD_SHA *redis.tar.gz" | sha1sum ; \
	mkdir -p /usr/local/redis; \
	tar -xzf redis.tar.gz -C /usr/local/redis --strip-components=1; \
	rm redis.tar.gz; \
    make -C /usr/local/redis; \
    make -C /usr/local/redis install;

chown redis:redis /data
VOLUME /usr/local/redis
WORKDIR /usr/local/redis
COPY redis.conf /usr/local/redis/
#COPY docker-entrypoint.sh /usr/local/bin/
#ENTRYPOINT ["docker-entrypoint.sh"]
# 可选
# RUN chmod -R 777 /usr/local/redis
EXPOSE 6379
# ENTRPOINT 参数可选 可以直接运行 也可以在yaml指定command
ENTRYPOINT ["redis-server","/usr/local/redis/redis.conf","--protected-mode","no"]

redis.conf

appendonly yes
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
dir /usr/local/redis/
port 6379
daemonize no

redis-cluster.yaml

提醒您: 请挂载数据卷配置,注意保存数据,防止数据丢失!!!

---
kind: Service
apiVersion: v1
metadata:
  name: redis-headless
  namespace: production-contract
  labels:
    app: redis
  annotations:
    kubesphere.io/alias-name: redis
    kubesphere.io/creator: admin
    kubesphere.io/serviceType: statefulservice
spec:
  ports:
    - name: http-redis 
      protocol: TCP
      port: 6379
      targetPort: 6379
  selector:
    app: redis
  clusterIP: None
  type: ClusterIP
  sessionAffinity: None
---
kind: StatefulSet
apiVersion: apps/v1
metadata:
  name: redis
  namespace: production-contract
  labels:
    app: redis
  annotations:
    kubesphere.io/creator: admin
spec:
  replicas: 6
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: redis
      annotations:
        kubesphere.io/containerSecrets: '{"container-u4km8f":"harbor"}'
    spec:
      containers:
        - name: container-u4km8f
          image: '10.1.6.15/apps/redis:prod'
          ports:
            - name: http-redis
              containerPort: 6379
              protocol: TCP
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: default
      serviceAccount: default
      securityContext: {}
      imagePullSecrets:
        - name: harbor
      affinity: {}
      schedulerName: default-scheduler
  serviceName: redis-headless
  podManagementPolicy: OrderedReady
  updateStrategy:
    type: RollingUpdate
    rollingUpdate:
      partition: 0
  revisionHistoryLimit: 10

错误排查

关于容器启动退出问题

  1. Docker容器后台运行,就必须有一个前台进程
  2. redis.conf中的daemonize不要设置为yes

关于kubernetes内部加入Redis集群错误

ERR Invalid node address specified: redis-1.redis-headless.production-contract.svc.cluster.local:6379 

因为redis不支持主机名加入集群,你可以使用dig 命令将主机名解析成IP后,以解析结果为IP的方式加入。

如下所示

[root@redis-0 data]# redis-cli --cluster create `dig +short redis-0.redis-headless.production-contract.svc.cluster.local`:6379 \
>  `dig +short redis-1.redis-headless.production-contract.svc.cluster.local`:6379 \
>  `dig +short redis-2.redis-headless.production-contract.svc.cluster.local`:6379 \
>  `dig +short redis-3.redis-headless.production-contract.svc.cluster.local`:6379 \
>  `dig +short redis-4.redis-headless.production-contract.svc.cluster.local`:6379 \
>  `dig +short redis-5.redis-headless.production-contract.svc.cluster.local`:6379 \
> --cluster-replicas 1
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编写你的Dockerfile
  • 错误排查
    • 关于容器启动退出问题
      • 关于kubernetes内部加入Redis集群错误
      相关产品与服务
      容器镜像服务
      容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档