前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >研发工程师玩转Kubernetes——使用local型PV在不同Pod上共享数据

研发工程师玩转Kubernetes——使用local型PV在不同Pod上共享数据

作者头像
方亮
发布2023-08-10 15:08:48
1860
发布2023-08-10 15:08:48
举报
文章被收录于专栏:方亮方亮

PV清单

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata:
  name: default-storage-class-pv
spec:
  capacity:
    storage: 100Ki
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /tmp/default_storage_class_pv
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - ubuntud

事先我们在Node ubuntud上创建一个空的目录/tmp/default_storage_class_pv。然后限定其大小是100K(后面测试发现不能控制住)。

PVC清单

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: default-storage-class-pvc
spec:
  resources:
    requests:
      storage: 10Ki
  volumeName: default-storage-class-pv
  accessModes:
    - ReadWriteOnce

PVC通过volumeName先PV default-storage-class-pv申请了10K空间(后面测试发现不能控制住)。

Pod使用VPC

代码语言:javascript
复制
# local_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: local-pv-app-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: local-pv-app
  template:
    metadata:
      labels:
        app: local-pv-app
    spec:
      containers:
      - name: local-pv-app
        image: busybox
        command: ["/bin/sh", "-c", "if [ -f /tempdir/lockfile ] && ! { set -C; 2>/dev/null >/tempdir/lockfile; }; then tail -f /tempdir/lockfile; else exec 3>/tempdir/lockfile; if [ -n \"$POD_NAME\" ]; then name=$POD_NAME; else name=\"unknown\"; fi; while true; do echo \"this is $name.$name write something to lockfile\"; echo \"$name write something to lockfile\" >&3; sleep 1; done; fi"]  
        volumeMounts:
        - name: local-pvc-volume
          mountPath: /tempdir
        env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
      volumes:
      - name: local-pvc-volume
        persistentVolumeClaim:
          claimName: default-storage-class-pvc

在spec.volumes.persistentVolumeClaim.claimName中,我们定义了之前申请的PVC名称。这样PVC就和这个Pod上的卷(local-pvc-volume)产生了关联。 在spec.containers[0].volumeMounts[0].name中,我们设置了Pod上卷的名称。mountPath表示挂载位置。即将该Pod上的卷(local-pvc-volume)挂载到/tempdir目录。

测试

依次创建完PV、PVC和Deployment后,我们观察不同Pod上表现。

代码语言:javascript
复制
kubectl exec pods/local-pv-app-deployment-56d955856f-llgvr -- tail -f /tempdir/lockfile

local-pv-app-deployment-56d955856f-llgvr write something to lockfile local-pv-app-deployment-56d955856f-llgvr write something to lockfile local-pv-app-deployment-56d955856f-llgvr write something to lockfile ……

代码语言:javascript
复制
kubectl logs pods/local-pv-app-deployment-56d955856f-2hq28

local-pv-app-deployment-56d955856f-llgvr write something to lockfile local-pv-app-deployment-56d955856f-llgvr write something to lockfile local-pv-app-deployment-56d955856f-llgvr write something to lockfile ……

可以发现Deployment创建的两个Pod共享了/tempdir/lockfile文件,且local-pv-app-deployment-56d955856f-llgvr负责写入,local-pv-app-deployment-56d955856f-2hq28负责读取。

storage有效性

理论上,如果/tempdir/lockfile文件大小达到PVC申请的10K或者PV规定的100K时,脚本继续写入将失败。但是我们通过频繁获取文件大小会发现,该文件大小会一直膨胀。

代码语言:javascript
复制
kubectl exec pods/local-pv-app-deployment-56d955856f-llgvr -- ls -lh /tempdir/lockfile

-rw-r–r-- 1 root root 2.4K Aug 9 10:25 /tempdir/lockfile -rw-r–r-- 1 root root 9.8K Aug 9 10:26 /tempdir/lockfile -rw-r–r-- 1 root root 10.0K Aug 9 10:26 /tempdir/lockfile -rw-r–r-- 1 root root 10.1K Aug 9 10:26 /tempdir/lockfile -rw-r–r-- 1 root root 99.7K Aug 9 10:49 /tempdir/lockfile -rw-r–r-- 1 root root 100.0K Aug 9 10:49 /tempdir/lockfile -rw-r–r-- 1 root root 100.1K Aug 9 10:49 /tempdir/lockfile -rw-r–r-- 1 root root 593.4K Aug 9 12:51 /tempdir/lockfile

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PV清单
  • PVC清单
  • Pod使用VPC
  • 测试
  • storage有效性
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档