当前位置: 首页 > news >正文

Kubernetes1.25中Redis单机和集群部署实例二

1、概述

我们知道在 Kubernetes 容器编排平台中, 我们可以非常方便的进行应用的扩容缩, 同时也能非常方便的进行业务的迭代,本章主要讲解在Kubernetes1.25搭建Redis单实例和Redis集群主从同步的环境流程步骤, 如果是高频访问重要的线上业务我们最好是部署在物理机器上;

2、Kubernetes环境说明

# 集群信息
[root@k8s-master ~]# kubectl cluster-info
Kubernetes control plane is running at https://10.211.55.11:6443
CoreDNS is running at https://10.211.55.11:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@k8s-master ~]## 集群节点
[root@k8s-master ~]# kubectl get nodes -owide
NAME         STATUS   ROLES           AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE          KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master   Ready    control-plane   18h   v1.25.0   10.211.55.11   <none>        CentOS Stream 8   4.18.0-408.el8.x86_64   docker://20.10.22
k8s-node1    Ready    <none>          18h   v1.25.0   10.211.55.12   <none>        CentOS Stream 8   4.18.0-408.el8.x86_64   docker://20.10.22
k8s-node2    Ready    <none>          18h   v1.25.0   10.211.55.13   <none>        CentOS Stream 8   4.18.0-408.el8.x86_64   docker://20.10.22# 动态卷
[root@k8s-master ~]# kubectl get sc -n dev
NAME          PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-storage   storage-nfs   Delete          Immediate           false                  6s

3、通过configMap传入配置文件、动态存储卷存储持久化redis数据、hostPath存储日志

知识储备:

configMap不熟悉的朋友请看这篇文章https://blog.csdn.net/u011837804/article/details/128590751

动态存储卷不熟悉的朋友请看这篇文章https://blog.csdn.net/u011837804/article/details/128692744

hostPath不熟悉的朋友请看这篇文章https://blog.csdn.net/u011837804/article/details/128588534

3.1、创建configMap

3.1.1、redis配置文件

Redis配置文件/root/redis/redis.conf

# 绑定任意接口、服务端口、后台运行。
bind 0.0.0.0
port 6379
# 非常大的巨坑在使用k8s中的container作为redis容器时其daemonize no一定要设置为no 
daemonize no
supervised no# redis服务pid进程文件名
pidfile "/var/run/redis.pid"# 关闭保护模式,并配置使用密码访问
protected-mode no
requirepass 123456# 数据文件保存路径,rdb/AOF文件也保存在这里
dir "/data"# 日志文件记录文件(notice / verbose)
# /var/log/redis/redis.log
loglevel verbose  
logfile "/logs/redis.log"# 最大客户端连接数
maxclients 10000# 客户端连接空闲多久后断开连接,单位秒,0表示禁用
timeout 300
tcp-keepalive 60 # 内存初始化
maxmemory 1gb
maxmemory-policy volatile-lru
slowlog-max-len 128
lua-time-limit 5000# Redis 数据持久化(rdb/aof)配置
# 数据自动保存脚本条件例如300s中有10key发生变化
save 300 100
save 60 10000
# RDB 文件名
dbfilename "dump.rdb"
# 对RDB文件进行压缩,建议以(磁盘)空间换(CPU)时间。
rdbcompression yes
# 版本5的RDB有一个CRC64算法的校验和放在了文件的最后。这将使文件格式更加可靠。
rdbchecksum yes
# RDB自动触发策略是否启用,默认为yes
rdb-save-incremental-fsync yes# AOF开启
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 可选值 always, everysec,no,建议设置为everysec
appendfsync everysec# Redis风险命令重命名
# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
rename-command FLUSHDB b840fc02d524045429941cc15f59e41cb7be6c53
rename-command FLUSHALL b840fc02d524045429941cc15f59e41cb7be6c54
rename-command EVAL b840fc02d524045429941cc15f59e41cb7be6c55
rename-command DEBUG b840fc02d524045429941cc15f59e41cb7be6c56
# rename-command SHUTDOWN SHUTDOWN

3.1.2、创建confMap

# 查看当前已有cm
[root@k8s-master redis]# kubectl get cm -n dev
NAME               DATA   AGE
kube-root-ca.crt   1      76m
[root@k8s-master redis]#
[root@k8s-master redis]#
# 创建cm 名称为 redis-single 后面要用到
[root@k8s-master redis]# kubectl create configmap -n dev redis-single --from-file=/root/redis/redis.conf
configmap/redis-single created
[root@k8s-master redis]#
# 已创建
[root@k8s-master redis]# kubectl get cm -n dev
NAME               DATA   AGE
kube-root-ca.crt   1      76m
redis-single       1      5s
[root@k8s-master redis]## 查看cm内容
[root@k8s-master redis]# kubectl get cm -n dev -o json

