当前位置: 首页 > news >正文

在CSDN学Golang云原生(Kubernetes Volume)

一,Volume 与 configMap

Kubernetes 中的 Volume 和 ConfigMap 都是 Kubernetes 中常用的资源对象。它们可以为容器提供持久化存储和配置文件等。

Volume 可以将容器内部的文件系统挂载到宿主机上,也可以将多个容器间共享一个 Volume,并且 Volume 与 Pod 的生命周期相同。

ConfigMap 则是一种用于保存应用程序配置数据的 API 对象,通过 ConfigMap 将应用程序配置信息从 Pod Spec 中分离出来,使得应用程序配置更加灵活和可维护。

在使用时,可以将 ConfigMap 挂载为 Volume,使得容器中的应用程序能够访问其中的配置信息;或者将 ConfigMap 直接注入到容器环境变量中,在应用程序启动时读取并使用这些环境变量。

Volume 主要解决了数据持久化问题,而 ConfigMap 则主要解决了应用程序配置管理问题。

二,Volume 与 secret

在 Kubernetes 中,Volume 和 Secret 都是用于为容器提供持久化存储的资源对象。它们的不同点在于 Volume 是用来存储普通数据的,而 Secret 则是专门用来存储敏感数据的。

Secret 可以用来保存密码、密钥等敏感信息,并且这些信息会被加密后保存在 etcd 中。同时,Secret 也可以被挂载到容器内部作为文件系统使用,在容器内部访问这些敏感信息。

Kubernetes 支持多种类型的 Secret 数据,如 Opaque、ServiceAccountToken 等。其中 Opaque 类型的 Secret 可以保存任意类型的键值对,例如用户名和密码等;而 ServiceAccountToken 则是由 Kubernetes 生成的一种安全令牌,用于验证 Pod 与 Kubernetes API Server 的身份。

Volume 和 Secret 都是 Kubernetes 中常用的持久化资源对象,在应用程序开发中起到了很重要的作用。

三,Volume与PersistentVolume

在 Kubernetes 中,Volume 和 PersistentVolume 都是用于为容器提供持久化存储的资源对象。它们的不同点在于 Volume 是由 Pod 直接使用的,而 PersistentVolume 则是由多个 Pod 共享使用的。

PersistentVolume 可以理解为集群中的一个存储池,由管理员进行创建和管理,并且可以被多个 Pod 所共享。同时,在创建 PersistentVolume 时可以指定许多参数,如存储类型、大小、访问模式等等。Pod 使用 PersistentVolumeClaim(PVC)来申请获取一部分 PersistentVolume 的存储空间,并且 PVC 可以与 Pod 一起声明在同一个 YAML 文件中。

当 PVC 被创建时,Kubernetes 会尝试寻找一个可用的 PersistentVolume 来满足其需求,并将这个 PV 绑定到这个 PVC 上。如果没有可用的 PV,则 Kubernetes 将自动地创建一个新的 PV 并绑定到该 PVC 上。当 PVC 不再需要使用这个 PV 时,可以通过删除该 PVC 来释放该 PV 的占用。

PersistentVolume 和 Volume 都是 Kubernetes 中常用的持久化资源对象,在应用程序开发中起到了很重要的作用。但是它们的应用场景有所不同:Volume 更适合为单独运行的 Pod 提供本地存储;而 PersistentVolume 更适合为多个 Pod 提供共享、稳定和长期可用的存储。

四,部署cephfs分布式存储文件系统

在 Kubernetes 中部署 CephFS 分布式存储文件系统需要以下步骤:

  1. 在 Ceph 集群中创建一个 FS 文件系统,使用命令 ceph fs new
  2. 在 Kubernetes 集群中创建一个 Secret 对象,用于存储连接到 Ceph 集群所需的密钥和证书。可以使用 ceph auth get-key client.admin 命令获取这些信息。
  3. 创建一个 ConfigMap 对象,并将 ceph.conf 文件的内容添加到其中。该文件应该包含有关 Ceph 集群的配置信息。
  4. 创建一个 PersistentVolumeClaim(PVC)对象来声明需要访问 CephFS 存储的 Pod。例如:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: cephfs-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 10GistorageClassName: cephfs-storage-class
  1. 创建一个 Deployment 或 StatefulSet 对象,并将上一步中创建的 PVC 和 ConfigMap 引用进来。示例 YAML 文件如下:
