利用K8S Statefulset搭建Etcd集群 - PVC存储

概述

在测试过程中发现,直接使用本地存储,当节点机器损坏了,对应机器的etcd数据也丢失了,故而做了利用K8S PV,PVC以及NFS来存储数据的尝试,经过一番折腾,测试成功,博文记录,用以备忘。

本地存储可以参考博文- 利用K8S Statefulset搭建Etcd集群 - 本地存储

测试环境

minikube
Client Version: v1.29.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.28.3

NFS配置

  1. 根据参考链接搭建NFS服务器
  2. 创建NFS目录
mkdir -p /{etcd0,etcd1,etcd2}
chmod 666 /{etcd0,etcd1,etcd2} #可选操作
  1. 修改NFS配置
vim /etc/exports

/etcd0 *(rw,no_root_squash,sync) # *号表示所有机器都可以访问
/etcd1 *(rw,no_root_squash,sync)
/etcd2 *(rw,no_root_squash,sync)
  1. 重新加载配置
exportfs  -rv  

yaml配置

pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: etcd0-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /etcd0
    server: 192.168.52.128  #指定nfs目录所在的机器的地址
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: etcd1-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /etcd1
    server: 192.168.52.128  #指定nfs目录所在的机器的地址
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: etcd2-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs
  nfs:
    path: /etcd2
    server: 192.168.52.128  #指定nfs目录所在的机器的地址

pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: etcd0-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: etcd1-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: etcd2-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: nfs

cluster.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: etcd0
spec:
  replicas: 1
  selector:
    matchLabels:
      name: etcd-operator
  serviceName: etcdsrv
  template:
    metadata:
      labels:
        name: etcd-operator
    spec:
      containers:
      - name: app
        image: quay.io/coreos/etcd:v3.5.9
        imagePullPolicy: Always
        volumeMounts:
        - mountPath: /data/etcd_data
          name: etcd-volume
        command:
          - /usr/local/bin/etcd
          - --data-dir
          - /data/etcd_data
          - --auto-compaction-retention
          - '1'
          - --quota-backend-bytes
          - '8589934592'
          - --listen-client-urls
          - http://0.0.0.0:2379
          - --advertise-client-urls
          - http://etcd0-0.etcdsrv:2379
          - --listen-peer-urls
          - http://0.0.0.0:2380
          - --initial-advertise-peer-urls
          - http://etcd0-0.etcdsrv:2380
          - --initial-cluster-token
          - etcd-cluster
          - --initial-cluster
          - etcd0=http://etcd0-0.etcdsrv:2380,etcd1=http://etcd1-0.etcdsrv:2380,etcd2=http://etcd2-0.etcdsrv:2380
          - --initial-cluster-state
          - new
          - --enable-pprof
          - --election-timeout
          - '5000'
          - --heartbeat-interval
          - '250'
          - --name
          - etcd0
          - --logger
          - zap
#      volumes:
#        - name: etcd-volume
#          hostPath:
#            path: /var/tmp/etcd2
#            type: Directory
      volumes:  
        - name: etcd-volume
          persistentVolumeClaim:
            claimName: etcd0-pvc
 ...

Q&A

Q: 第一次NFS的配置如下

/etcd0 192.168.52.128/24(rw,no_root_squash,sync) 
/etcd1 192.168.52.128/24(rw,no_root_squash,sync)
/etcd2 192.168.52.128/24(rw,no_root_squash,sync)

在创建pv资源的时候,会报错:连接拒绝
A:
因为minikube运行的docker和主机IP并不是同一网段,但是配置里面又限制了对应的IP地址,故而导致访问不了
将配置中的
192.168.52.128/24改成 “*” 即可

参考链接

centos搭建NFS服务器
K8s持久化存储PV和PVC(通俗易懂)

相关推荐

  1. 利用K8S StatefulsetEtcd - PVC存储

    2024-03-25 06:52:02       19 阅读
  2. 利用K8S StatefulsetEtcd - 本地存储

    2024-03-25 06:52:02       22 阅读
  3. DockerEtcd

    2024-03-25 06:52:02       18 阅读
  4. (5)快速k8s

    2024-03-25 06:52:02       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-25 06:52:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-25 06:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-25 06:52:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-25 06:52:02       20 阅读

热门阅读

  1. AtCoder - C - Many Replacement (字符串)

    2024-03-25 06:52:02       19 阅读
  2. CloudCompare 二次开发(29)——最小二乘拟合平面

    2024-03-25 06:52:02       19 阅读
  3. 卷积神经网络基础

    2024-03-25 06:52:02       23 阅读
  4. 基于PyTorch深度学习实战入门系列-PyTorch基础全

    2024-03-25 06:52:02       20 阅读
  5. jQuery选择器

    2024-03-25 06:52:02       19 阅读
  6. Android 10.0 mt8788关于摄像头方向旋转功能实现

    2024-03-25 06:52:02       17 阅读
  7. haproxy和keepalived的区别与联系

    2024-03-25 06:52:02       19 阅读
  8. 自定义android音频焦点

    2024-03-25 06:52:02       19 阅读
  9. 关于C/C++,Linux/MacOS/Windows 平台虚拟内存分配

    2024-03-25 06:52:02       17 阅读
  10. C语言学习笔记day14

    2024-03-25 06:52:02       14 阅读