改正
不需要手动创建
https://www.cnblogs.com/hsyw/p/16754185.html
2.创建configmap
#开启AOF持久化模式
appendonly yes
#集群模式打开
cluster-enabled yes
#节点文件路径
cluster-config-file /var/lib/redis/nodes.conf
#节点超时设置
cluster-node-timeout 5000
#AOF持久化文件存在的位置
dir /var/lib/redis
#开启的端口
port 6379
kubectl create configmap redis-conf --from-file=redis.conf --namespace=my-namespace
redis不能够加注释在同一行
https://github.com/redis/redis/blob/7.0/redis.conf
3.创建headless service
Headless service是StatefulSet实现稳定网络标识的基础
访问方式 通过dns访问
http://my-statefulset-0.my-statefulset.svc.cluster.local
my-statefulset-0 为pod主机名
my-statefulset 为statefulset名字
vim headless-service.yml
apiVersion: v1
kind: Service
metadata:
name: redis-service
namespace: xxxx
labels:
app: redis
spec:
ports:
- name: redis-port
port: 6379
clusterIP: None
selector:
app: redis
appCluster: redis-cluster
4.创建redis-cluster statefulset
[root@rke ~]# cat /home/docker/redis/redis.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis-app
namespace: xxx
labels:
app: redis
appCluster: redis-cluster
spec:
serviceName: "redis-service"
selector: # 这里是选择器字段
matchLabels:
app: redis
replicas: 3
template:
metadata:
labels:
app: redis
appCluster: redis-cluster
spec:
terminationGracePeriodSeconds: 20
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- redis
topologyKey: kubernetes.io/hostname
containers:
- name: redis
image: "redis:7.0"
command:
- "redis-server" #redis启动命令
args:
- "/etc/redis/redis.conf" #redis-server后面跟的参数,换行代表空格
- "--protected-mode" #允许外网访问
- "no"
# command: redis-server /etc/redis/redis.conf --protected-mode no
resources: #资源
requests: #请求的资源
cpu: "100m" #m代表千分之,相当于0.1 个cpu资源
memory: "100Mi" #内存100m大小
ports:
- name: redis
containerPort: 6379
protocol: "TCP"
- name: cluster
containerPort: 16379
protocol: "TCP"
volumeMounts:
- name: "redis-conf" #挂载configmap生成的文件
mountPath: "/etc/redis" #挂载到哪个路径下
- name: "redis-data" #挂载持久卷的路径
mountPath: "/var/lib/redis"
volumes:
- name: "redis-conf" #引用configMap卷
configMap:
name: "redis-conf"
items:
- key: "redis.conf" #创建configMap指定的名称
path: "redis.conf" #重命名的文件 /etc/redis/redis.conf
volumeClaimTemplates: #进行pvc持久卷声明,
- metadata:
name: redis-data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 200M
storageClassName: "nfs-client"
selector:
matchLabels:
pv: redis-demo
5.初始化redis集群
kubectl run -i --tty centos --image=centos --restart=Never /bin/bash
cat >> /etc/yum.repo.d/epel.repo<<'EOF'
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
EOF
yum -y install redis-trib.noarch bind-utils-9.9.4-72.el7.x86_64
redis-trib create --replicas 1 \
`dig +short redis-app-0.redis-service.default.svc.cluster.local`:6379 \
`dig +short redis-app-1.redis-service.default.svc.cluster.local`:6379 \
`dig +short redis-app-2.redis-service.default.svc.cluster.local`:6379 \
`dig +short redis-app-3.redis-service.default.svc.cluster.local`:6379 \
`dig +short redis-app-4.redis-service.default.svc.cluster.local`:6379 \
`dig +short redis-app-5.redis-service.default.svc.cluster.local`:6379
#create: 创建一个新的集群
#--replicas 1 : 创建的集群中每个主节点分配一个从节点,达到3主3从
#后面跟的就是redis实例所在的位置
6.测试
kubectl exec -it redis-app-2 /bin/bash
/usr/local/bin/redis-cli -c
cluster info