apiVersion: apps/v1beta2
kind: Deployment
metadata:name: my-deployment
spec:replicas: 1template:metadata:labels:app: my-appspec:containers:- name: my-containerimagePullPolicy: IfNotPresentimage: nginxvolumeMounts:- mountPath: /var/www/html/name: cephfs-volume-mount  volumes:- name: cephfs-volume-mountpersistentVolumeClaim:claimName: cephfs-pvc- name: ceph-configmapconfigMap:name: ceph-configmap
  1. 部署完成后,可以通过访问 Pod 中的 /var/www/html/ 目录来测试 CephFS 存储是否正常工作。在此之前,需要先在 Ceph 集群中创建一个目录,并将其挂载到该目录。

这就是在 Kubernetes 中部署 CephFS 分布式存储文件系统的步骤。

五,PersistentVolume静态制备

在 Kubernetes 中,可以使用静态 PersistentVolume(PV)制备的方式来创建 PV。下面是一个简单的示例:

  1. 创建一个 PV 文件,例如 pv.yaml,定义存储资源、访问模式和其他属性。示例文件如下:
apiVersion: v1
kind: PersistentVolume
metadata:name: my-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteOncenfs:path: /exports/my-dataserver: nfs.example.com
  1. 执行以下命令创建 PV:
kubectl create -f pv.yaml
  1. 确认 PV 是否已经成功创建:
kubectl get pv
  1. 创建 PVC 文件,例如 pvc.yaml,用于声明需要使用的存储资源和访问模式。示例文件如下:
apiVersion: v1
kind: PersistentVolumeClaim 
metadata:name: my-pvc 
spec:accessModes:- ReadWriteOnce resources:requests:storage: 5Gi 
  1. 执行以下命令创建 PVC:
kubectl create -f pvc.yaml
  1. 在 Pod 配置文件中引用上一步中创建的 PVC。示例 YAML 文件如下:
apiVersion: v1 
kind: Pod 
metadata:name: my-pod 
spec:containers:- name: my-container imagePullPolicy: IfNotPresent image: nginx    volumeMounts:- mountPath: "/var/www/html"name : "my-volume"   volumes :- name: "my-volume"persistentVolumeClaim:claimName: "my-pvc"
  1. 部署 Pod 后,可以访问 /var/www/html 目录来测试是否已经成功挂载 PV。

这就是使用静态 PersistentVolume 制备的方式在 Kubernetes 中创建 PV 的步骤。

六,StorageClass动态制备

在 Kubernetes 中,可以使用动态 StorageClass 制备的方式来创建 PV。下面是一个简单的示例:

  1. 创建一个存储类定义文件 storage-class.yaml,其中指定了如何创建 PersistentVolume 和其他属性。示例文件如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: my-storage-class
provisioner: kubernetes.io/aws-ebs # 存储提供者名称
parameters:type: gp2
reclaimPolicy: Retain # 删除 PVC 时保留 PV
allowVolumeExpansion: true # 允许扩容 PV 容量
  1. 执行以下命令创建 StorageClass:
kubectl create -f storage-class.yaml
  1. 确认 StorageClass 是否已经成功创建:
kubectl get sc
  1. 创建 PVC 文件,例如 pvc.yaml,用于声明需要使用的存储资源和访问模式,并将上一步中创建的 StorageClass 指定为存储类。示例文件如下:
apiVersion: v1 
kind: PersistentVolumeClaim 
metadata:name: my-pvc 
spec:accessModes:- ReadWriteOnce resources:requests:storage: 5Gi storageClassName: my-storage-class # 指定存储类名称
  1. 执行以下命令创建 PVC:
