前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes持久卷实战两部曲之二:细说开发

Kubernetes持久卷实战两部曲之二:细说开发

作者头像
程序员欣宸
发布2022-05-09 09:10:09
1740
发布2022-05-09 09:10:09
举报
文章被收录于专栏:实战docker实战docker

在上一章《Kubernetes持久卷实战两部曲之一:极速体验》我们体验了K8S环境下基于NFS的持久卷读写,今天我们一起来了解整个体验环境背后的细节;

全文概要

要完成上一章的体验,需要做以下事情:

  1. 创建PV;
  2. 创建PVC;
  3. 开发web服务的工程,将web服务打包成镜像并推送到镜像服务器;
  4. 创建web服务对应的deployment;
  5. 创建web服务对应的service;

现在就开始吧!

创建PV

pv对应的配置文件pv1.yaml内容如下:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolume
metadata: 
  name: pv1
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /usr/local/work/nfs
    server: 192.168.119.128
  1. 类型是PersistentVolume;
  2. capacity.storage=1Gi表示这个PV最大为1G;
  3. accessModes=ReadWriteOnce该pv只能被单个节点读写;
  4. nfs配置了网络存储的参数;

创建PVC

pvc对应的配置文件pvc1.yaml内容如下:

代码语言:javascript
复制
apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: pvc1
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

可见,上述pvc没有用到selector,k8s系统会自动匹配到pv1,注意要pv和pvc的storage要一样;

开发web服务的工程

您可以在GitHub下载web服务的源码,地址和链接信息如下表所示:

名称

链接

备注

项目主页

https://github.com/zq2599/blog_demos

该项目在GitHub上的主页

git仓库地址(https)

https://github.com/zq2599/blog_demos.git

该项目源码的仓库地址,https协议

git仓库地址(ssh)

git@github.com:zq2599/blog_demos.git

该项目源码的仓库地址,ssh协议

这个git项目中有多个目录,本次所需的资源放在 k8spvdemo目录下,如下图红框所示:

这里写图片描述
这里写图片描述

这是个普通的springboot工程,有以下几处需要注意:

  1. pom.xml文件中,使用docker-maven-plugin插件将工程打包成镜像;
  2. 提供web服务的UploadController.java中,收到文件后写入的位置是/usr/local/uploadfiles,这个目录对应的是NFS文件夹的挂载位置;
  3. 开发完毕后,执行命令mvn clean package -U -DskipTests docker:build即可将工程编译打包后制作成docker镜像;
  4. 通过docker push命令将镜像推送到hub.docker.com或者其他镜像仓库;
  5. 构建docker镜像相关的操作请参考《 maven构建docker镜像三部曲》系列;

web服务对应的deployment

创建文件k8spvdemo.yaml,用于在k8s上创建web服务的pod:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: k8spvdemo
spec:
  replicas: 1
  template:
    metadata:
     labels:
       name: k8spvdemo
    spec:
     containers:
     - name: k8spvdemo
       image: bolingcavalry/k8spvdemo:0.0.1-SNAPSHOT
       volumeMounts:
       - mountPath: "/usr/local/uploadfiles"
         name: pv1
       tty: true
       ports:
       - containerPort: 8080
     volumes:
     - name: pv1
       persistentVolumeClaim:
         claimName: pvc1
  1. 镜像文件用的是上一步推送到镜像仓库的那个;
  2. volumeMounts中的mountPath就是程序中写入文件的位置;
  3. volumes配置的之前创建的pvc;

web服务对应的service

为了外部可以访问web服务,需要创建一个service来包裹pod,由于类型是NodePort,端口映射是30010,所以外部可以通过节点机器IP地址:30010来访问web服务:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: k8spvdemo
spec:
  type: NodePort
  ports:
       - port: 8080
         nodePort: 30010
  selector:
    name: k8spvdemo

以上就是全部的开发细节,用这些代码和脚本就可以完成上一章的体验了,这种静态持久卷有一点不太方便,就是每次要先通过PV来声明一个存储资源,然后才能使用,后续的文章中,我们还会尝试StorageClass提供的动态PV,不需要每次预先分配资源就能拥有持久卷;

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 全文概要
  • 创建PV
  • 创建PVC
  • 开发web服务的工程
  • web服务对应的deployment
  • web服务对应的service
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档