k8s 中 nfs作为存储的三种方式
阅读原文时间:2023年07月09日阅读:4

1、安装nfs服务。直接给命令

yum install nfs-utils

vim /etc/exports
/data/k8s/ 172.16.1.0/24(sync,rw,no_root_squash)

systemctl start nfs; systemctl start rpcbind
systemctl enable nfs

测试:
yum install nfs-utils
showmount -e 172.16.1.131

2、nfs 可以直接作为存储卷使用,下面是一个生产环境部署的YAML配置文件。在此示例中,redis在容器中的持久化数据保存在/data目录下;存储卷使用nfs,nfs的服务地址为:192.168.8.150,存储路径为:/k8s-nfs/redis/data。容器通过volumeMounts.name的值确定所使用的存储卷。生产中一般挂载日志以及一些永久存储的文件使用

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: redis
spec:
selector:
matchLabels:
app: redis
revisionHistoryLimit: 2
template:
metadata:
labels:
app: redis
spec:
containers:

应用的镜像

  - image: redis  
    name: redis  
    imagePullPolicy: IfNotPresent

应用的内部端口

    ports:  
    - containerPort: 6379  
      name: redis6379  
    env:  
    - name: ALLOW\_EMPTY\_PASSWORD  
      value: "yes"  
    - name: REDIS\_PASSWORD  
      value: "redis"  

持久化挂接位置,在docker中

    volumeMounts:  
    - name: redis-persistent-storage  
      mountPath: /data  
  volumes:  

宿主机上的目录

  - name: redis-persistent-storage  
    nfs:  
      path: /data/k8s  
      server: 172.16.1.131

3、nfs作为在Kubernetes当前版本的中,可以创建类型为nfs的持久化存储卷,用于为PersistentVolumClaim提供存储卷。在下面的PersistenVolume YAML配置文件中,定义了一个名为nfs-pv的持久化存储卷,此存储卷提供了5G的存储空间,只能由一个PersistentVolumClaim进行可读可写操作。此持久化存储卷使用的nfs服务器地址为192.168.5.150,存储的路径为/tmp。

这里简单提供下使用方法。具体可以查看我的博客中动态pv和静态PV的区别和使用

[root@VM_0_48_centos prometheus]# cat mypv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/k8s
server: 172.19.0.14

[root@VM_0_48_centos prometheus]# cat mypvc.yaml ###会根据大小和类型自动匹配到上面的PV
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: kube-system
name: prometheus-claim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi

[root@VM_0_48_centos prometheus]# kubectl get pv,pvc -n kube-system
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pv001 10Gi RWX Retain Bound kube-system/prometheus-claim 17m

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/prometheus-claim Bound pv001 10Gi RWX

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: prometheus

namespace``: kube-system

labels:

k8s-app: prometheus

kubernetes.io/cluster-service: "true"

addonmanager.kubernetes.io/mode: Reconcile

version: v2.2.1

spec:

serviceName: "prometheus"

replicas: 1

podManagementPolicy: "Parallel"

updateStrategy:

type: "RollingUpdate"

selector:

matchLabels:

k8s-app: prometheus

template:

metadata:

labels:

k8s-app: prometheus

annotations:

scheduler.alpha.kubernetes.io/critical-pod: ''

spec:

priorityClassName: system-cluster-critical

serviceAccountName: prometheus

initContainers:

- name: "init-chown-data"

image: "busybox:latest"

imagePullPolicy: "IfNotPresent"

command: [``"chown"``, "-R"``, "65534:65534"``, "/data"``]

volumeMounts:

- name: prometheus-data

mountPath: /data

subPath: ""

containers:

- name: prometheus-server-configmap-reload

image: "jimmidyson/configmap-reload:v0.1"

imagePullPolicy: "IfNotPresent"

args:

- --volume-dir=/etc/config

- --webhook-url=http:``//localhost:9090/-/reload

volumeMounts:

- name: config-volume

mountPath: /etc/config

readOnly: true

resources:

limits:

cpu: 10m

memory: 10Mi

requests:

cpu: 10m

memory: 10Mi

- name: prometheus-server

image: "prom/prometheus:v2.2.1"

imagePullPolicy: "IfNotPresent"

args:

- --config.file=/etc/config/prometheus.yml

- --storage.tsdb.path=/data

- --web.console.libraries=/etc/prometheus/console_libraries

- --web.console.templates=/etc/prometheus/consoles

- --web.enable-lifecycle

ports:

- containerPort: 9090

readinessProbe:

httpGet:

path: /-/ready

port: 9090

initialDelaySeconds: 30

timeoutSeconds: 30

livenessProbe:

httpGet:

path: /-/healthy

port: 9090

initialDelaySeconds: 30

timeoutSeconds: 30

# based on 10 running nodes with 30 pods each

resources:

limits:

cpu: 200m

memory: 1000Mi

requests:

cpu: 200m

memory: 1000Mi

volumeMounts:

- name: config-volume

mountPath: /etc/config

- name: prometheus-data

mountPath: /data

subPath: ""

terminationGracePeriodSeconds: 300

volumes:

- name: config-volume

configMap:

name: prometheus-config

- name: prometheus-data

persistentVolumeClaim:   #申明使用静态PVC永久化存储

claimName: prometheus-claim

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器