深圳有哪些网站公司,建设促销网站前的市场分析,蓝牙app制作教程,广州手表网站Kubernetes上部署redis 环境准备创建命名空间 准备PV和PVC安装nfs准备PV准备PVC 部署redis创建redis的配置文件部署脚本挂载数据目录挂载配置文件通过指定的配置文件启动redis 集群内部访问外部链接Redis 环境准备
首先你需要一个Kubernetes环境#xff0c;可参考我写的文章可参考我写的文章https://blog.csdn.net/m0_51510236/article/details/130842122
创建命名空间
我们可以选择以下两种方式创建命名空间我此次创建的命名空间名字是deploy-test可以更改这里只做演示
命令直接创建
kubectl create namespace deploy-testyaml创建推荐
apiVersion: v1
kind: Namespace
metadata:name: deploy-test
spec: {}
status: {}准备PV和PVC
在我之前的一篇文章单中讲解了啥是PV和PVChttps://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-fileredis.conf --dry-runclient -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-svcreplicas: 1template:metadata:labels:app: redis # 必须匹配 .spec.selector.matchLabelsspec:terminationGracePeriodSeconds: 10containers:- command:- redis-server- /usr/local/etc/redis.confname: 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就已经完成了