Kubernetes(k8s)部署高可用多主多从的Redis集群

这篇具有很好参考价值的文章主要介绍了Kubernetes(k8s)部署高可用多主多从的Redis集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境准备

准备Kubernetes

首先你需要一个Kubernetes集群,如图我已经安装好了一个Kubernetes集群:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

如果你还没有Kubernetes集群可参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122

准备存储类

你还需要一个可动态供应的存储类,我之前已经写过一篇关于安装NFS动态供给存储类的文章:https://blog.csdn.net/m0_51510236/article/details/132641343(这篇文章的上半部分),如图我已经安装好了一个NFS的存储类(名字为 nfs-client):
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

部署redis

我之前写过一篇在物理机上安装高可用多主多从的redis集群的文章:https://blog.csdn.net/m0_51510236/article/details/132684529,这篇文章参考的那片物理机上安装集群的步骤来。

准备一个命名空间

为了贴近生产环境,我们先创建一个命名空间:

命令创建

kubectl create namespace deploy-test

yaml文件创建(推荐)

apiVersion: v1
kind: Namespace
metadata:
  name: deploy-test
spec: {}
status: {}

准备redis配置文件

首先我们需要一个Redis的配置文件,我已经准备好了,注意名字命名为 redis.conf

# 关闭保护模式
protected-mode no

# 日志级别
loglevel warning

# 日志存放目录
logfile "/data/redis.log"

# 数据文件目录
dir /data
dbfilename dump.rdb

# 数据库数量
databases 16

# 保存数据库到数据文件
save 900 1
save 300 10
save 60 10000

# 集群相关配置
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000

先把这个文件复制到服务器上,如图:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

然后我们需要创建一个ConfigMap,可以直接通过下面命令生产ConfigMap的yaml资源清单文件:

kubectl create configmap redis-cluster-config --from-file=redis.conf -n deploy-test --dry-run=client -o yaml

生成了如图:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

因为我们真实部署中可能还会将这个应用部署到其他集群,所以我们记得保存这个配置文件:

apiVersion: v1
data:
  redis.conf: |
    # 关闭保护模式
    protected-mode no

    # 日志级别
    loglevel warning

    # 日志存放目录
    logfile "/data/redis.log"

    # 数据文件目录
    dir /data
    dbfilename dump.rdb

    # 数据库数量
    databases 16

    # 保存数据库到数据文件
    save 900 1
    save 300 10
    save 60 10000

    # 集群相关配置
    cluster-enabled yes
    cluster-config-file nodes-6379.conf
    cluster-node-timeout 15000
kind: ConfigMap
metadata:
  name: redis-cluster-config
  namespace: deploy-test

我们将这个内容保存到一个文件中,如 redis-deploy.yaml
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

准备部署statefulset的资源清单文件

资源清单文件我已经准备好了,下面有详细的说明:

# 创建一个Redis部署要用到的Service
apiVersion: v1
kind: Service
metadata:
  name: deploy-redis-svc
  namespace: deploy-test
  labels:
    app: redis
spec:
  ports:
  - port: 6379
    name: redis
    targetPort: 6379
    nodePort: 30379
  selector:
    app: redis
  type: NodePort
  sessionAffinity: ClientIP

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: deploy-redis
  namespace: deploy-test
spec:
  selector:
    matchLabels:
      app: redis
  # 引用上面定义的Service
  serviceName: "deploy-redis-svc"
  # 注意这里部署六个节点,按照本篇文章的逻辑最好不要修改
  replicas: 6
  template:
    metadata:
      labels:
        app: redis
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - command:
      	# 这里指定使用那个配置文件启动redis-server
        - "redis-server"
        - "/usr/local/etc/redis.conf"
        name: redis
        # 因为redis6集群对域名支持不好,并且Kubernetes是需要通过域名连接各个pod的,所以我们采用redis7来完成这次部署
        # 如果你能拉取到DockerHub上的镜像那么你就使用这个
        # image: docker.io/library/redis:7.0.12
        # 如果你拉取不到,那么就使用我拉取并推送到国内阿里云的镜像
        image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/redis:7.0.12
        ports:
        - containerPort: 6379
          name: redis
        volumeMounts:
        # 挂载redis的数据卷,使用的是我在下面声明的存储类模版
        - name: redis-data
          mountPath: /data
        # 挂载redis的配置文件
        - name: redis-config
          mountPath: /usr/local/etc
          readOnly: true
      volumes:
      # 读取configmap,获取redis的配置文件,方便上面挂载这个配置文件
      - name: redis-config
        configMap:
          name: redis-cluster-config
          items:
          - key: redis.conf
            path: redis.conf
  # 定义存储类模版
  volumeClaimTemplates:
  - metadata:
      name: redis-data # 这个名字要与上面的对应
      namespace: deploy-test
    spec:
      accessModes:
      - ReadWriteMany # 设置多节点读写模式
      resources:
        requests:
          storage: 1Gi # 申请1个g的存储空间,可根据自己的服务器空间修改
      storageClassName: nfs-client # 这里填写你存储类的名字