3.2、创建动态存储卷

由于创建复杂就不在此重新贴过程,按照https://blog.csdn.net/u011837804/article/details/128692744 此文章操作即可,结果如下

# 查看已创建sc  注意:nfs-storage 下述要用到
[root@k8s-master ~]# kubectl get sc -n dev
NAME          PROVISIONER   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-storage   storage-nfs   Delete          Immediate           false                  3h3m

3.3、开始部署单实例redis

3.3.1、配置文件redis-single-cm.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cmnamespace: dev
spec:serviceName: redis-single-cm-servicereplicas: 1selector:matchLabels:app: redis-cmtemplate:metadata:labels:app: redis-cmspec:containers:- name: redisimage: redis:7.0imagePullPolicy: IfNotPresentports:- containerPort: 6379name: servercommand: [ "redis-server", "/conf/redis.conf"]volumeMounts:# 从configmap获取的配置文件,挂载到指定文件中- name: confmountPath: /conf/redis.confsubPath: redis.conf# 动态存储卷存储持久化redis数据          - name: datamountPath: /data- name: logsmountPath: /logs# 时区设置- name: timezonemountPath: /etc/localtime              volumes:- name: conf# 配置文件采用configMapconfigMap:name: redis-singledefaultMode: 0755# 日志采用hostPath卷- name: logshostPath:type: DirectoryOrCreate path: /root/redis/logs# 时区定义- name: timezone                             hostPath:path: /usr/share/zoneinfo/Asia/Shanghai# 存储卷认领          volumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]# 上述创建的sc名称storageClassName: "nfs-storage"resources:requests:storage: 50Mi
---
apiVersion: v1
kind: Service
metadata:name: redis-single-cm-servicenamespace: dev
spec:type: ClusterIPports:- port: 6379targetPort: 6379name: serverselector:app: redis-cm

3.3.2、执行并查看效果

# 执行redis-single-cm.yaml
[root@k8s-master ~]# kubectl apply -f redis-single-cm.yaml
statefulset.apps/redis-cm created
service/redis-single-cm-service created
[root@k8s-master ~]## 查看 pods已创建成功,说明我们的配置无任何问题
[root@k8s-master ~]# kubectl get pods -n dev
NAME                                      READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-79599dbcfb-gpq78   1/1     Running   0          123m
redis-cm-0                                1/1     Running   0          6s
[root@k8s-master ~]## pvc已自动创建
[root@k8s-master ~]# kubectl get pvc -n dev
NAME              STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-redis-cm-0   Bound    pvc-32d16583-cdd7-4ab7-a745-432ff43c146f   50Mi       RWO            nfs-storage    116s
[root@k8s-master ~]## 查看nfs共享文件,确认redis持久化数据已存储
[root@k8s-master nfs]# pwd
/root/data/nfs
[root@k8s-master nfs]#
[root@k8s-master nfs]# ls
dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f
[root@k8s-master nfs]#
[root@k8s-master nfs]# cd dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f/
[root@k8s-master dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f]#
[root@k8s-master dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f]# ls
appendonlydir  dump.rdb
[root@k8s-master dev-data-redis-cm-0-pvc-32d16583-cdd7-4ab7-a745-432ff43c146f]#
http://www.lryc.cn/news/3573.html

相关文章:

  • 【STM32】【HAL库】遥控关灯0 概述
  • C语言学习笔记(三): 选择结构程序设计
  • 图----无向图
  • 【C++1】函数重载,类和对象,引用,/string类,vector容器,类继承和多态,/socket,进程信号
  • JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用
  • Spring Boot 快速入门(绝对经典)
  • golang context上下文
  • Linux---Linux是什么
  • C语言(Tgmath.h库(C99),exit和atexit)
  • LeetCode 刷题系列 -- 739. 每日温度
  • 如何生成毕业论文的目录和创建模板
  • 新来的23岁软件测试员上来秀了波操作,把几个老员工看傻了
  • Window10开放某个端口
  • 进阶7 分页查询
  • 利用升序定时器链表处理非活动连接
  • MySQL 开发规范
  • 【C语言进阶】预处理与程序环境
  • 【Docker知识】将环境变量传递到容器
  • Allegro如何更改铜皮显示密度操作指导
  • ThinkPHP5酒店预订管理系统
  • 【MySQL】MyCat分库分表分片规则配置详解与实战(MySQL专栏启动)
  • OpenWrt路由器设置域名动态解析手把手教程
  • java流浪动物救助系统(毕业设计)
  • 阿里代码规范插件中,Apache Beanutils为什么被禁止使用?
  • NFC enable NFC使能流程
  • Redis实例绑定CPU物理核优化Redis性能
  • STC15中断系统介绍
  • 力扣HOT100 11-15
  • 深入浅出单调栈与单调队列
  • 深入C语言——实现可变参数函数