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.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)传递给容器

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值