kubectl create -f pvc.yaml
  1. 在 Pod 配置文件中引用上一步中创建的 PVC。示例 YAML 文件如下:
apiVersion: v1 
kind: Pod 
metadata:name: my-pod 
spec:containers:- name: my-container imagePullPolicy: IfNotPresent image: nginx    volumeMounts:- mountPath: "/var/www/html"name : "my-volume"   volumes :- name: "my-volume"persistentVolumeClaim:claimName: "my-pvc"
  1. 部署 Pod 后,可以访问 /var/www/html 目录来测试是否已经成功挂载 PV。

这就是使用动态 StorageClass 制备的方式在 Kubernetes 中创建 PV 的步骤。

七,PersistentVolumeClaim磁盘申领

在 Kubernetes 中,可以使用 PersistentVolumeClaim(PVC)来申领存储资源。下面是一个简单的示例:

  1. 创建一个 PVC 文件 pvc.yaml,用于声明需要使用的存储资源和访问模式。示例文件如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-pvc
spec:accessModes:- ReadWriteOnce   # 访问模式为读写一次resources:requests:storage: 5Gi   # 申请的磁盘空间大小为5GB
  1. 执行以下命令创建 PVC:
kubectl create -f pvc.yaml
  1. 确认 PVC 是否已经成功创建:
kubectl get pvc
  1. 在 Pod 配置文件中引用上一步中创建的 PVC。示例 YAML 文件如下:
apiVersion: v1 
kind: Pod 
metadata:name: my-pod 
spec:containers:- name: my-container imagePullPolicy: IfNotPresent image: nginx    volumeMounts:- mountPath: "/var/www/html"name : "my-volume"   volumes :- name: "my-volume"persistentVolumeClaim:claimName: "my-pvc"
  1. 部署 Pod 后,可以访问 /var/www/html 目录来测试是否已经成功挂载 PV。

这就是在 Kubernetes 中使用 PVC 进行磁盘申领的步骤。

相关文章:

在CSDN学Golang云原生(Kubernetes Volume)

一,Volume 与 configMap Kubernetes 中的 Volume 和 ConfigMap 都是 Kubernetes 中常用的资源对象。它们可以为容器提供持久化存储和配置文件等。 Volume 可以将容器内部的文件系统挂载到宿主机上,也可以将多个容器间共享一个 Volume,并且 …...

第十五章 友元 异常和其他

RTTI RTTI是什么 RTTI是运行阶段类型识别,通过运行时类型识别,程序能够使用基类的指针或者引用来检查这些指针或者引用所指向的对象的实际派生类型。 RTTI的三个元素 dynamic_cast运算符 dynamic_cast概念: dynamic_cast运算符能够将基…...

制作DBC文件

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ DBC文件是CAN通讯的密码本,Matlab的SimuLink中常用DBC作为CAN通讯的解析桥梁 制作DBC文件,内容是转速、位置&…...

【1.1】Java微服务:初识微服务

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 &#x…...

数据结构--串、数组、广义表

这里写目录标题 串定义案例引用串的类型定义以及存储结构抽象类型定义存储结构(顺序表较为常用)顺序存储结构链式存储结构 串的模式匹配算法(查找主串中是否有某个字串)BF算法KMP算法设计思想对字串的回溯进行了优化代码对next【j】进行优化 数组类型一维…...

白银挑战——链表高频面试算法题

算法通关村第一关–链表白银挑战笔记 开始时间:2023年7月18日14:39:36 链表 Java中定义一个链表 class ListNode {public int val;public ListNode next;ListNode(int x) {val x;next null;}}1、四种方法解决两个链表第一个公共子节点 解释一下什么是公共节点 如…...

海外腾讯云账号:腾讯云高性能计算平台 THPC

高性能计算平台(TencentCloud High Performance Computing,THPC)是一款腾讯云自研的高性能计算资源管理服务,集成腾讯云上的计算、存储、网络等产品资源,并整合 HPC 专用作业管理调度、集群管理等软件,向用…...

