安装nfs

我这边就选择k8s-master作为nfs存储了

yum install -y nfs-utils
#在 /etc/exports 添加
/nfs/volumes *(async,insecure,no_root_squash,no_subtree_check,rw)
# 创建nfs挂载目录
mkdir -p /nfs/volumes
#启动服务
systemctl start rpcbind & systemctl enable rpcbind
systemctl start nfs-server & systemctl enable nfs-server
#查看nfs状态
showmount -e k8s-master
#创建存储
cd /nfs/volumes
mkdir data_redis
mkdir conf_redis #需要准备一份redis配置文件,配置文件里面相关的存储数据、pid、log等我是放在容器的/data下的

创建PV

apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-redis
spec:
volumeMode: Filesystem
capacity:
storage: 2Gi
accessModes:
- ReadWriteMany
nfs:
path: /nfs/volumes/data_redis
server: k8s-master

创建PV

kubectl apply -f pv-redis.yaml

创建pvc

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-redis
spec:
accessModes:
- ReadWriteMany
volumeMode: Filesystem
resources:
requests:
storage: 2Gi

创建pvc

kubectl apply -f pvc-redis.yaml

创建configmap

kubectl create configmap redis-configmap --from-file=/nfs/volumes/conf_redis/redis.conf

创建headless

apiVersion: v1
kind: Service
metadata:
name: headless-redis
spec:
clusterIP: None
selector:
app: statefulset-redis
ports:
- port: 6379

创建headless

kubectl apply -f headless-redis.yaml

创建statefulset

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-redis
spec:
serviceName: headless-redis
selector:
matchLabels:
app: statefulset-redis
template:
metadata:
labels:
app: statefulset-redis
spec:
volumes:
- name: redis-conf
configMap:
name: redis-configmap
- name: data-redis
persistentVolumeClaim:
claimName: pvc-redis
containers:
- name: redis
image: redis:5.0.5
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data/redis.conf
name: redis-conf
subPath: redis.conf
- mountPath: /data
name: data-redis
command:
- redis-server
- /data/redis.conf

创建headless

kubectl apply -f statefulset-redis.yaml

问题

在部署statefulset的时候出现下面这个问题,pod的状态一会completed,一会CrashLoopBackOff


解决:花了很多时间去研究,describe和log指令也没有提供有用的报错信息,最后发现是配置文件的daemonize配置项的问题,因为redis.conf是我之前改过的,daemonize默认是no,我改成了yes会出现这种问题,所以daemonize保持默认的no即可。