Kubernetes(k8s)上部署redis5.0.14

Kubernetes上部署redis

  • 环境准备
    • 创建命名空间
  • 准备PV和PVC
    • 安装nfs
    • 准备PV
    • 准备PVC
  • 部署redis
    • 创建redis的配置文件
    • 部署脚本
    • 挂载数据目录
    • 挂载配置文件
    • 通过指定的配置文件启动redis
  • 集群内部访问
  • 外部链接Redis

环境准备

首先你需要一个Kubernetes环境,可参考我写的文章:https://blog.csdn.net/m0_51510236/article/details/130842122

创建命名空间

我们可以选择以下两种方式创建命名空间,我此次创建的命名空间名字是deploy-test,可以更改,这里只做演示:

  • 命令直接创建
kubectl create namespace deploy-test
  • yaml创建(推荐)
apiVersion: v1
kind: Namespace
metadata:name: deploy-test
spec: {}
status: {}

准备PV和PVC

在我之前的一篇文章单中讲解了啥是PV和PVC:https://blog.csdn.net/m0_51510236/article/details/132482351

安装nfs

这篇文章直接使用,这次准备的和上次的一样是nfs来做存储,所以三台服务器都需要安装 nfs-utils

yum install -y nfs-utils

如图三台服务器都以完成安装:
在这里插入图片描述

然后我们在主服务器或nfs服务器上执行这两行命令:

mkdir -p /data/nfs/redis
cat >> /etc/exports << EOF
/data/nfs/redis *(rw,sync,no_root_squash)
EOF

这行命令是暴露 /data/nfs/redis 给nfs客户端访问的目录,用于redis数据和日志的存放目录,结下来我们需要开启nfs服务端,执行以下这行命令:

systemctl enable --now nfs-server

暴露后来查看暴露结果:

showmount -e nfs服务端地址

测试如图:
在这里插入图片描述

好的,接下来nfs就安装好了

准备PV

直接上yaml,可以根据提示内容修改:

apiVersion: v1
kind: PersistentVolume
metadata:name: deploy-redis-nfs-pv # PV的名字namespace: deploy-test # 命名空间
spec:capacity:storage: 1Gi # 申请的大小accessModes:- ReadWriteMany # 访问模式为多节点读写nfs:server: 192.168.1.160 # nfs服务器地址,注意修改为你自己的path: /data/nfs/redis # nfs的远程目录storageClassName: "nfs" # 存储类名字为nfs

创建结果显示:
在这里插入图片描述

准备PVC

直接上yaml,除了改一下名字其他的没啥好修改的:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: deploy-redis-nfs-pvc # pvc名字namespace: deploy-test # 命名空间
spec:accessModes:- ReadWriteMany # 多节点读写storageClassName: "nfs" # 存储类类型为nfsresources:requests:storage: 1Gi # 申请存储空间的大小volumeName: deploy-redis-nfs-pv # 对应上面的pv名字

查看pvc的创建:
在这里插入图片描述

查看它两的状态(kubectl get pv,pvc -o wide -n deploy-test):
在这里插入图片描述

部署redis

创建redis的配置文件

首先我们先规定好配置文件内容(注意修改你的密码):

# 关闭保护模式
protected-mode no# redis链接密码
requirepass redis# 日志级别
loglevel warning# 日志存放目录
logfile "/data/redis.log"# 数据文件目录
dir /data
dbfilename dump.rdb# 数据库数量
databases 16# 保存数据库到数据文件
save 900 1
save 300 10
save 60 10000

注意将这个配置文件上传到服务器:
在这里插入图片描述

然后我们为这个文件创建一个configmap:

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

上面这行命令会根据 redis.conf 生成一个yaml文件:
在这里插入图片描述

所以创建这个configmap的yaml文件为:

apiVersion: v1
data:redis.conf: |# 关闭保护模式protected-mode no# redis链接密码requirepass redis# 日志级别loglevel warning# 日志存放目录logfile "/data/redis.log"# 数据文件目录dir /datadbfilename dump.rdb# 数据库数量databases 16# 保存数据库到数据文件save 900 1save 300 10save 60 10000
kind: ConfigMap
metadata:name: deploy-redis-confignamespace: deploy-test