完整的资源清单文件内容:

apiVersion: v1
kind: Namespace
metadata:
  name: deploy-test
spec: {}
status: {}

---

apiVersion: v1
data:
  redis.conf: |
    # 关闭保护模式
    protected-mode no

    # 日志级别
    loglevel warning

    # 日志存放目录
    logfile "/data/redis.log"

    # 数据文件目录
    dir /data
    dbfilename dump.rdb

    # 数据库数量
    databases 16

    # 保存数据库到数据文件
    save 900 1
    save 300 10
    save 60 10000

    # 集群相关配置
    cluster-enabled yes
    cluster-config-file nodes-6379.conf
    cluster-node-timeout 15000
kind: ConfigMap
metadata:
  name: redis-cluster-config
  namespace: deploy-test

---

apiVersion: v1
kind: Service
metadata:
  name: deploy-redis-svc
  namespace: deploy-test
  labels:
    app: redis
spec:
  ports:
  - port: 6379
    name: redis
    targetPort: 6379
    nodePort: 30379
  selector:
    app: redis
  type: NodePort
  sessionAffinity: ClientIP

---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: deploy-redis
  namespace: deploy-test
spec:
  selector:
    matchLabels:
      app: redis
  serviceName: "deploy-redis-svc"
  replicas: 6
  template:
    metadata:
      labels:
        app: redis
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - command:
        - "redis-server"
        - "/usr/local/etc/redis.conf"
        name: redis
        # image: docker.io/library/redis:7.0.12
        image: registry.cn-shenzhen.aliyuncs.com/xiaohh-docker/redis:7.0.12
        ports:
        - containerPort: 6379
          name: redis
        volumeMounts:
        - name: redis-data
          mountPath: /data
        - name: redis-config
          mountPath: /usr/local/etc
          readOnly: true
      volumes:
      - name: redis-config
        configMap:
          name: redis-cluster-config
          items:
          - key: redis.conf
            path: redis.conf
  volumeClaimTemplates:
  - metadata:
      name: redis-data
      namespace: deploy-test
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
      storageClassName: nfs-client

执行文件完成部署

我们可以使用这行命令执行这个文件完成部署:

kubectl apply -f redis-deploy.yaml

执行后如图:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

可以通过这行命令监控它的部署:

watch kubectl get all -o wide -n deploy-test

看到6个pod都已经成功运行起来了:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

初始化集群

我们部署的pod是statefulset类型的pod,所以我们访问pod的域名格式为 pod名字.service名字.命名空间.svc.cluster.local,所以我们在集群中访问六个redis的地址分别为:

deploy-redis-0.deploy-redis-svc.deploy-test.svc.cluster.local:6379
deploy-redis-1.deploy-redis-svc.deploy-test.svc.cluster.local:6379
deploy-redis-2.deploy-redis-svc.deploy-test.svc.cluster.local:6379
deploy-redis-3.deploy-redis-svc.deploy-test.svc.cluster.local:6379
deploy-redis-4.deploy-redis-svc.deploy-test.svc.cluster.local:6379
deploy-redis-5.deploy-redis-svc.deploy-test.svc.cluster.local:6379

接下来我们需要去到里面的任何一个pod,去执行一行命令,使用这行命令进入到第一个pod:

# 注意修改你自己的命名空间和pod名字
kubectl exec -itn deploy-test pod/deploy-redis-0 bash

进入后如图:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

然后我们执行一下下面这行命令:

redis-cli --cluster create --cluster-replicas 1 \
deploy-redis-0.deploy-redis-svc.deploy-test.svc.cluster.local:6379 \
deploy-redis-1.deploy-redis-svc.deploy-test.svc.cluster.local:6379 \
deploy-redis-2.deploy-redis-svc.deploy-test.svc.cluster.local:6379 \
deploy-redis-3.deploy-redis-svc.deploy-test.svc.cluster.local:6379 \
deploy-redis-4.deploy-redis-svc.deploy-test.svc.cluster.local:6379 \
deploy-redis-5.deploy-redis-svc.deploy-test.svc.cluster.local:6379

执行后会出现这个提示:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

它问我们这样的一个分配方式行不行,这里直接输入yes然后回车,接下来看到下面这个画面代表集群配置成功:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

我们接下来使用这行命令来进入集群:

# -c 的意思是进入集群
redis-cli -c

然后我们输入这行命令来查看集群里的节点:

CLUSTER NODES