eclipse 最新版没有navigator视图如何解决

使用project exploere视图可以显示类似navigator视图 1.显示project exploere视图 window---->show view --->project exploere 2.project exploere视图转换为类似navigator视图 第一步:点击视图右上角三个点或者倒三角,点击fiters and custom…...

Zynq-Linux移植学习笔记之62- PL挂载复旦微flash

1、背景介绍 现在为了全国产化需要,之前所有的进口flash全部要换成国产flash 2、复旦微flash型号 其中EFM25QU256和EFM25QL256对标winbond的w25q256 nor flash 3、FPGA设置 复旦微flash只支持单线模式,当使用PL侧的IP核访问时,需要设置模式…...

SpringBoot复习:(2)Tomcat容器是怎么启动的?

SpringApplication的run方法包含如下代码: 其中调用的refreshContext代码如下: 其中调用的refresh方法片段如下: 其中调用的refresh方法代码如下: 其中调用的super.refresh方法代码如下: public void refresh() th…...

1 MobileHomeTopicApplication

目录 1 OrderApplication 1.1 引用文件 1.2 #region 字段 1.3 #region 属性 OrderApplication 引用文件using System; using...

mpi4py包安装报错

报错情况 #include <mpi.h>^~~~~~~compilation terminated.failure.removing: _configtest.c _configtest.oerror: Cannot compile MPI programs. Check your configuration!!![end of output]note: This error originates from a subprocess, and is likely not a probl…...

C语言进阶-1

1、数据类型 1.1、基本数据类型 数据类型分2类&#xff1a;基本数据类型复合类型 基本类型&#xff1a;char short int long float double 复合类型&#xff1a;数组 结构体 共用体 类&#xff08;C语言没有类&#xff0c;C有&#xff09; 1.1.1、内存占用与sizeof运算符 数据…...

Python如何正确解决爬虫过程中的Cookie失效问题?

前言 本文是该专栏的第54篇,后面会持续分享python爬虫干货知识,记得关注。 在python爬虫项目中,Cookie是一种用于在客户端和服务器之间传递信息的技术。在爬取某些网站的时候,可能会需要登录才能正常获取到数据,这个时候就需要用到cookie来解决。通常情况下,需要将cooki…...

维护自己电脑浅析

作为一名计算机用户&#xff0c;维护自己的电脑是非常重要的&#xff0c;这可以保证电脑的正常运行、数据的安全、提高电脑的性能等。在本文中&#xff0c;我将分享一些我个人维护电脑的经验和技巧。 定期清理电脑 电脑在使用过程中会产生大量的临时文件、垃圾文件、缓存文件等…...

svo2论文

论文题目 SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems 内容 1&#xff09; 具有最小特征漂移的长特征轨迹&#xff1b; 2&#xff09; 图像平面中的大量均匀分布的特征&#xff1b; 3&#xff09;新特征与旧地标的可靠关联&#xff08;即环路闭…...

【GoLang】MAC安装Go语言环境

小试牛刀 首先安装VScode软件 或者pycharmmac安装brew软件 brew install go 报了一个错误 不提供这个支持 重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env 可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc, # bre…...

epoll服务器创建

驱动 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io.h> #include <linux/device.h> #include <linux/uaccess.h> #include <linux/poll.h> unsigned int major; char kbuf[128]{0}…...

jdk11环境 提示“因为 accessExternalDTD 属性设置的限制导致不允许 ‘http‘ 访问“bug

在运行mybatis源码的时候&#xff0c;提示一下错误&#xff1a; Exception in thread "main" org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### Cause: org.apache.ibatis.builder.BuilderException: Error creating docum…...

Android Studio 的版本控制Git

Android Studio 的版本控制Git。 Git 是最流行的版本控制工具&#xff0c;本文介绍其在安卓开发环境Android Studio下的使用。 本文参考链接是&#xff1a;https://learntodroid.com/how-to-use-git-and-github-in-android-studio/ 一&#xff1a;Android Studio 中设置Git …...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…...