创建configmap如图:
在这里插入图片描述

部署脚本

apiVersion: v1
kind: Service
metadata:name: deploy-redis-svcnamespace: deploy-testlabels:app: redis
spec:ports:- port: 6379name: redistargetPort: 6379nodePort: 30379selector:app: redistype: NodePortsessionAffinity: ClientIP---apiVersion: apps/v1
kind: StatefulSet
metadata:name: deploy-redisnamespace: deploy-test
spec:selector:matchLabels:app: redis # 必须匹配 .spec.template.metadata.labelsserviceName: "deploy-redis-svc"replicas: 1template:metadata:labels:app: redis # 必须匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- command:- "redis-server"- "/usr/local/etc/redis.conf"name: redisimage: redis:5.0.14ports:- containerPort: 6379name: redisvolumeMounts:- name: redis-datamountPath: /data- name: redis-configmountPath: /usr/local/etcreadOnly: truevolumes:- name: redis-datapersistentVolumeClaim:claimName: deploy-redis-nfs-pvc- name: redis-configconfigMap:name: deploy-redis-configitems:- key: redis.confpath: redis.conf

接下来讲解一下里面比较重要的脚本

挂载数据目录

StatefulSet.spec.template.spec.volumes 当中有那么一串代码:

      - name: redis-datapersistentVolumeClaim:claimName: deploy-redis-nfs-pvc

这串代码是要使用到 deploy-redis-nfs-pvc 这个pvc做数据存储,并给这个挂载取一个名字叫做 redis-data,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:

        - name: redis-datamountPath: /data

这串代码的意思是使用名为 redis-data 数据挂载,并把它挂在到pod的 /data 目录当中

挂载配置文件

StatefulSet.spec.template.spec.volumes 当中有那么一串代码:

      - name: redis-configconfigMap:name: deploy-redis-configitems:- key: redis.confpath: redis.conf

这串代码的意思是读取 deploy-redis-config 这个configmap并命名为 redis-config,然后获取里面的 redis.conf 配置文件,命名为 redis.conf,然后在 StatefulSet.spec.template.spec.containers 有那么一串代码:

        - name: redis-configmountPath: /usr/local/etcreadOnly: true

这串代码的意思是使用名为 redis-config 配置文件,并把它以只读的方式挂在到pod的 /usr/local/etc 当中

通过指定的配置文件启动redis