可以看到是三master三node的redis集群:
Kubernetes(k8s)部署高可用多主多从的Redis集群,kubernetes,redis,容器

到这里Kubernetes上搭建redis高可用集群就已经完毕了。文章来源地址https://www.toymoban.com/news/detail-699901.html

到了这里,关于Kubernetes(k8s)部署高可用多主多从的Redis集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker搭建mysql多主多从(集群),亲测有效!

    提示 :如果你只是想要搭建mysql主从看这篇文档就够了,很多地方参考了这篇文章:点击这里 原理图 : 主1(docker容器名为mysql-master) 主2(docker容器名为mysql-master_2) 从1(docker容器名为mysql-slave) 从2(docker容器名为mysql-slave-2) 四个容器都起动成功 解释 注意 :配置文件路径为do

    2024年02月04日
    浏览(38)
  • Kubernetes(k8s)上搭建一主两从的mysql8集群

    本文章视频教程地址:https://www.bilibili.com/video/BV1iw411e7ZE/ 首先你需要准备一个kubernetes集群和一台nfs服务器,为了方便,我就用 k8s-master 来做nfs服务器了。我的服务器IP地址和用途如图: IP地址 主机名 用途 192.168.1.160 k8s-master Kubernetes主服务器兼nfs服务器 192.168.1.161 K8s-node01 Ku

    2024年02月06日
    浏览(52)
  • Centos7 安装部署 Kubernetes(k8s) 高可用集群

    宿主机系统 集群角色 服务器IP 主机名称 容器 centos7.6 master 192.168.2.150 ks-m1 docker centos7.6 master 192.168.2.151 ks-n1 docker centos7.6 master 192.168.2.152 ks-n2 docker 1.1 服务器初始化及网络配置 VMware安装Centos7并初始化网络使外部可以访问** 注意事项:请一定要看完上面这篇文章再执行下面的操

    2024年02月03日
    浏览(58)
  • 云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)

    前面利用kubekey部署了一个简单的非高可用,etcd单实例的kubernetes集群,经过研究,发现部署过程可以简化,省去了一部分下载过程(主要是下载kubernetes组件的过程)只是kubernetes版本会固定在1.22.16版本,etcd集群可以部署成生产用的外部集群,并且apiserver等等组件也是高可用,

    2024年02月15日
    浏览(50)
  • 浅谈sealos及使用sealos4.0部署Kubernetes(K8s)高可用集群

    sealos 是以kubernetes为内核的云操作系统发行版 早期单机操作系统也是分层架构,后来才演变成 linux windows这种内核架构,云操作系统从容器诞生之日起分层架构被击穿,未来也会朝着高内聚的\\\"云内核\\\"架构迁移 从现在开始,把你数据中心所有机器想象成一台\\\"抽象\\\"的超级计算机

    2024年02月07日
    浏览(52)
  • 【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

    💖The Begin💖点点关注,收藏不迷路💖 Kubernetes 是一个强大的容器编排平台,可以帮助我们管理和部署容器化应用。MySQL 是一个流行的关系型数据库,在生产环境中通常需要高可用性和数据持久性。 本文将介绍如何在 Kubernetes 中部署 MySQL 集群,以确保数据的高可用性和持久

    2024年04月17日
    浏览(49)
  • Kubernetes(K8s)使用 kubeadm 方式搭建多 master 高可用 K8s 集群

    本篇主要针对上篇文章的单 master 节点的 K8s 集群上搭建多 master 节点集群 和 LB 负载均衡服务器。 Kubernetes(K8S)集群搭建基础入门教程 虚拟机 IP 地址: IP 操作系统 主机名称 192.168.2.121 centos7.9 k8s-master01 192.168.2.124 centos7.9 k8s-master02 192.168.2.125 centos7.9 k8s-node01 192.168.2.126 centos

    2023年04月26日
    浏览(52)
  • 【kubernetes】k8s高可用集群搭建(三主三从)

    目录 【kubernetes】k8s高可用集群搭建(三主三从) 一、服务器设置 二、环境配置 1、关闭防火墙 2、关闭selinux 3、关闭swap 4、修改主机名(根据主机角色不同,做相应修改) 5、主机名映射 6、将桥接的IPv4流量传递到iptables的链 7、时间同步 8、master之间进行免密登录设置 三、

    2024年02月09日
    浏览(43)
  • 【Kubernetes】kubeadm安装k8s1.25.0高可用集群

    详情请参考 : 【Kubernetes】kubeadm安装k8s稳定版(1.23.1)高可用集群 这里不再赘述 这部分内容还没发布。。。后续有空再整理更新啦。 master、node节点都需要操作 docker也要安装,docker跟containerd不冲突,安装docker是为了能基于dockerfile构建镜像。 master、node节点都需要操作 3台机

    2024年01月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包