K8S数据持久化

K8S实现pod数据持久化

前言

K8S启动的pod属于容器,当pod删除或者重建,原容器中的数据将丢失,这将是严重的安全事故,本文将讲述K8S数据持久化实现的方法。

1.实现方式

采用nfs、pv与pvc组合的方式实现数据持久化,同时实现多节点pod数据一致性。

2.实现过程

2.1 部署nfs服务

#安装部署nfs

 #主节点操作
 #安装nfs,从节点安装nfs-utils即可
 yum install -y nfs-utils rpcbind
 #创建nfs共享目录
 mkdir /home/nfs/ ; chmod -R 777 /home/nfs 
 #配置NFS服务程序的配置文件/etc/exports。
 echo "/home/nfs/   172.25.79.109/20(rw,sync,no_all_squash,no_root_squash)" > /etc/exports #此处填写需要加入的从节点IP

 #启动rpcbind服务并验证
 systemctl start  rpcinfo
 systemctl enable  rpcinfo
 rpcinfo -p localhost 
  
 #所有节点启动nfs服务
 systemctl start nfs.service
 systemctl enable nfs.service
  
 #从节点操作
 showmount -e 172.25.79.108 #查看是否加载主节点配置,此处填写主节点IP
     Export list for 172.25.79.108:
     /home/nfsdir 172.25.79.109/20

 #从节点创建nfs目录并挂载
 mkdir /home/nfs ;  mount 172.25.79.108:/home/nfs /home/nfs     
 #设置开机自动挂载
 echo 'mount -t nfs 172.25.79.108:/home/nfs /home/nfs' > /etc/rc.d/rc.local
 #写文件验证成功,数据互通。(过程略)

2.2 在K8S中配置pv,pvc

1.概念
K8S中pv是对底层存储的抽象化,相当于逻辑卷中的LV。
K8S中pvc是描述Pod想要使用的持久化属性,比如存储大小、读写权限。
2.配置

 #创建pv的yaml文件
 vim nginx-pv.yaml  #拿nginx举例
 
 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: pv-nginx   #pv的名字
 spec:
   capacity:
     storage: 10Gi  #使用的空间大小
   volumeMode: Filesystem
   accessModes:
   - ReadWriteMany
   persistentVolumeReclaimPolicy: Retain
   storageClassName: nfs-nginx  #标识,用于pvc绑定pv使用
   nfs:
     path: /home/nfs/pv-nginx  #创建的nfs的路径, 
     server: 172.25.79.109      #服务器的地址 
     
 #创建pvc的yaml文件
 vim nginx-pvc.yaml
 
 kind: PersistentVolumeClaim
 apiVersion: v1
 metadata:
   name: nginx-pvc  
 spec:
   storageClassName: nfs-nginx  #填写pv的storageClassName项的值。
   accessModes:
     - ReadWriteMany
   resources:
     requests:
       storage: 5Gi   #分配给nginx的储存大小
     
#启动pv、pvc
kubectl apply -f nginx-pv.yaml
kubectl apply -f nginx-pvc.yaml
#查看pv、pvc
kubectl get pv,pvc

2.3 pod绑定pvc

vim nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: blog-nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: blog-nginx
      tier: frontend
  template:
    metadata:
      labels:
        app: blog-nginx
        tier: frontend
    spec:
      nodeSelector:
        nginxssr: ssr
      containers:
      - name: nginx
        image: nginx:v2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: nginx
        - containerPort: 443
          name: nginx-ssl
        volumeMounts:
        - name: config
          mountPath: /etc/nginx/conf.d/
        - name: dir
          mountPath: /var/www/
        resources:
          requests:
            memory: 300Mi
            cpu: 200m
          limits:
            memory: 800Mi
            cpu: 700m
      volumes:
      - name: config
        configMap:
          name: nginx-wp-config
      - name: dir
        persistentVolumeClaim:
          claimName: nginx-pvc   #填写pvc的名称

你可能感兴趣的:(kubernetes,linux,docker,nfs)