- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
文章链接
容器磁盘上的文件的生命周期是短暂的,这就使得在容器中运行重要应用时会出现一些问题。首先,当容器崩溃时,kubelet
会重启它,但是容器中的文件将丢失——容器以干净的状态(镜像最初的状态)重新启动。其次,在 Pod
中同时运行多个容器时,这些容器之间通常需要共享文件。所以我会用 NFS
为例,创建 PV
、PVC
.
PV 属于集群中的资源。PVC 是对这些资源的请求,也作为对资源的请求的检查。 PV 和 PVC 之间的相互作用遵循这样的生命周期.
PersistentVolume
(PV)是由管理员设置的存储,它是群集的一部分。就像节点是集群中的资源一样,PV 也是集群中的资源。 PV 是 Volume 之类的卷插件,但具有独立于使用 PV 的 Pod 的生命周期。此 API 对象包含存储实现的细节,即 NFS、iSCSI 或特定于云供应商的存储系统。
PV 有两种方式来配置:静态和动态。
yum install -y nfs-utils rpcbind
mkdir -p /home/bsh/nfs
vim /etc/exports
/home/bsh/nfs *(rw,sync,no_root_squash)
配置详解:
---|---
ro |只读访问
rw |读写访问
sync |所有数据在请求时写入共享
async |NFS在写入数据前可以相应请求
secure |NFS通过1024以下的安全TCP/IP端口发送
insecure |NFS通过1024以上的端口发送
wdelay |如果多个用户要写入NFS目录,则归组写入(默认)
no_wdelay |如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
Hide |在NFS共享目录中不共享其子目录
no_hide |共享NFS目录的子目录
subtree_check |如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
no_subtree_check |和上面相对,不检查父目录权限
all_squash |共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
no_all_squash |保留共享文件的UID和GID(默认)
root_squash |root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas |root用户具有根目录的完全管理访问权限
anonuid=xxx |指定NFS服务器/etc/passwd文件中匿名用户的UID
启动 nfs rpcbind
systemctl enable nfs rpcbind
systemctl start nfs rpcbind
创建 yaml 文件
vim tomcat-log-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: tomcat
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /home/bsh/nfs/tomcat-log
server: 10.0.10.51
创建 pv
kubectl apply -f tomcat-log-pv.yaml
查看pv
[root@master ]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
tomcat 1Gi RWX Retain Available 26s
PV的存储容量
PV 将具有特定的存储容量。这是使用PV的capacity属性设置的。
目前,存储大小是可以设置或请求的唯一资源。未来的属性可能包括 IOPS、吞吐量等。
PV的访问模式
PersistentVolume可以以资源提供者支持的任何方式挂载到主机上。如下表所示,供应商具有不同的功能,每个 PV 的访问模式都将被设置为该卷支持的特定模式。例如,NFS 可以支持多个读/写客户端,但特定的 NFS PV 可能以只读方式导出到服务器上。每个 PV 都有一套自己的用来描述特定功能的访问模式。
存储模式包括:
当前的回收策略包括:
storageClassName PV 可以具有一个类,通过将 storageClassName 属性设置为 StorageClass 的名称来指定该类。一个特定类别的 PV 只能绑定到请求该类别的 PVC。没有 storageClassName 的 PV 就没有类,它只能绑定到不需要特定类的 PVC。
PersistentVolumeClaim
(PVC)是用户存储的请求。它与 Pod 相似。Pod 消耗节点资源,PVC 消耗 PV 资源。Pod 可以请求特定级别的资源(CPU 和内存)。声明可以请求特定的大小和访问模式(例如,可以以读/写一次或 只读多次模式挂载)。
创建 yaml 文件
vim tomcat-log-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: tomcat
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
创建 pv
kubectl apply -f tomcat-log-pvc.yaml
查看pv
[root@master ]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
tomcat Bound tomcat 1Gi RWX 18s
vim tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
labels:
app: tomcat
spec:
replicas: 3
selector:
matchLabels:
app: tomcat
minReadySeconds: 1
progressDeadlineSeconds: 60
revisionHistoryLimit: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: wenlongxue/tomcat:tomcat-demo-62-8fe6052
imagePullPolicy: Always
ports:
- containerPort: 8080
resources:
requests:
memory: "2Gi"
cpu: "80m"
limits:
memory: "2Gi"
cpu: "80m"
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 180
periodSeconds: 5
timeoutSeconds: 3
successThreshold: 1
failureThreshold: 30
volumeMounts:
- mountPath: "/usr/local/tomcat/logs"
name: tomcat
volumes:
- name: tomcat
persistentVolumeClaim:
claimName: tomcat
部署查看 pod
# 部署
kubectl apply -f tomcat.yaml
# 查看
kubectl get pods |grep tomcat
tomcat-deployment-7588b5c8fd-4grh2 1/1 Running 0 31s
tomcat-deployment-7588b5c8fd-l89t7 1/1 Running 0 31s
tomcat-deployment-7588b5c8fd-mb8bh 1/1 Running 0 31s
PVC 不关心后端存储提供者是 NFS 还是 GFS,具体使用哪种类型的存储由 PV 来定义,PVC 只和隐藏了存储实现细节的 PV 对接。
本方式为静态分配,如果有一千个 Pod,每个 Pod 有一个 PVC,那么管理员需要人工开设一千个 PV,随着集群规模的扩大,将导致无法有效管理。
K8S 提供了一种可以动态分配的工作机制,可以自动创建 PV,该机制依赖一个叫做 StorageClass 的 API 对象。
文章链接
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!