我们使用AKS在Azure上使用Kubernetes。
我们有一个场景,需要将持久卷附加到我们的AKS集群中的每个节点。我们在集群中的每个节点上运行一个Docker容器。
动态附加卷的原因是为了增加每个Docker容器执行其任务所需的可用IOPS和可用存储量。
我已经按照文档创建了一个StorageClass、持久卷声明和持久卷,并在1个POD上运行它。https://docs.microsoft.com/en-us/azure/aks/azure-disks-dynamic-pv
但是,当我创建一个部署并将pod的数量从1扩展到2时,我会收到错误(在生产中,我们会扩展到必要的节点数~100)
卷“PVC-784496E4-869D-11E8-8984-0A58AC1F1E06”的多附加错误,卷已由pod(多个)PV使用-部署-67FD8B7B95-FJN2N
持久卷声明:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-managed-disk
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-premium
resources:
requests:
storage: 100Gi
这是我的部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: pv-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- name: volume
mountPath: /mnt/azure
resources:
limits:
cpu: ".7"
memory: "2.5G"
requests:
cpu: ".7"
memory: "2.5G"
volumes:
- name: volume
persistentVolumeClaim:
claimName: azure-managed-disk
如果我知道我将扩展到100个节点,我是否必须创建一个包含100个部署的。yaml文件,并明确每个部署使用特定的卷声明?
volumes:
- name: volume
persistentVolumeClaim:
claimName: azure-claim-01
您应该使用StateFulSet
和VolumeClaimTemplates
配置,如下所示:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 80
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 4
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
volumeMounts:
- name: persistent-storage
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: persistent-storage
annotations:
volume.beta.kubernetes.io/storage-class: hdd
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 2Gi
---
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: hdd
provisioner: kubernetes.io/azure-disk
parameters:
skuname: Standard_LRS
kind: managed
cachingMode: ReadOnly
您将获得每个节点的持久卷:
Kubectl获取PV
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON
AGE
pvc-0e651011-7647-11e9-bbf5-c6ab19063099 2Gi RWO Delete Bound default/persistent-storage-web-0 hdd
51m
pvc-17181607-7648-11e9-bbf5-c6ab19063099 2Gi RWO Delete Bound default/persistent-storage-web-1 hdd
49m
pvc-4d488893-7648-11e9-bbf5-c6ab19063099 2Gi RWO Delete Bound default/persistent-storage-web-2 hdd
48m
pvc-6aff2a4d-7648-11e9-bbf5-c6ab19063099 2Gi RWO Delete Bound default/persistent-storage-web-3 hdd
47m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistent-storage-web-0 Bound pvc-0e651011-7647-11e9-bbf5-c6ab19063099 2Gi RWO hdd 55m
persistent-storage-web-1 Bound pvc-17181607-7648-11e9-bbf5-c6ab19063099 2Gi RWO hdd 48m
persistent-storage-web-2 Bound pvc-4d488893-7648-11e9-bbf5-c6ab19063099 2Gi RWO hdd 46m
persistent-storage-web-3 Bound pvc-6aff2a4d-7648-11e9-bbf5-c6ab19063099 2Gi RWO hdd 45m
我找到的最接近的答案是这样的。 但我想知道的是,Dockerfile卷命令会被Kubernetes完全忽略吗?或者数据将被持久化到两个地方?一个用于docker卷(在主机中哪个豆荚运行),另一个是Kubernetes的PV? 之所以这样问,是因为我从docker hub部署了一些容器,其中包含VOLUME命令。同时,我也把PVC贴在我的豆荚上。我在考虑是否会在节点中创建本地卷(docker卷,而不
我使用Grafana(v2.1.3)进行指标可视化。指标来自Graphite收集的Collectd。目标图是以百分比显示多个节点的空闲磁盘空间,例如,让文件夹 /data,所以以字节表示空闲空间的度量是: 表示总空间的度量是以下各项的总和: 因此,我有以下配置: 这里的$节点是从下拉列表(All,node1,node2,node3等)中选择的变量。当选择一个特定的节点时,它会按预期工作,但选择了错
给定一个点集S,要求用2个固定半径r的圆复盖最大数目的点。通过考虑距离小于2r的每对点,可以计算出一个圆盘所能覆盖的最大点数。通过一对点可以构造2个圆。从所有这样的组合中,选择覆盖最大点的圆和覆盖第二最大点的圆。但它会给出最优答案吗,还是这种方法要做一些改变呢?
谢谢 ----更新----
本文向大家介绍一篇文章揭秘Redis的磁盘持久化机制,包括了一篇文章揭秘Redis的磁盘持久化机制的使用技巧和注意事项,需要的朋友参考一下 前言 Redis 是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将 Redis 中的数据以数据或命令的形式从内存保存到本地磁盘。当下次 Redis 重启时,利用持久化文件进行数据恢复。Redis 提供了 RDB 和 AOF 两
问题内容: 我目前在我的Java应用程序中使用memcached,总体而言,它运行良好。 对我而言最重要的memcached功能包括: 它的速度很快,因为读写是在内存中,并且不会接触磁盘 这只是一个键/值存储(因为这就是我所有的应用程序需求) 它是分布式的 通过使每个对象恰好位于一台服务器上,它有效地使用了内存 它不假定对象来自数据库(因为我的对象不是数据库对象) 但是,有一件我想做的事情是mem