1.Dockfile文件信息
[root@localhost7C redis]# ll
-rwxr-xr-x 1 root root 132 4月 3 13:49 build-command.sh
-rw-r--r-- 1 root root 489 4月 3 13:51 Dockerfile
-rw-r--r-- 1 root root 1740967 4月 7 2020 redis-4.0.14.tar.gz
-rw-r--r-- 1 root root 58783 4月 3 13:44 redis.conf
-rwxr-xr-x 1 root root 85 4月 7 2020 run_redis.sh
[root@localhost7C redis]# cat Dockerfile
#Redis Image
FROM harbor.zzhz.com/baseimages/magedu-centos-base:7.6.1810
MAINTAINER zhangshijie "zhangshijie@magedu.net"
ADD redis-4.0.14.tar.gz /usr/local/src
RUN ln -sv /usr/local/src/redis-4.0.14 /usr/local/redis && cd /usr/local/redis && make && cp src/redis-cli /usr/sbin/ && cp src/redis-server /usr/sbin/ && mkdir -pv /data/redis-data
ADD redis.conf /usr/local/redis/redis.conf
ADD run_redis.sh /usr/local/redis/run_redis.sh
EXPOSE 6379
CMD ["/usr/local/redis/run_redis.sh"]
[root@localhost7C redis]# cat run_redis.sh
#!/bin/bash
/usr/sbin/redis-server /usr/local/redis/redis.conf
tail -f /etc/hosts
[root@localhost7C redis]# grep -Ev '^[ ]*$|^#' redis.conf
bind 0.0.0.0
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo yes
save 900 1
save 5 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error no
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis-data
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
requirepass 123456
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
[root@localhost7C redis]# cat build-command.sh
#!/bin/bash
TAG=$1
docker build -t harbor.zzhz.com/linux39/redis:${TAG} .
sleep 3
docker push harbor.zzhz.com/linux39/redis:${TAG}
[root@localhost7C redis]# chmod +x ./*.sh
[root@localhost7C redis]# ./build-command.sh v1
2.安装nfs服务器,基于PV和PVC作为后端存储
[root@localhost7B ]# cat /etc/exports
/data/k8sdata *(rw,no_root_squash)
[root@localhost7B ]# mkdir /data/k8sdata/magedu/redis-datadir-1
[root@localhost7B ]# systemctl restart nfs-server.service
#写数据测试
mount -t nfs 192.168.80.110:/data/k8sdata/magedu/redis-datadir-1 /mnt
umount /mnt/
[root@localhost7C redis]# tree
.
├── pv
│ ├── redis-persistentvolumeclaim.yaml
│ └── redis-persistentvolume.yaml
└── redis.yaml
#创建PV/PVC保存数据,实现k8s中运行Redis服务
[root@localhost7C redis]# cat pv/redis-persistentvolume.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: redis-datadir-pv-1
namespace: magedu
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
nfs:
path: /data/k8sdata/magedu/redis-datadir-1
server: 192.168.80.110
[root@localhost7C redis]# cat pv/redis-persistentvolumeclaim.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-datadir-pvc-1
namespace: magedu
spec:
volumeName: redis-datadir-pv-1
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
3. 清单
[root@localhost7C redis]# cat redis.yaml
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
labels:
app: devops-redis
name: deploy-devops-redis
namespace: magedu
spec:
replicas: 1
selector:
matchLabels:
app: devops-redis
template:
metadata:
labels:
app: devops-redis
spec:
containers:
- name: redis-container
image: harbor.zzhz.com/linux39/redis:v1
imagePullPolicy: Always
volumeMounts:
- mountPath: "/data/redis-data/"
name: redis-datadir
volumes:
- name: redis-datadir
persistentVolumeClaim:
claimName: redis-datadir-pvc-1
---
kind: Service
apiVersion: v1
metadata:
labels:
app: devops-redis
name: srv-devops-redis
namespace: magedu
spec:
type: NodePort
ports:
- name: http
port: 6379
targetPort: 6379
nodePort: 36379
selector:
app: devops-redis
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
#登录测试
![]()
4.部署测试
[root@localhost7C redis]# kubectl apply -f ./
[root@localhost7C redis]# kubectl exec -it -n magedu deploy-devops-redis-7556995d45-cxs58 bash
[root@deploy-devops-redis-7556995d45-cxs58 /]# redis-cli -h 127.0.0.1 -p 6379 -a 123456
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6379> set key1 vv1
OK
127.0.0.1:6379> set key2 v2
OK
127.0.0.1:6379> set key3 v3
OK
127.0.0.1:6379> set key4 v4
OK
127.0.0.1:6379> set key5 v5
OK
127.0.0.1:6379> get key1
"vv1"
验证nfs服务器Redis的快照数据:
[root@localhost7B ~]# ll /data/k8sdata/magedu/redis-datadir-1/
-rw-r--r-- 1 root root 144 4月 3 14:31 dump.rdb
验证Redis数据高可用:
删除redis的pod,然后重新创建pod验证新生成的pod中是否有之前的数据,可能有丢失数据的几率,取决于是否
开启AOF或者dump数据的功能及设置:
[root@localhost7C redis]# kubectl delete -f redis.yaml
[root@localhost7C redis]# kubectl get pod -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system metrics-server-ccccb9bb6-22ssw 1/1 Running 1 5d3h 10.20.6.18 192.168.80.150 <none> <none>
kubernetes-dashboard dashboard-metrics-scraper-74bbb59f48-t6jj2 1/1 Running 1 6d4h 10.20.6.19 192.168.80.150 <none> <none>
kubernetes-dashboard kubernetes-dashboard-bc4695695-t44sv 1/1 Running 3 5d3h 10.20.6.17 192.168.80.150 <none> <none>
magedu deploy-devops-redis-7556995d45-cxs58 1/1 Terminating 0 19m 10.20.5.47 192.168.80.160 <none> <none>
[root@localhost7C redis]# kubectl apply -f redis.yaml
[root@localhost7C redis]# kubectl exec -it -n magedu deploy-devops-redis-7556995d45-j6v4l bash
[root@deploy-devops-redis-7556995d45-j6v4l /]# redis-cli -h 127.0.0.1 -p 6379 -a 123456
Warning: Using a password with '-a' option on the command line interface may not be safe.
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> get key4
"v4"