k8s数据挂载

Posted Dream_it_possible!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s数据挂载相关的知识,希望对你有一定的参考价值。

nfs挂载

mysql-data挂载到/data/dev/mysql, 采用nfs的形式:

volumes:
  - name: mysql-data
    nfs:
      server: localhost
      path: /data/dev/mysql
  - name: mysql-dev-conf
    configMap:
      name: my.cnf

nfs出现挂载的问题

        如果出现挂载的问题,参考我的另一篇文:

[nfs无法挂载问题] mount.nfs: access denied by server while mounting localhost:/data/dev/mysql_ Dream_it_possible!的博客-CSDN博客

pvc挂载

        pvc卷是k8s容器存储的另一种形式,全程persitVolumeClaim, 可声明指定容量的pv卷,然后与pvc卷绑定,服务在挂载的时候只需要指定对应的pvc即可。

        比如我要声明一个pv和一个pvc,创建mysql-pvc.yaml,  pvc通过storageClassName绑定pv

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-01-pvc
spec:
  accessModes:
    - ReadWriteOnce   # 只能被一个容器访问,如果能被多个容器访问那么设置为ReadWriteMany
  resources:
    requests:
      storage: 3Gi
  storageClassName: standard
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: 3g-pv-1
spec:
  capacity:
    storage: 3Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Delete
  storageClassName: standard
  cinder:
    volumeID: a198bce4-ba0f-4d13-8f0c-55e31212a8c9 # 改路径为映射到本机的  /var/lib/kubelet/plugins/kubernetes.io/cinder/mounts
    fsType: ext4

 可通过storageclass来查看pvc对应的pv是哪个。

status字段为Bound时表示该pvc正在被某个服务所使用,使用我们刚创建的pvc方法很简单,只需要在volums属性里声明persistentVolumeClaim即可。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-01
  labels:
    app: mysql-01
spec:
  replicas: 1 # pod数量
  selector:
    matchLabels:
      app: mysql-01
  template:
    metadata:
      labels:
        app: mysql-01
    spec:
      containers:
        - name: mysql-01
          image: mysql:5.7
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              memory: "512Mi"
              cpu: "1500m"
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
          volumeMounts:
            - name: mysql-01-persistent-storage
              mountPath: /var/lib/mysql
            - name: mysql-01-conf
              mountPath: /etc/mysql
      volumes:
        - name: mysql-01-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-01-pvc
        - name: mysql-01-conf
          configMap:
            name: my.cnf

启动成功后,那么pvc那边会的status状态为显示为bound。

pvc挂载会出现的问题

         centos 7 会出现声明的pv里的VolumeID在/var/lib/kubelet/plugins/kubernetes.io/cinder/mounts路径不存在的情况。

        如果没有 /kubernetes.io/cinder/mounts目录,那么需要手动创建,然后创建的volumeID为mounts下的目录,该目录需要具备读写权限才行。

以上是关于k8s数据挂载的主要内容,如果未能解决你的问题,请参考以下文章

k8s数据挂载

[k8s]使用nfs挂载pod的应用日志文件

CenterOS下使用NFS远程目录挂载

k8s日志收集 - 利用HOSTNAME环境变量对多个pod挂载不同目录方案

microk8s上给Pod挂载NFS

k8s之存储抽象nfs挂载