NFS使用pv pvc解决主机ip和存储路径暴露问题

使用nfs对pod的数据持久化,进行网络存储时,需要在资源编排文件中暴露nfs主机的ip和存储路径,这样有一定弊端,为了解决这一问题引入了pv pvc。

pv:存储的资源,提供了资源访问的方式;

pvc:对资源访问,也就是访问pvc;

pvc和pv绑定之后,支持匹配模式就可以访问资源了。

pvc 资源编排文件:

[root@k8smaster pv]# cat pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dep1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        volumeMounts:
        - name: wwwroot
          mountPath: /usr/share/nginx/html
        ports:
        - containerPort: 80
      volumes:
      - name: wwwroot
        persistentVolumeClaim:
          claimName: my-pvc

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 5Gi
# 启动pvc
[root@k8smaster pv]# kubectl apply -f pvc.yaml

pv 资源编排文件

[root@k8smaster pv]# cat pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  nfs:
    path: /data/nfs
    server: nfs主机ip

启动pv资源

[root@k8smaster pv]# kubectl apply -f pv.yaml

pvc根据匹配模式寻找部署好的pv

# pvc已经绑定了pvc
[root@k8smaster pv]# kubectl get pv,pvc
NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM            STORAGECLASS   REASON   AGE
persistentvolume/my-pv   5Gi        RWX            Retain           Bound    default/my-pvc                           2m14s

NAME                           STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/my-pvc   Bound    my-pv    5Gi        RWX                           11m
[root@k8smaster pv]#

进入容器查看 上一篇博客存放在nfs中的文件是否同步成功

[root@k8smaster pv]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
nginx-dep1-58b7bf955f-bwftk   1/1     Running   0          13m
nginx-dep1-58b7bf955f-d72vb   1/1     Running   0          13m
nginx-dep1-58b7bf955f-z9cbg   1/1     Running   0          13m
[root@k8smaster pv]# kubectl exec -it nginx-dep1-58b7bf955f-z9cbg bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
root@nginx-dep1-58b7bf955f-z9cbg:/# cd /usr/
bin/     games/   include/ lib/     local/   sbin/    share/   src/
root@nginx-dep1-58b7bf955f-z9cbg:/# cd /usr/local/
bin/     etc/     games/   include/ lib/     man/     sbin/    share/   src/
root@nginx-dep1-58b7bf955f-z9cbg:/# cd /usr/share/nginx/html/
root@nginx-dep1-58b7bf955f-z9cbg:/usr/share/nginx/html# ls
a.txt  index.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用NFS创建PVPVC,并将PVC挂到Nginx应用中的完整配置文件: 1. 创建NFS服务器和共享目录 在NFS服务器上创建一个共享目录,并将其导出为NFS共享。 2. 创建PVPVC 创建PVPVC的yaml文件,示例: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs: server: nfs-server-ip path: /path/to/nfs/share --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi ``` 3. 创建Nginx Deployment和Service 创建Nginx Deployment和Service的yaml文件,示例: ```yaml kind: Deployment apiVersion: apps/v1 metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nfs-volume mountPath: "/usr/share/nginx/html" volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - name: http port: 80 targetPort: 80 type: LoadBalancer ``` 4. 应用配置文件 应用配置文件的yaml文件,示例: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: nginx-config data: nginx.conf: | worker_processes 1; events { worker_connections 1024; } http { server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; } } } --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: nfs-volume mountPath: "/usr/share/nginx/html" - name: nginx-config mountPath: "/etc/nginx/nginx.conf" subPath: nginx.conf volumes: - name: nfs-volume persistentVolumeClaim: claimName: nfs-pvc - name: nginx-config configMap: name: nginx-config ``` 其中,应用配置文件中的ConfigMap可自定义Nginx配置。 5. 应用配置文件 将以上配置文件应用到Kubernetes集群中: ``` kubectl apply -f pv-pvc.yaml kubectl apply -f nginx.yaml kubectl apply -f nginx-config.yaml ``` 这样,就完成了使用NFS创建PVPVC,并将PVC挂到Nginx应用中的完整配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值