1.制作redis docker镜像

1.1 准备alpine基础镜像

# 下载
docker pull alpine:3.13 # 更改tag
docker tag alpine:3.13 192.168.1.110/base/alpine:3.13 # 上传到本地harbor
docker push 192.168.1.110/base/alpine:3.13

1.2 准备redis安装包及配置文件

下载redis安装包

wget http://download.redis.io/releases/redis-4.0.14.tar.gz

修改redis.conf

tar xf redis-4.0.14.tar.gz

cp redis-4.0.14/redis.conf .

vim redis.conf
...
save 5 1
save 900 1
save 300 10
save 60 10000 dbfilename dump.rdb dir /data/
...

镜像中redis的启动脚本

cat run_redis.sh
#!/bin/bash
/usr/local/redis/bin/redis-server /etc/redis.conf tail -f /etc/hosts

1.3 编写Dockerfile

FROM 192.168.1.110/base/alpine:3.13

ADD redis-4.0.14.tar.gz /tmp/
ADD run_redis.sh /usr/local/redis/
ADD redis.conf /etc/redis.conf
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add gcc g++ make libffi-dev openssl-dev libtool \
&& mkdir /data/redisdata -p \
&& cd /tmp/redis-4.0.14 \
&& make PREFIX=/usr/local/redis install \
&& rm -rf /tmp/redis-4.0.14 EXPOSE 6379 CMD ["/usr/local/redis/run_redis.sh"]

1.4 制作镜像并上传到本地harbor

# ls -l
总用量 1772
-rw-r--r-- 1 root root 471 10月 22 14:37 Dockerfile
-rw-r--r-- 1 root root 1740967 10月 22 13:58 redis-4.0.14.tar.gz
-rw-r--r-- 1 root root 58792 10月 22 16:30 redis.conf
-rwxr-xr-x 1 root root 82 10月 22 14:15 run_redis.sh # docker build -t 192.168.1.110/base/alpine3.13-redis4.0.14:v20211022-1631 . # docker push 192.168.1.110/base/alpine3.13-redis4.0.14:v20211022-1631

2.为redis数据存储部署PV/PVC

2.1 NFS server创建目录

mkdir /data/k8s-data/redis/datadir-pv-1 -p

2.2 编写pv/pvc yaml

apiVersion: v1
kind: PersistentVolume
metadata:
name: redis-datadir-pv-1
spec:
capacity:
storage: 20Gi
accessModes:
- ReadWriteOnce
nfs:
server: 192.168.2.10
path: /data/k8s-data/redis/datadir-pv-1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-datadir-pvc-1
namespace: yan-test
spec:
accessModes:
- ReadWriteOnce
volumeName: redis-datadir-pv-1
resources:
requests:
storage: 10Gi

2.3 创建pv/pvc并验证

创建namespace

# kubectl create ns yan-test

创建pv/pvc

# kubectl apply -f redis_pv_pvc.yaml

验证

# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
redis-datadir-pv-1 20Gi RWO Retain Bound yan-test/redis-datadir-pvc-1 78m # kubectl get pvc -n yan-test
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
redis-datadir-pvc-1 Bound redis-datadir-pv-1 20Gi RWO 78m

3.在k8s上部署redis

3.1 编写yaml

# cat redis_svc_deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
labels:
app: redis
namespace: yan-test
spec:
replicas: 1
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis-container
image: 192.168.1.110/base/alpine3.13-redis4.0.14:v20211022-1631
imagePullPolicy: IfNotPresent
volumeMounts:
- mountPath: /data/
name: redis-data
volumes:
- name: redis-data
persistentVolumeClaim:
claimName: redis-datadir-pvc-1
---
apiVersion: v1
kind: Service
metadata:
name: redis-svc
namespace: yan-test
spec:
ports:
- name: http
port: 6379
targetPort: 6379
nodePort: 36379
type: NodePort
selector:
app: redis

3.2 创建redis

# kubectl apply -f redis_svc_deploy.yaml

3.3 验证是否创建成功

root@k8-deploy:~/k8s-yaml/redis# kubectl get svc -n yan-test
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-svc NodePort 10.0.12.138 <none> 6379:36379/TCP 36m root@k8-deploy:~/k8s-yaml/redis# kubectl get pod -n yan-test
NAME READY STATUS RESTARTS AGE
redis-deployment-75b9b94b64-rtj95 1/1 Running 0 36m

4.验证redis服务及数据存储是否正常

# 通过Nodeport端口连接redis
root@k8-deploy:~/k8s-yaml/redis# redis-cli -h 192.168.2.17 -p 36379
192.168.2.17:36379> INFO
# Server
redis_version:4.0.14
redis_git_sha1:00000000
... # 写入数据测试
192.168.2.17:36379> DBSIZE
(integer) 0
192.168.2.17:36379> set a 1
OK # 查看NFSsever上redis的目录是否有redis的数据文件
root@k8-deploy:~/k8s-yaml/redis# ls /data/k8s-data/redis/datadir-pv-1/
dump.rdb redis.log