在 `StatefulSet.spec.template.spec.containers当中有这么一行代码:

      - command:- "redis-server"- "/usr/local/etc/redis.conf"

这行代码的意思是使用 /usr/local/etc/redis.conf 配置文件启动redis,这个配置文件是我们在configmap当中配置的,当我们执行部署的这个yaml之后,可以查看结果:
在这里插入图片描述

执行一下命令查看部署进度:

kubectl get all -o wide -n deploy-test

看到这个就代表部署完成了:
在这里插入图片描述

集群内部访问

StatefulSet应用的访问地址为:

<pod名称>.<service名称>.<命名空间名称>.svc.cluster.local

那么这次暴露的pod访问地址就是:

deploy-redis-0.deploy-redis-svc.deploy-test.svc.cluster.local

尝试解析验证一下:
在这里插入图片描述

外部链接Redis

我们可以直接使用 IntelliJ IDEA 或其他链接工具尝试链接:
在这里插入图片描述

显示链接成功(如果有密码注意输入密码):
在这里插入图片描述

并且操作也没问题:
在这里插入图片描述

我们来到数据目录,查看容器内的数据已经成功暴露到nfs的目录当中:
在这里插入图片描述到这里在Kubernetes上安装redis就已经完成了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/92352.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构之树型结构

相关概念树的表示二叉树二叉树性质二叉树储存 实现一颗二叉树创建遍历&#xff08;前中后序&#xff09;获取树中节点个数获取叶子节点个数获取第k层节点个数获取二叉树高度检测值为value元素是否存在层序遍历&#xff08;需要队列来实现&#xff09;判断是否为完全二叉树&…

Window11-Ubuntu双系统安装

一、制作Ubuntu系统盘 1.下载Ubuntu镜像源 阿里云开源镜像站&#xff1a;https://mirrors.aliyun.com/ubuntu-releases/ 清华大学开源软件镜像网站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/ 选择想要的版本下载&#xff0c;我用的是20.04版本。 2…

【送书活动】深入浅出SSD:固态存储核心技术、原理与实战

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

leetcode76. 最小覆盖子串(滑动窗口-java)

滑动窗口 最小覆盖子串滑动窗口代码 上期经典 最小覆盖子串 难度 - 困难 原题链接 - 最小覆盖字串 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串&#xff0c;则返回空字符串 “” 。 注意&#xff1a; 对于 t…

SpringBoot集成JWT token实现权限验证

JWTJSON Web Token 1. JWT的组成 JWTHeader,Payload,Signature>abc.def.xyz 地址&#xff1a;JSON Web Tokens - jwt.er 1.1 Header Header:标头。 两个组成部分&#xff1a;令牌的类型&#xff08;JWT&#xff09;和所使用的签名算法&#xff0c;经过Base64 Url编码后形成…

vue使用vant中的popup层,在popup层中加搜索功能后,input框获取焦点 ios机型的软键盘不会将popup顶起来的问题

1.使用vant的popup弹出层做了一个piker的选择器,用户需要在此基础上增加筛选功能。也就是输入框 2.可是在ios机型中,input框在获取焦点以后,ios的软键盘弹起会遮盖住我们的popup层,导致体验不是很好 3.在大佬的解答及帮助下,采用窗口滚动的方式解决此方法 <Popupv-model&q…

使用acme,自动续签免费的SSL,无忧http升级https

使用acme自动续签免费的SSL 安装acme.sh颁发域名将证书安装到nginx下配置nginx的ssl自动续签 这里只进行最简单的操作 安装acme.sh 进入你的用户目录&#xff0c;如果你使用root登陆&#xff0c;那么你的用户目录就是 /root/ curl https://get.acme.sh | sh -s emailmyexam…

Yao框架浏览器打开后Cannot read properties of undefined (reading ‘search‘)

Yao创建项目后浏览器打开报 undefined 错误&#xff0c;是因为 Yao 框架语言包的问题&#xff0c;只支持浏览器的【中文&#xff08;简体&#xff09;】【英语&#xff08;美国&#xff09;】&#xff0c;如果浏览器排第一的语言不是这两个就会出现这个错误。临时解决方案是在浏…

java八股文面试[多线程]——阻塞队列

阻塞队列大纲&#xff1a; 什么是阻塞队列 阻塞队列&#xff1a;从名字可以看出&#xff0c;他也是队列的一种&#xff0c;那么他肯定是一个先进先出&#xff08;FIFO&#xff09;的数据结构。与普通队列不同的是&#xff0c;他支持两个附加操作&#xff0c;即阻塞添加和阻塞删…

学术加油站|基于端到端性能的学习型基数估计器综合测评

编者按 本文系东北大学李俊虎所著&#xff0c;也是「 OceanBase 学术加油站」系列第 11 篇内容。 「李俊虎&#xff1a;东北大学计算机科学与工程学院在读硕士生&#xff0c;课题方向为数据库查询优化&#xff0c;致力于应用 AI 技术改进传统基数估计器&#xff0c;令数据库选…

【Python】Python 实现自动发送邮件功能

目录 Python 自动发送邮件 可能会遇到的问题 1. SMTP认证错误&#xff1a; 2. SMTP服务器连接问题&#xff1a; 3. 邮件格式错误&#xff1a; 4. 邮件被拦截或进入垃圾邮件箱&#xff1a; 5. 网络连接问题&#xff1a; 6. 安全性设置问题&#xff1a; 注意事项 1. 发…