阅读 172

Kubernetes 部署Redis主从服务(StatefulSet)

Kubernetes 部署Redis主从服务(StatefulSet)

StatefulSet介绍

暂时略...

实战案例

1. 准备启动redis-server 运行脚本

$ cat launch.sh 
#!/bin/bashPASSWORD=$(cat /etc/redis-passwd/passwd)#StatefulSet会给每个POD分配一个固定的主机网络标识符号,所以这里可以通过主机名去判断主节点if [ "${HOSTNAME}" == "redis-0" ]then
  redis-server --requirepass ${PASSWORD}else
  redis-server --slaveof redis-0.redis 6379 --masterauth ${PASSWORD} --requirepass ${PASSWORD}fi

2. 创建ConfigMap和密码配置Secret

#secret对象存放密码$ kubectl create secret generic redis-passwd --from-literal=passwd="password"#configmap对象存放运行脚本$ kubectl delete configmap redis-config
$ kubectl create configmap redis-config --from-file=launch.sh=launch.sh 
$ kubectl get configmap 
$ kubectl get configmap redis-config -o yaml

3. 创建Headless Service

$ cat headless-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: "redis"
  labels:
    app: redis
spec:
  ports:
  - port: 6379
    name: redis
  clusterIP: None 
  selector:
    app: redis

4. 创建Statefulset

$ cat statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
  namespace: default
spec:
  serviceName: "redis"
  replicas: 3
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:5-alpine
        ports:
        - containerPort: 6379
          name: redis
        volumeMounts:
        - name: data
          mountPath: /data
        - name: script
          mountPath: /script/launch.sh
          subPath: launch.sh
        - name: passwd-volume
          mountPath: /etc/redis-passwd        command:
        - sh
        - -c
        - sleep 10 && sh /script/launch.sh #这里解释下,我在本地测试环境如果不加sleep,启动redis之后会提示找不到/script/launch.sh,我不知道是不是延迟挂载之类,暂时先管,跑起来再说
      volumes:
      - name: script
        configMap:
          name: redis-config
          defaultMode: 0777
      - name: passwd-volume
        secret:
          secretName: redis-passwd
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi

5. 检查

#每个POD是否被正确分配网络标识$ kubectl run -i --tty --image busybox:1.28 dns-test --restart=Never --rmkub
If you don't see a command prompt, try pressing enter.
/ # nslookup redis-0.redis
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      redis-0.redis
Address 1: 10.244.1.112 redis-0.redis.default.svc.cluster.local
/ #

主从环境是否正常初始化
image-20210329152927560

©著作权归作者所有:来自51CTO博客作者BigQ2020的原创作品,如需转载,请注明出处,否则将追究法律责任


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