4. K8S发布redis主从
一、创建配置文件1.创建master的配置文件[root@node4 ~]# mkdir /usr/local/redis/conf/ -p[root@node4 ~]# cd /usr/local/redis/conf/[root@node4 conf]# cat master-redis.confbind 0.0.0.0requirepass 1234562.创建slave配置文件[root@
·
一、创建配置文件
1.创建master的配置文件
[root@node4 ~]# mkdir /usr/local/redis/conf/ -p
[root@node4 ~]# cd /usr/local/redis/conf/
[root@node4 conf]# cat master-redis.conf
bind 0.0.0.0
requirepass 123456
2.创建slave配置文件
[root@node4 conf]# cat slave-redis.conf
bind 0.0.0.0
replicaof master-redis-svc 4000
masterauth 123456
注意:
master-redis-svc: 这是master的服务名称。服务名称可以正确的解析为master的 IP地址
4000:这是master服务的端口
二、创建configmap
1.创建master的configmap
[root@node4 ~]# cd /usr/local/redis/conf/
[root@node4 ~]# kubectl crate configmap configredis --from-file=master-redis.conf
2.创建slave的configmap
[root@node4 ~]# kubectl crate configmap slave-configredis --from-file=slave-redis.conf
3.查看configmap
[root@node4 ~]# kubectl get cm
NAME DATA AGE
configredis 1 174m
slave-configredis 1 38m
4.查看详细信息
[root@node4 ~]# kubectl describe cm
Name: configredis
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
master-redis.conf: #文件名就是key
----
bind 0.0.0.0
requirepass 123456
Events: <none>
Name: slave-configredis
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
slave-redis.conf: ##文件名就是key
----
bind 0.0.0.0
replicaof master-redis-svc 4000
masterauth 123456
Events: <none>
三、创建服务
1.创建master的服务的YAML文件
[root@node4 ~]# cd /usr/local/redis/
[root@node4 redis]# cat mredis-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: master-redis-svc #这里是服务的名称,对应redis配置文件中指定的 master名称
spec:
selector:
app: master-redis #匹配label app为master-redis的pod作为服务的后端
ports:
- protocol:
port: 4000 #服务的端口
targetPort: 6379 #服务的4000端口对应容器里的6379端口
创建服务
[root@node4 redis]# kubectl create -f mredis-svc.yaml
2.创建slave的服务的YAML文件
apiVersion: v1
kind: Service
metadata:
name: slave-redis-svc
spec:
selector:
app: slave-redis
ports:
- protocol:
port: 4001
targetPort: 6379
创建服务
kubectl create -f sredis-svc.yaml
3.查看服务是否创建成功
[root@node4 redis]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d7h
master-redis-svc ClusterIP 10.105.126.11 <none> 4000/TCP 116m
slave-redis-svc ClusterIP 10.110.180.77 <none> 4001/TCP 4h12m
4.查看service是否匹配到对应的pod
[root@node4 redis]# kubectl get pod -o wide |awk '{print $1,$6}'
NAME IP
master-redis-58d55c55c6-4t965 172.17.0.6
slave-redis-77456c7c8b-ptfs5 172.17.0.5
[root@node4 redis]# kubectl describe svc master-redis-svc
Name: master-redis-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=master-redis
Type: ClusterIP
IP Families: <none>
IP: 10.105.126.11
IPs: <none>
Port: <unset> 4000/TCP
TargetPort: 6379/TCP
Endpoints: 172.17.0.6:6379 #这里已经匹配到了对应的pod
Session Affinity: None
Events: <none>
[root@node4 redis]# kubectl describe svc slave-redis-svc
Name: slave-redis-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=slave-redis
Type: ClusterIP
IP Families: <none>
IP: 10.110.180.77
IPs: <none>
Port: <unset> 4001/TCP
TargetPort: 3679/TCP
Endpoints: 172.17.0.5:3679 #这里已经匹配到了对应的po
Session Affinity: None
Events: <none>
四、创建pod
1.创建master pod的YAML文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: master-redis
spec:
selector:
matchLabels:
app: master-redis
template:
metadata:
labels:
app: master-redis
spec:
containers:
- name: redis
args: #将配置文件的路径传递给容器的启动命令
- /etc/redis/master-redis.conf
image: redis
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /etc/redis/ #这里是挂载到容器中具体目录
name: master-redis-conf #这里是要挂载的“卷”的名称
volumes:
- name: master-redis-conf #这是卷的名称 上边挂载的就是这个卷
configMap: #这个卷是由configmap 中的configredis组成的
name: configredis
创建pod
[root@node4 redis]# kubectl create -f mredis-pod.yaml
2.创建slave pod的YAML文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: slave-redis
spec:
selector:
matchLabels:
app: slave-redis
template:
metadata:
labels:
app: slave-redis
spec:
containers:
- name: redis
args: #将配置文件的路径传递给容器的启动命令
- /etc/redis/slave-redis.conf
image: redis
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /etc/redis/
name: slave-redis-conf
volumes:
- name: slave-redis-conf
configMap:
name: slave-configredis
创建pod
kubectl create -f sredis-pod.yaml
五、测试
[root@node4 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
master-redis-5f568ddb6f-mtrml 1/1 Running 0 15h
slave-redis-7798b6df5f-nknb2 1/1 Running 0 15h
1.进入master redis
[root@node4 ~]# kubectl exec -it master-redis-5f568ddb6f-mtrml -- bash
root@master-redis-5f568ddb6f-mtrml:/data# ls
dump.rdb
127.0.0.1:6379> auth 123456
OK
127.0.0.1:6379> set test haha
OK
2.进入master slave
[root@node4 ~]# kubectl exec -it slave-redis-7798b6df5f-nknb2 -- bash
root@slave-redis-7798b6df5f-nknb2:/data# ls
dump.rdb
root@slave-redis-7798b6df5f-nknb2:/data# redis-cli
127.0.0.1:6379> get test
"haha"
redis主从已经建立完毕
六、特别说明
1.镜像说明
此架构中使用的redis镜像 非自定义封装镜像,使用的是官方redis镜像。
redis版本为6.2.4
root@slave-redis-7798b6df5f-nknb2:/data# redis-server -v
Redis server v=6.2.4 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=cdd247b73d61004a
2.参数说明
在创建pod的yaml文件中都加了args参数,将配置文件在pod中的路径传递了进去
创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要设置命令,就填写在配置文件的command字段下,如果要设置命令的参数,就填写在配置文件的 args 字段下。因为容器中redis的启动命令是:
redis-server 配置文件路径
因为我们的配置文件是自定义的配置文件。并且挂载到了容器中。所以我们需要将自定义配置文件的具体路径作为参数(args)传递给容器
更多推荐
已为社区贡献2条内容
所有评论(0)