8.1 k8s使用PV/PVC做数据持久化运行redis服务,数据保存至NFS的更多相关文章

  1. k8s存储 pv pvc ,storageclass

    1.  pv  pvc 现在测试 glusterfs  nfs  可读可写, 多个pod绑定到同一个pvc上,可读可写. 2. storageclass  分成两种 (1)  建立pvc, 相当于多个 ...

  2. 通过DataWorks数据集成归档日志服务数据至MaxCompute进行离线分析

    通过DataWorks归档日志服务数据至MaxCompute 官方指导文档:https://help.aliyun.com/document_detail/68322.html但是会遇到大家在分区上或 ...

  3. 7.2 k8s 基于PV、PVC搭建zookeeper 3节点集群

    1.PV,PVC介绍 1.1.StorageClass & PV & PVC关系图 Volumes 是最基础的存储抽象,其支持多种类型,包括本地存储.NFS.FC以及众多的云存储,我们 ...

  4. Kubernetes 存储卷管理 PV&PVC(十)

    目录 一.emptyDir 二.hostPath 三.PV & PVC 1.NFS PersistentVolume 2.创建 PVC 3.创建 Pod 进行挂载 为了持久化保存容器的数据,可 ...

  5. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  6. Redis之数据持久化RDB与AOF

    Redis之数据持久化RDB与AOF https://www.cnblogs.com/zackku/p/10087701.html 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内 ...

  7. 进阶的Redis之数据持久化RDB与AOF

    大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时候,如果内存数据不保存的话,里 ...

  8. Redis数据持久化,安全

    一.redis数据持久化 由于redis是一个内存数据库,如果系统遇到致命问题需要关机或重启,内存中的数据就会丢失,这是生产环境所不能允许的.所以redis提供了数据持久化的能力. redis提供了两 ...

  9. Redis进阶:数据持久化,安全,在PHP中使用

    一.redis数据持久化 由于redis是一个内存数据库,如果系统遇到致命问题需要关机或重启,内存中的数据就会丢失,这是生产环境所不能允许的.所以redis提供了数据持久化的能力. redis提供了两 ...

随机推荐

  1. Mybatis一级缓存的锅

    问题背景 项目开发中有一个树形数据结构,不像经典组织结构树.菜单级别树,我们这个树形结构是用户后期手动建立起来的关系.因此数据库表结构为两张表:数据记录表.记录关系表,通过业务规则限制,形成的树形结构 ...

  2. Longhorn 云原生容器分布式存储 - 故障排除指南

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  3. 【数据结构】c语言实现集合的交并差运算

    待改写:存储数据类型int-->char 重复的元素可存储 功能上不完善 #include <stdio.h> #include <stdlib.h> typedef s ...

  4. 【数据结构与算法Python版学习笔记】递归(Recursion)——定义及应用:分形树、谢尔宾斯基三角、汉诺塔、迷宫

    定义 递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决. 通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数. 举例 数列求和 def ...

  5. 【数据结构与算法Python版学习笔记】图——强连通分支

    互联网 我们关注一下互联网相关的非常巨大图: 由主机通过网线(或无线)连接而形成的图: 以及由网页通过超链接连接而形成的图. 网页形成的图 以网页(URI作为id)为顶点,网页内包含的超链接作为边,可 ...

  6. 请问为什么要用三极管驱动mos,直接用mos有什么缺点呢?

    可能无法完全导通,电流可能过小使导通所需时间变长,最终导致发热严重       回复 举报     csaaa DIY七级 3# 发表于 2016-7-12 14:11:59 直接驱动mos也没什么问 ...

  7. 批量免密ssh

    参考连接:https://www.cnblogs.com/xiaoyuxixi/p/11413355.html 适用于所有密码都一样的情况下 应用场景: 在应用ansible的实际情况中,有一个很现实 ...

  8. pl/sql 远程连接oracle数据库问题(TNS:丢失连接)

    前几天还可以连接的,突然就连接失效,别的电脑也连接不上 1.ping 远程数据库的IP,可以ping通. 2.检查服务端的tnsnames.ora文件和本机客户端比较,没问题. 3.查看监听是否启动  ...

  9. 印象最深的一个bug——排查修复问题事件BEX引发的谷歌浏览器闪退崩溃异常

    前言 最近,我们部门负责项目运维的小王频频接到甲方的反馈,运行的项目使用谷歌浏览器登录后,每次点击处理2秒后,浏览器自动闪退崩溃.小王同学折腾了一个星期,还没找到问题的原因.甲方客户都把问题反馈给项目 ...

  10. 计算机网络漫谈之OSI七层模型和TCP/IP四层模型

    在 什么是网络? 中,你已经知道计算机网络是物理连接的"局域网"和工作于这个局域网上的"网络协议",并且我们的重心是网络协议.有关网络协议,按照目前的分层方式主 ...