k8s单节点redis部署+nfs+aof持久化
前言:基于量化生产环境及生产数据安全需求,redis需开启aof持久化数据到本地,此次部署rdb与aof同时开启
一、configMap资源创建
apiVersion: v1
kind: ConfigMap
metadata:
name: redis
data:
redis.conf: |+
protected-mode no
port 6379
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
logfile ""
save 900 1
save 300 10
save 60 10000
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
二、nfs部署
nfs-server端搭建
$ sudo apt-get install nfs-kernel-server
$ sudo systemctl restart nfs-kernel-server.service
$ sudo mkdir -R /data/nfs_service
$ sudo chown -R nobody.nogroup /data/nfs-service
$ sudo vim /etc/exports
/data/nfs_service 172.16.0.0/12(rw,sync,no_subtree_check) #添加授权网段的权限
$ sudo /etc/init.d/rpcbind restart
$ sudo systemctl status nfs-kernel-server.service
nfs-client端搭建
$ sudo apt-get install nfs-common
$ sudo mkdir /data/nfs-client
$ sudo showmount -e 172.21.12.24 查看nfs-server
$ sudo mount -t nfs 172.21.12.24:/data/nfs_service /data/nfs_service #临时挂载
$ sudo vim /etc/fstab
172.21.12.24:/nfs-service /data/nfs-client nfs defaults,_rnetdev 1 1 #开机自动挂载 , _rnetdev 表示主机无法挂载直接跳过
$ mount -a #fstab文件书写是否正确
三、pv、pvc搭建
apiVersion: v1
kind: PersistentVolume
metadata:
name: redis-pv
annotations:
volume.beta.kubernetes.io/storage-class: "redis-data"
spec:
capacity:
storage: 300Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 172.21.12.24
path: "/data/nfs-service"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: redis-pvc
annotations:
volume.beta.kubernetes.io/storage-class: "redis-data"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 300Gi
四、deployment部署redis
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "2"
name: xquant-redis
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: xquant-redis
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: xquant-redis
spec:
containers:
- image: redis:5.0.3
imagePullPolicy: IfNotPresent
command: ["redis-server","/etc/redis/redis.conf"]
name: xquant-redis
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- name: redis-config
mountPath: /etc/redis/redis.conf
subPath: redis.conf
- name: redis-pvc
mountPath: /data
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- name: redis-config
configMap:
name: redis
items:
- key: redis.conf
path: redis.conf
- name: redis-nfs
persistentVolumeClaim:
claimName: redis-pvc
至此,整个redis部署及aof持久化就大功告成啦!